От APUE
Идентификатор реального пользователя и идентификатор реальной группы процесса определяют, кто мы на самом деле. Эти два поля взяты из нашей записи в файле паролей при входе в систему. Обычно эти значения не меняются во время сеанса входа в систему, хотя существуют и способы для суперпользователя, чтобы изменить их
Может ли процесс суперпользователя изменить реальный идентификатор пользователя и реальный идентификатор группы процесса, чтобы отношение между реальным идентификатором пользователя и реальным идентификатором группы не совпадало с теми, которые указаны в файле паролей? Например, если пользователь Tim
не является членом группы ocean
по файлу паролей, может ли суперпользовательский процесс изменить реальный идентификатор пользователя и реальный идентификатор группы процесса на Tim
и ocean
соответственно?
Ответы:
Да, процесс суперпользователя может изменить свой реальный идентификатор пользователя и реальный идентификатор группы на любое значение, которое он пожелает. Значения
/etc/passwd
и/etc/shadow
являются конфигурацией для того, какие значения должны быть установлены, но не ограничением возможных значений.Редактировать # 1
Это означает, что программы вроде
login
будут читать значения из файлов, поэтому файлы являются файлами конфигурации или входными файлами. Они не являются ограничением того, что может сделать программа. Процесс суперпользователя может передать ядру любое значение, и ядро не будет проверять какие-либо файлы.Программа может позвонить
и это будет работать, даже если ни один из идентификаторов не упомянут ни в одном файле.
источник
Файл пароля и файл группы не читаются, они считываются только процессом входа в систему, чтобы установить реальный идентификатор пользователя и реальный идентификатор группы.
В ядре нет ничего, упоминающего эти файлы. Логин должен открыть файлы, обработать их и установить два идентификатора. Это может быть написано по-другому, чтобы получить эти идентификаторы откуда-то еще. Например, из сетевой базы данных.
Любой процесс с возможностью CAP_SETUID может установить эти идентификаторы, root имеет эту возможность.
Модель безопасности в Unix является частью, реализованной в ядре, и частью, реализованной в процессе, который работает с повышенными возможностями (например, с правами root).
Обратите внимание , что
/etc/passwd
и/etc/group
также читатьls
,ps
и любую другую программу , которая должна переводить имена пользователей / групп в / из идентификаторов пользователей / групп. (Они могут сделать это через библиотеку, чем знают об альтернативных методах хранения этих деталей.)источник
/etc/passwd
,/etc/groups
) также считываются процессами, которые хотят показывать или обрабатывать имена пользователей вместо внутренних числовых идентификаторов, например,ps
иls
.Помимо прочего, целью
/etc/passwd
является преобразование имени пользователя в UID пользователя . Если вам все равно, что такое UID Боба, вам не нужен этот файл. Если вы просто хотите изменить произвольный UID / GID, используйте соответствующие системные вызовы:Обратите внимание , что привилегированный процесс с
CAP_SETUID
иCAP_SETGID
возможностями (которые процесс корня обычно имеет) может изменить только свой собственный UID и GID, не то другой запущенный процесс.источник