Я читаю книгу « How Linux Works и я кое-что не понимаю:

В обычных системах Linux большинство процессов имеют одинаковый effective user ID и real user ID . По умолчанию ps и другие программы диагностики системы показывают effective user ID . Чтобы просмотреть действительные и реальные идентификаторы пользователей в вашей системе, попробуйте это, но не удивляйтесь, если обнаружите, что два столбца идентификаторов пользователей идентичны для всех процессов в вашей системе:

$ ps -eo pid,euser,ruser,comm

Чтобы создать исключение, чтобы вы могли видеть разные значения в столбцах, попробуйте поэкспериментировать, создав копию setuid команды sleep , выполнив копию в течение нескольких секунд, а затем выполнив предыдущую команду ps в другом окне, прежде чем копия завершится. ,

Автор сказал: try experimenting by creating a setuid copy of ... , но как создать копию setuid команды sleep ? Благодарю.

1 ответ1

1

Сначала создайте копию в месте, из которого вы могли бы ее запустить (т.е. файловые системы, смонтированные с помощью noexec , не подходят). Это /tmp/ в моем примере.

sudo cp /bin/sleep /tmp/

(Я использовал sudo чтобы убедиться, что копия принадлежит root с самого начала; это спасает меня от sudo chown … позже). Следующая команда устанавливает бит setuid для файла:

sudo chmod u+s /tmp/sleep

Теперь запустите его в фоновом режиме как обычный пользователь:

/tmp/sleep 300 &

Затем проверьте вывод ps:

ps -eo pid,euser,ruser,comm | grep sleep

В результате euser указывает на владельца файла, а ruser указывает на пользователя, который выполняет.

Примечание: во время игры с setuid имейте в виду, что он не работает со скриптами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .