2015-10-12 4 views
4

В чем разница между функцией setuid и seteuid. В man-странице обе функции имеют аналогичное описание.setuid vs seteuid function

УИП:

DESCRIPTION 

    setuid() sets the effective user ID of the calling process. If the effective UID of the caller is root, the real UID and saved 
    set-user-ID are also set. 

seteuid:

DESCRIPTION 

    seteuid() sets the effective user ID of the calling process. Unprivileged user processes may only set the effective user ID to 
    the real user ID, the effective user ID or the saved set-user-ID. 

В обоих описании содержит sets the effective user ID of the calling process. Так в чем разница между этими двумя и как функциональность отличается между этими функциями.

И еще одно сомнение заключается в использовании chmod (chmod u + s) только может установить для пользователя заданный пользователем идентификатор пользователя. Тогда только во время выполнения программы у процесса есть разрешение, у которого установлено значение идентификатор пользователя. Кроме того, как эти функции устанавливают эффективный идентификатор пользователя для процесса.

+0

Возможный дубликат [Разница между функцией setuid и seteuid] (http://stackoverflow.com/questions/33077818/difference-between-setuid-and-seteuid-function) – Snorex

+0

Похож на ваш другой пост с того же дня , Чтобы упорядочить вещи, возможно, отредактируйте более поздний вопрос, чтобы включить информацию выше, а затем удалить ее? – Snorex

ответ

3

От man page:

Thus, a set-user-ID-root program wishing to temporarily drop root 
    privileges, assume the identity of an unprivileged user, and then 
    regain root privileges afterward cannot use setuid(). You can 
    accomplish this with seteuid(2). 
+0

В чем нужда. почему корень нуждается в непривилегированном идентификаторе пользователя. У вас есть пример? – mrg

+1

Ну, один из возможных примеров заключается в том, что процессу нужны некоторые привилегированные ресурсы (например, порт 80 для HTTP-сервера), но после того, как процесс собрал этот ресурс, больше не нужно запускать как «root» (так что вы можете проверить, Веб-сервер Apache работает как непривилегированный пользователь, например '_http' или' _apache'. Обычно такая мера используется в качестве меры предосторожности: возможный разрыв нерентабельного сервера обычно дает менее вредные последствия. – user3159253

+1

У меня есть сомнения в приведенной выше ссылке на страницу руководства. Используя setuid, мы можем установить эффективный идентификатор пользователя процесса. Для примера: \t setuid (getuid()); \t После выполнения этого оператора, действительный идентификатор пользователя процесса изменяется на текущего пользователя. Итак, чтобы восстановить корень , я просто использую, \t setuid (0); Но почему ссылка на справочную страницу man показывает, что 'afterward не может использовать setuid(). Вы можете выполнить это с помощью seteuid (2) '. – mrg

0

В ответ на вопрос «почему использование seteuid()»: некоторые системные приложения используют seteuid(), так что они могут попытаться выполнить инструкции с привилегиями «эффективный "пользователь. Это позволяет программировать под управлением root, чтобы гарантировать, что, например, любые созданные им файлы создаются с использованием эффективного идентификатора пользователя, а не идентификатора корня.

Возможно, наиболее заметным приложением является система Unix «cron», которая должна запускаться как пользовательский «root», но несет ответственность за выполнение произвольных команд как произвольных пользователей.