Как работают реальные и эффективные идентификаторы пользователей?

13

Когда обычный пользователь хочет внести изменения в файл passwd, ему по setuid будет предоставлен эффективный доступ пользователя. Пользователь временно становится пользователем root и может редактировать пароль.

Однако вы можете редактировать только свой пароль правильно, и не все остальные? Однако ваш эффективный пользовательский доступ - root. Так почему же вам не разрешено менять другие пароли помимо ваших?

Когда вы запускаете программу с setuid, что это означает на самом деле, когда эффективный пользователь является пользователем root, но реальным идентификатором пользователя остается ваше имя?

starcorn
источник

Ответы:

13

Вы не можете изменить другие пароли, потому что программа не позволит вам. Программа имеет системные разрешения для изменения любого пароля, который она хочет, потому что она работает как root, но программа была специально разработана, чтобы не дать пользователю никакого способа заставить его использовать эти разрешения.

Дело не только в том, что пользователь временно становится пользователем root, но и в том, что доверенная программа запускается с правами root. Очевидно, что только программы, специально предназначенные для того, чтобы ограничивать пользователей только тем, что им разрешено делать, могут быть безопасно настроены.

Дэвид Шварц
источник
Таким образом, в случае, если я открываю оболочку, устанавливая uid в 0 (используя setreuid), так что эффективный uid будет root, но реальный uid все равно я. Поскольку я не думаю, что в оболочку специально встроено что-то, что мешает мне, значит ли это, что я получу доступ ко всей системе?
звездная кукуруза
Мне интересно в контексте техники атаки стека сокрушительных. Где злонамеренный хакер открывает оболочку с уровнем суперпользователя.
звездная кукуруза
@starcron: да. Фактически, майские атаки демонстрируются, показывая, как использовать эту атаку для создания корневой оболочки setuid.
Дэвид Шварц
2

Вам разрешается изменять только ваш пароль, несмотря на наличие эффективного идентификатора пользователя root, поскольку во время смены пароля проверяется действительный идентификатор пользователя, а не эффективный идентификатор пользователя. Вы можете изменить только действующий идентификатор пользователя, а не реальный идентификатор пользователя.
Только пользователь root может изменить идентификатор реального пользователя, чтобы запустить программу как непривилегированный пользователь. Реальный идентификатор пользователя не может быть изменен, так как он установлен во время начала сеанса.
Вот почему только ваш пароль может быть изменен, поскольку реальный идентификатор пользователя не изменяется (так как он все еще ваш, а не root).

Mayank
источник
0

Ранним взломом в Unix было сделать символическую ссылку на скрипт оболочки setuid и вызвать ссылку -i. В результате вызывается сценарий, sh -iкоторый вместо выполнения сценария, называемого -iпо назначению, запускает интерактивную оболочку, которая затем дает полную мощность. Эффективный идентификатор пользователя может быть использован для изменения passwdфайла для любого пользователя или самого пользователя root. Лучший способ избежать этого - использовать SELinux, чтобы предотвратить изменение сценариев доверия или программ вне области, которую SELinux позволяет им запускать.

Другой метод заключается в том, чтобы иметь неизменный бит в важных файлах, один набор которых не может быть изменен даже пользователем root (кроме однопользовательского режима)

В качестве пользователя root вы можете пригласить пользователей войти в вашу систему без пароля и выглядеть как любой пользователь, но обычные привилегированные процессы очень стараются предотвратить это.

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

jrrk
источник
0

Вам разрешено изменять только ваш пароль, потому что программа set-password, хотя и может делать что-либо, запрограммирована только на изменение паролей. Он проверит реальный идентификатор пользователя, чтобы решить, какой пароль изменить.

Поскольку вы не можете изменить свой реальный идентификатор пользователя, даже вызывая программу set-uid, программа может использовать ее для обеспечения безопасности. Операционная система снимает защиту с установленной корневой программы uid.

Примечание: корневая программа set uid также может изменить реальный идентификатор пользователя (но в данном случае это не используется).

Предупреждение: установка корня uid считается вредной (что намного меньше идеального). В наши дни мы должны использовать возможности (см. Каковы различные способы установки прав доступа к файлам и т. Д. В gnu / linux и http://man7.org/linux/man-pages/man7/capabilities.7.html )

Ctrl-Alt-Делор
источник