Книга: Программирование для Linux. Профессиональный подход

10.2. Идентификаторы пользователей и групп, закрепленные за процессами

10.2. Идентификаторы пользователей и групп, закрепленные за процессами

До сих пор речь шла о командах, выполняемых конкретными пользователями. Это не совсем точно, поскольку компьютер в действительности никогда не знает, кто из пользователей за ним работает. Если пользователь Ева узнает имя и пароль пользователя Элис, она сможет войти в систему под ее именем, и компьютер позволит Еве выполнять те действия, которые разрешены для Элис. Системе известен лишь идентификатор пользователя, а не то, какой именно пользователь вводит команды. Таким образом, ответственность за безопасность системы распределяется между разработчиками приложений, пользователями и системными администраторами.

С каждым процессом связаны идентификаторы пользователя и группы. Когда пользователь вызывает программу, запускается процесс, идентификаторы которого совпадают с идентификаторами этого пользователя. Когда мы говорим, что пользователь выполняет операцию, то на самом деле имеется в виду, что операцию выполняет процесс с идентификатором соответствующего пользователя. Когда процесс делает системный вызов, ядро проверяет идентификаторы процесса и определяет, имеет ли процесс право доступа к запрашиваемым ресурсам.

Теперь становится понятным смысл поля gid в выводе команды id. В нем показан идентификатор группы текущего процесса. Пользователь 501 может входить в несколько групп, но текущему процессу соответствует только один идентификатор группы. В рассматривавшемся примере это 501.

В программах значения идентификаторов пользователей и групп имеют типы uid_t и gid_t. Оба типа определены в файле <sys/types.h>. Несмотря на то что эти идентификаторы являются, по сути, всего лишь целыми числами, избегайте делать какие-либо предположения о том, сколько битов они занимают, и выполнять над ними арифметические операции

Узнать идентификаторы пользователя и группы текущего процесса позволяют функции geteuid() и getegid(), объявленные в файле <unistd.h>. Они не принимают никаких аргументов и всегда работают, так что проверять ошибки не обязательно. В листинге 10.1 показана программа, которая частично дублирует работу команды id.

Оглавление книги


Генерация: 1.376. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз