Эта функция делает для эффективного ID группы то, что seteuid()
Следующий набор функций предлагает первоначальный API Unix для изменения действительных и эффективных UID и GID. В модели POSIX эти функции являются тем. что должна использовать программа с setuid-root для постоянного изменения действительного или эффективного UID:
int setuid(uid_t uid)
Для обычного пользователя эта функция также устанавливает лишь эффективный UID. Как и для seteuid()
Однако, для root
int setgid(gid_t gid)
Эта функция делает для эффективного ID группы то же, что setuid()
root.ЗАМЕЧАНИЕ
. Возможность изменения ID группы зависит от эффективного ID пользователя. Эффективный GID, равный 0, не имеет особых привилегий.Наконец, POSIX представляет для исторической совместимости две функции из BSD 4.2. В новом коде их лучше не использовать. Однако, поскольку вы, вероятно, увидите использующий эти функции старый код, мы их здесь опишем.
int setreuid(uid_t ruid, uid_t euid)
Устанавливает данные значения в качестве действительного и эффективного UID. Значение -1 для ruid
euid оставляет соответствующие ID без изменения. (Это похоже на chown(); см. раздел 5.5.1 «Смена владельца файла: chown(), fchown() и lchown()».)root
root, могут изменять лишь эффективный ID; то, что случится, если обычный пользователь попытается изменить действительный UID, «не определено». Однако, справочная страница GNU/Linux int setregid(gid_t rgid, gid_t egid)
Делает для действительных и эффективных ID групп то же, что setreuid()
root.Сохраненный set-user ID в модели BSD не существует, поэтому лежащей в основе setreuid()
setregid() идеей было упростить переключение между действительным и эффективным ID:setreuid(geteuid(), getuid()); /* обмен действительным и эффективным */
Однако, с принятием POSIX модели сохранения set-user ID и функций seteuid()
setegid() функции BSD не следует использовать в новом коде. Даже документация BSD 4.4 помечает эти функции как устаревшие, рекомендуя вместо них seteuid()/setuid() и setegid()/setgid().11.6.3. Использование битов setuid и setgid
Есть важные случаи, в которых действующая как root
login, которую вы используете (либо непосредственно, либо удаленно) каждый раз при регистрации в системе GNU/Linux или Unix. Имеется иерархия программ, как очерчено на рис. 11.1.Рис. 11.1
. Отinit через getty через login к shellКод для login
1. init
init. Он действует с действительным и эффективным UID, равными нулю, т.е. как root.Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT