Различие между реальным и эффективным идентификатором пользователя производится потому, что вам может потребоваться временно использовать идентификатор другого пользователя (большую часть времени это будет root
, но это может быть любой пользователь). Если у вас был только один идентификатор пользователя, после этого не было бы способа вернуться к исходному идентификатору пользователя (за исключением принятия вашего слова как должного, а в случае, если вы используете root
, используя привилегии root
для изменения для любого пользователя) ,
Итак, реальный идентификатор пользователя - это кто вы на самом деле (тот, кто владеет процессом), а эффективный идентификатор пользователя - это то, на что операционная система пытается принять решение, разрешено ли вам что-либо делать (в большинстве случаев есть некоторые исключения).
Когда вы входите в систему, оболочка входа устанавливает как действительный, так и эффективный идентификатор пользователя с тем же значением (ваш реальный идентификатор пользователя), который предоставляется файлом пароля.
Теперь, это также случается, что вы выполняете Setuid программу, и к тому же работает в качестве другого пользователя (например root
) УИП программа также должен делать что-то от вашего имени. Как это работает?
После выполнения программы setuid у нее будет ваш реальный идентификатор (так как вы являетесь владельцем процесса) и действительный идентификатор пользователя владельца файла (например, root
), поскольку он является setuid.
Программа выполняет любую магию, необходимую для привилегий суперпользователя, а затем хочет что-то сделать от вашего имени. Это означает, что попытка сделать то, что вы не можете сделать , должно завершиться неудачно.. Как оно это делает? Ну, очевидно, изменив свой эффективный идентификатор пользователя на реальный идентификатор пользователя!
Теперь, когда программа setuid не имеет возможности переключиться, поскольку все ядро знает ваш идентификатор и ... ваш id. Банг, ты мертв.
Это то, для чего предназначен сохраненный идентификатор set-user.
FYI - существует идентификатор пользователя файловой системы, как указано на странице Википедии: https://en.wikipedia.org/wiki/User_identifier –