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

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

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

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

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

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

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

Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы

#include <sys/types.h>

#include <unistd.h>

#include <stdio.h>

int main() {

 uid_t uid = geteuid();

 gid_t gid = getegid();

 printf("uid=%d gid=%d ", (int) uid, (int)gid);

 return 0;

}

Если программу запустит тот же пользователь, который ранее запустил команду id, результат будет таким:

% ./simpleid

uid=501 gid=501

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

6.3. Имена пользователей и групп

Из книги автора

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


Глава 11 Права доступа и ID пользователей и групп

Из книги автора

Глава 11 Права доступа и ID пользователей и групп Linux, вслед за Unix, является многопользовательской системой. В отличие от большинства операционных систем для персональных компьютеров,[114] в которых имеется лишь один пользователь и в которых, кто бы ни находился перед


11.6.1. Изменение набора групп

Из книги автора

11.6.1. Изменение набора групп Функция setgroups() устанавливает новый набор групп:#include <sys/types.h> /* Common */#include <unistd.h>#include <grp.h>int setgroups(size_t size, const gid_t *list);Параметр size указывает, сколько элементов в массиве list. Возвращаемое значение равно 0, если все было нормально, и -1 с


10.2.4. Резюме по идентификаторам пользователей и групп

Из книги автора

10.2.4. Резюме по идентификаторам пользователей и групп Подведем итоги обо всех системных вызовах, которые модифицируют права доступа выполняющегося процесса. Большинство перечисленных здесь функций, имеющих отношение к идентификаторам пользователей, уже детально


27.7. «Закрепленные» параметры IPv6

Из книги автора

27.7. «Закрепленные» параметры IPv6 Мы рассмотрели использование вспомогательных данных с функциями sendmsg и recvmsg для отправки и получения следующих семи различных типов объектов вспомогательных данных:1. Информация о пакете IPv6: структура in6_pktinfo, содержащая адрес получателя и


4.2.3. Удаление групп

Из книги автора

4.2.3. Удаление групп Теперь рассмотрим, как можно удалить группу. Для этого используется команда groupdel:groupdel имяПри выполнении этой команды вы должны самостоятельно проверить все файлы, владельцем которых является удаляемая группа, и при необходимости изменить


Получение материалов групп

Из книги автора

Получение материалов групп Если вы устанавливаете на своем компьютере сервер новостей, который должен поддерживать хотя бы часть Usenet, вам необходимо найти поставщика новостей и сконфигурировать свой сервер для работы с ним. Настройка сервера для получения материалов


7.3.2. Создание и удаление пользователей и групп

Из книги автора

7.3.2. Создание и удаление пользователей и групп Большинство утилит административного назначения хранится в каталогах /sbin и /usr/sbin. Полный набор утилит для управления пользователями и группами, установленных в вашей системе, вы можете увидеть по команде# ls


Создание групп запросов

Из книги автора

Создание групп запросов После чистки мы получим очень длинный список, состоящий из важных для нашего портала либо интернет-магазина запросов, однако работать с этим списком будет крайне сложно, поскольку он неструктурирован. Следующая задача – выстроить структуру,


Доступность целевых групп

Из книги автора

Доступность целевых групп Исследуя аудиторию Интернета, мы обнаруживаем, что его пользователи начинают постепенно отказываться от других источников получения информации. Активные пользователи Интернета не читают газет, не смотрят телевизор, не слушают радио. Все, что


Закрепленные и свободно перемещаемые окна

Из книги автора

Закрепленные и свободно перемещаемые окна Подобно панелям инструментов, большинство окон редактора Visual Basic бывают закрепленными, т.е. вы можете привязать их к любой из четырех сторон рабочей области главного окна, где их не перекрывают другие окна. Ясно, что закрепление


Обзор групп фильтров

Из книги автора

Обзор групп фильтров В Photoshop просто огромное количество фильтров, исчисляемое десятками. Поэтому нет ничего удивительного в том, что разработчики разделили их на категории. Благодаря этому найти нужный фильтр не составляет труда. Если же вы не знаете, какой фильтр вам


Идентификаторы

Из книги автора

Идентификаторы Идентификаторы именуют переменные и функции. С каждым идентификатором ассоциируется тип, который задается при его объявлении. Значение объекта, именуемого идентификатором, зависит от типа следующим образом:1) Идентификаторы переменных целого и


Закрепленные объявления

Из книги автора

Закрепленные объявления Правило повторного объявления типов способно свести на нет целый ряд преимуществ наследования. Почему это происходит и каково решение данной


Когда не используются закрепленные объявления

Из книги автора

Когда не используются закрепленные объявления Не всякое объявление вида x: A в классе A следует менять на x: like Current и не в каждой паре компонентов одного типа следует один из них делать опорным, а другой - закрепленным.Закрепленное объявление - это своего рода обязательство