Когда обычный пользователь хочет внести изменения в файл passwd, ему по setuid будет предоставлен эффективный доступ пользователя. Пользователь временно становится пользователем root и может редактировать пароль.
Однако вы можете редактировать только свой пароль правильно, и не все остальные? Однако ваш эффективный пользовательский доступ - root. Так почему же вам не разрешено менять другие пароли помимо ваших?
Когда вы запускаете программу с setuid, что это означает на самом деле, когда эффективный пользователь является пользователем root, но реальным идентификатором пользователя остается ваше имя?
Вам разрешается изменять только ваш пароль, несмотря на наличие эффективного идентификатора пользователя root, поскольку во время смены пароля проверяется действительный идентификатор пользователя, а не эффективный идентификатор пользователя. Вы можете изменить только действующий идентификатор пользователя, а не реальный идентификатор пользователя.
Только пользователь root может изменить идентификатор реального пользователя, чтобы запустить программу как непривилегированный пользователь. Реальный идентификатор пользователя не может быть изменен, так как он установлен во время начала сеанса.
Вот почему только ваш пароль может быть изменен, поскольку реальный идентификатор пользователя не изменяется (так как он все еще ваш, а не root).
источник
Ранним взломом в Unix было сделать символическую ссылку на скрипт оболочки setuid и вызвать ссылку
-i
. В результате вызывается сценарий,sh -i
который вместо выполнения сценария, называемого-i
по назначению, запускает интерактивную оболочку, которая затем дает полную мощность. Эффективный идентификатор пользователя может быть использован для измененияpasswd
файла для любого пользователя или самого пользователя root. Лучший способ избежать этого - использовать SELinux, чтобы предотвратить изменение сценариев доверия или программ вне области, которую SELinux позволяет им запускать.Другой метод заключается в том, чтобы иметь неизменный бит в важных файлах, один набор которых не может быть изменен даже пользователем root (кроме однопользовательского режима)
В качестве пользователя root вы можете пригласить пользователей войти в вашу систему без пароля и выглядеть как любой пользователь, но обычные привилегированные процессы очень стараются предотвратить это.
Если вы используете какие-то сетевые системы регистрации, пользователь root будет рассматриваться как никто в этом файловом пространстве вместо root, что позволяет ненадежным компьютерам подключаться к доверенной сети, такой как университетский городок.
источник
Вам разрешено изменять только ваш пароль, потому что программа set-password, хотя и может делать что-либо, запрограммирована только на изменение паролей. Он проверит реальный идентификатор пользователя, чтобы решить, какой пароль изменить.
Поскольку вы не можете изменить свой реальный идентификатор пользователя, даже вызывая программу set-uid, программа может использовать ее для обеспечения безопасности. Операционная система снимает защиту с установленной корневой программы uid.
Примечание: корневая программа set uid также может изменить реальный идентификатор пользователя (но в данном случае это не используется).
Предупреждение: установка корня uid считается вредной (что намного меньше идеального). В наши дни мы должны использовать возможности (см. Каковы различные способы установки прав доступа к файлам и т. Д. В gnu / linux и http://man7.org/linux/man-pages/man7/capabilities.7.html )
источник