Как `создать копию setuid` какой-либо команды?

266
cmal

Я читаю книгу, 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? Благодарю.

0

1 ответ на вопрос

1
Kamil Maciorowski

Сначала создайте копию в месте, из которого вы можете запустить ее (т. Е. Файловые системы, смонтированные с 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 имейте в виду, что он не работает со скриптами .

Похожие вопросы