Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
int setregid(gid_t rgid, gid_t egid)Делает для действительных и эффективных ID групп то же, что
setreuid()rootСохраненный set-user ID в модели BSD не существует, поэтому лежащей в основе
setreuid()setregid()setreuid(geteuid(), getuid()); /* обмен действительным и эффективным */Однако, с принятием POSIX модели сохранения set-user ID и функций
seteuid()setegid()seteuid()setuid()setegid()setgid()11.6.3. Использование битов setuid и setgid
Есть важные случаи, в которых действующая как
rootlogin
Рис. 11.1. От
initgettyloginКод для
login1.
initinitroot2.
init/etc/inittabinitgettyinitexec()gettymingettylogin:3. По получении регистрационного имени
gettyloginloginlogin4.
logindup()5. Затем
loginsetgroups()setgid()setuid()setuid()6. Наконец,
login/etc/profile$HOME/.profileОбратите внимание, как один процесс меняет свою сущность от системного процесса до процесса пользователя. Каждый потомок
initinitexec()setuid()rootexitinitgettylogin:ЗАМЕЧАНИЕ. Открытые файлы остаются открытыми и доступными для использования, даже после изменения процессом своих UID или GID. Таким образом, программы с setuid должны заранее открыть все нужные файлы, изменить их ID на ID действительного пользователя и продолжить оставшуюся часть работы без дополнительных привилегий
В табл. 11.1 приведена сводка шести стандартных функций для манипулирования значениями UID и GID.
Таблица 11.1. Сводка API для установки действительных и эффективных ID [120]
| Функция | Устанавливает | Постоянно | Обычный пользователь | Root |
|---|---|---|---|---|
seteuid() | E | Нет | Из R, E, S | Любое |
setegid() | E | Нет | Из R, E, S | Любое |
setuid() | Root: R,E,S Другие: E | Root: да Другие: нет | Из R, E | Любое |
setgid() | Root: R,E,S Другие: E | Root: да Другие: нет | Из R, E | Любое |
setreuid() | E, может установить R | Нет | Из R, E | Любое |
setregid() | E, может установить R | Нет | Из R, E | Любое |
