Может ли процесс суперпользователя изменить реальный идентификатор пользователя и идентификатор группы процесса, не совпадая с данными в файле паролей?

От APUE

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

Может ли процесс суперпользователя изменить реальный идентификатор пользователя и реальный идентификатор группы процесса, чтобы отношение между реальным идентификатором пользователя и реальным идентификатором группы не совпадало с теми, которые указаны в файле паролей? Например, если пользователь Tim не является членом группы ocean для файла паролей, может ли процесс суперпользователя изменить реальный идентификатор пользователя и идентификатор реальной группы процесса на Tim и ocean соответственно?

3 Solutions collect form web for “Может ли процесс суперпользователя изменить реальный идентификатор пользователя и идентификатор группы процесса, не совпадая с данными в файле паролей?”

Да, процесс суперпользователя может изменить свой реальный идентификатор пользователя и реальный идентификатор группы на любое значение, которое он пожелает. Значения в /etc/passwd и /etc/shadow являются конфигурацией для того, какие значения должны быть установлены, но не ограничением возможных значений.

Редактировать # 1

Это означает, что программы, такие как login будут считывать значения из файлов, поэтому файлы являются файлами конфигурации или входными файлами. Они не являются ограничением того, что может сделать программа. Процесс суперпользователя может передать ядру любое значение, и kernel ​​не будет проверять какие-либо файлы.

Программа может позвонить

 setgid (54321); setuid (12345); 

и это будет работать, даже если ни один из идентификаторов не упомянут ни в одном файле.

Файл пароля и файл группы не читаются, они считываются только процессом входа в систему, чтобы установить реальный идентификатор пользователя и реальный идентификатор группы.

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

Любой процесс с возможностью CAP_SETUID может установить эти идентификаторы, root имеет эту возможность.

Модель безопасности в Unix является частью, реализованной в ядре, и частью, реализованной в процессе, который работает с расширенными возможностями (например, с правами root).


Обратите внимание, что /etc/passwd и /etc/group также читаются ls , ps и любой другой программой, которая должна преобразовывать имена пользователей / групп в / из идентификаторов пользователей / групп. (Они могут сделать это через библиотеку, чем знают об альтернативных методах хранения этих деталей.)

Помимо прочего, целью /etc/passwd является перевод имени пользователя в UID пользователя. Если вам все равно, что такое UID Боба, вам не нужен этот файл. Если вы просто хотите изменить произвольный UID / GID, используйте соответствующие системные вызовы:

 int setuid(uid_t uid); int setgid(gid_t gid); 

Обратите внимание, что привилегированный процесс с возможностями CAP_SETUID и CAP_SETGID (который обычно имеет корневой процесс) может изменять только свой собственный UID и GID, а не другой запущенный процесс.

Interesting Posts

TCP SYN, ACK Retransmissions

назначить комбинацию клавиш для запуска скрипта

Открыть резервные файлы Bacula

Найти команду: несколько условий

как это сделать: dd if = coolstuff.iso of = (ssh kev @ mypi)

Как выполнить синтаксический анализ / proc / cmdline перед запросом имени tty с помощью systemd

Существуют ли какие-либо инструменты cli для рисования графики на экране во время X-сессии?

systemd запускает службу только в том случае, если другая служба работает без ошибок

Существует ли стандартное местоположение для файлов конфигурации пользователя?

Как я могу быть уверен, что каталог или файл действительно удалены?

systemd в Raspbian для NZBGet

Инструмент самосвалов CPU MSR

Есть ли способ использовать завиток в интерактивном режиме? Или есть интерактивная оболочка curl / wget?

Как перенаправить трафик из субдомена в основной домен

Чтение файлов, принадлежащих другому пользователю, как не root

Linux и Unix - лучшая ОС в мире.