2013-10-27 5 views
3

Я заметил, что обычные пользователи могут изменять свои собственные пароли без sudo. Но, насколько я знаю, для смены пароля необходимо написать файл/etc/shadow, доступный только для root.Как пользователи linux меняют свой пароль без привилегий root?

Как это происходит?

+0

Задайте этот вопрос у Суперпользователя http://superuser.com/ –

ответ

3

Программа passwd в установленном setuid root:

$ ls -l `which passwd` 
-rwsr-xr-x 1 root root 41284 Sep 12 2012 /usr/bin/passwd 

Обратите внимание на s в четвертой позиции. Это флаг, который может быть установлен в разрешениях файлов, которые сообщают Linux о привилегиях пользователя, которому принадлежит исполняемый файл, когда он запущен - в этом случае - root.

+0

Но для изменения пароля программа должна писать в базу паролей. Я полагаю, что только root может получить доступ к этой базе данных (иначе любой обычный пользователь сможет напрямую изменять базу данных). Итак, проблема в том, что если кто-то не может изменить базу данных паролей, как они меняют свой пароль? – Chen

+0

Флаг setuid означает, что 'passwd' работает с привилегиями root, а не от пользователя, который его вызывает, поэтому программа' passwd' может читать/писать '/ etc/shadow'. – pobrelkey

-1

Пользователь может просто изменить пароль работает

passwd 

из командной строки Linux.

+0

Это правда, но это не объясняет, как passwd может писать файл/etc/shadow. – 8128