2015-09-08 2 views
50

Мне уже известно о реальном идентификаторе пользователя. Это уникальный номер для пользователя в системе. В моей системе, находится uidРазница между реальным идентификатором пользователя, эффективным идентификатором пользователя и сохраненным идентификатором пользователя

$ echo $UID 
1014 
$     

Для чего предназначены другие два ID. И каково использование эффективного идентификатора пользователя и сохраненного идентификатора пользователя и где мы его используем в системе.

+0

FYI - существует идентификатор пользователя файловой системы, как указано на странице Википедии: https://en.wikipedia.org/wiki/User_identifier –

ответ

75

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

Итак, реальный идентификатор пользователя - это кто вы на самом деле (тот, кто владеет процессом), а эффективный идентификатор пользователя - это то, на что операционная система пытается принять решение, разрешено ли вам что-либо делать (в большинстве случаев есть некоторые исключения).

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

Теперь, это также случается, что вы выполняете Setuid программу, и к тому же работает в качестве другого пользователя (например root) УИП программа также должен делать что-то от вашего имени. Как это работает?
После выполнения программы setuid у нее будет ваш реальный идентификатор (так как вы являетесь владельцем процесса) и действительный идентификатор пользователя владельца файла (например, root), поскольку он является setuid.

Программа выполняет любую магию, необходимую для привилегий суперпользователя, а затем хочет что-то сделать от вашего имени. Это означает, что попытка сделать то, что вы не можете сделать , должно завершиться неудачно.. Как оно это делает? Ну, очевидно, изменив свой эффективный идентификатор пользователя на реальный идентификатор пользователя!

Теперь, когда программа setuid не имеет возможности переключиться, поскольку все ядро ​​знает ваш идентификатор и ... ваш id. Банг, ты мертв.

Это то, для чего предназначен сохраненный идентификатор set-user.

+0

Для большей ясности в этом последнем пункте об идентификаторе пользователя с сохраненным набором см. [Википедия.] (Https://en.wikipedia.org/wiki/User_identifier#Saved_user_ID) – GDP2

+0

Можете ли вы указать мне некоторые показания, где я могу найти, какой вызов sys проверяет вместо Real uid? спасибо – mik1904

+0

@ mik1904: Самый важный, который вы, вероятно, будете использовать, который действительно _checks_ real UID является «доступом». Это 99,9%. Также 'setfsuid' (но редко требуется) и некоторые очень низкие уровни, и вам нужно (но не проверено) реальный идентификатор пользователя для получения/настройки приоритетов или планировщика, а идентификаторы, переданные обработчикам сигналов или возвращенные 'wait' и др. _are_ действительные идентификаторы. 'execve' не проверяет, а _can fail_, если вы изменили реальный идентификатор пользователя. Также 'fork' не проверяет, а _can fail_, если вы достигнете максимальной квоты процесса на реальном UID. Google с 'site: man7.org' является вашим другом здесь. – Damon

Смежные вопросы