cap_chown
не требуется для самого passwd
. Нужно только изменить файл /etc/shadow, связанный с файлом userID
. Файл /etc/shadow настроен таким образом, что его не может прочитать кто угодно.
/etc/shadow доступен только для root. Поэтому, когда /etc/passwd завершит работу модуля аутентификации и будет готов записать новый (закодированный) пароль, он создаст токен. К которому обращается служба Linux-PAM, которая отправляет его на root и записывает в /etc/shadow.
Редактировать:
passwd использует файлы /etc/.pwd.lock, /etc/shadow, /etc/nshadow. Так как passwd читает и пишет из каталога /etc, ему требуются разрешения w. Обратите внимание, что /etc/shadow никогда не записывается с помощью passwd. passwd фактически записывает в /etc/nshadow и переименовывает /etc/nshadow в /etc/shadow.
open('/etc/nshadow',O_WRONLY|O_CREAT)=fd1
open('/etc/shadow', O_RDONLY)=fd2
fchown(fd1, uid=root, gid=shadow)
chmod /etc/shadow to : rw by owner and r by group
read(fd2)
write(fd1)
rename("/etc/nshadow", "/etc/shadow")
Кроме того, я подтвердил существование /etc/nshadow
с помощью этой программы на C. К вашему сведению,
#include<stdio.h>
#include<unistd.h>
int main()
{
while(1)
if (access("/etc/nshadow",F_OK)!=-1){
printf("Exists\n");
break;
}
return 0;
}
person
Lelouch Lamperouge
schedule
21.10.2011