Разработка приложений в среде Linux. Второе издание
Шрифт:
Всякий раз когда изменяется эффективный uid процесса, его fsuid устанавливается равным новому эффективному идентификатору пользователя, что делает fsuid прозрачным для большинства приложений. Те приложения, которые нуждаются в дополнительных возможностях, предоставляемых отличающимся значением fsuid, должны применять вызов
Значение fsuid может быть установлено равным текущим эффективному, сохраненному или действительному идентификаторам пользователя. В дополнение следует сказать, что
10.2.4. Резюме по идентификаторам пользователей и групп
Подведем итоги обо всех системных вызовах, которые модифицируют права доступа выполняющегося процесса. Большинство перечисленных здесь функций, имеющих отношение к идентификаторам пользователей, уже детально рассматривались
Все эти функции возвращают
int setreuid(uid_t ruid, uid_t euid); | Устанавливает действительный uid текущего процесса в ruid и эффективный uid процесса в euid . Если оба параметра равны – 1 , то uid остаются неизменными. |
int setregid(gid_t rgid, gid_t egid); | Устанавливает действительный gid текущего процесса в rgid и эффективный gid процесса в egid. Если оба параметра равны – 1 , то gid остаются неизменными. |
int setuid(uid t uid); | Если применяется обычным пользователем, то устанавливает эффективный uid текущего процесса в значение параметра uid . Если используется процессом с эффективным uid, равным 0, то устанавливает действительный, эффективный и сохраненный uid в значение параметра uid . |
int setgid(gid_t gid); | Если применяется обычным пользователем, то устанавливает эффективный gid текущего процесса в значение параметра gid . Если используется процессом с эффективным gid, равным 0, то устанавливает действительный, эффективный и сохраненный gid в значение параметра gid . |
int seteuid(uid_t uid); | Эквивалент setreuid(-1, uid) . |
int setegid(gid_t gid); | Эквивалент setregid(-1, gid) . |
int setfsuid(uid_t fsuid); | Устанавливает fsuid текущего процесса в значение параметра fsuid . Прототип находится в <sys/fsuid.h> . Возвращает предшествующий fsuid. |
int setfsgid(gid_t fsgid); | Устанавливает fsgid текущего процесса в значение параметра fsgid . Прототип находится в <sys/fsuid.h> . Возвращает предшествующий fsgid. |
int setgroups(size_t num, const gid_t * list); | Устанавливает дополнительные группы текущего процесса из списка, переданного в массиве list , который должен содержать num элементов. Макрос SC_NGROUPS_MAX указывает, сколько групп может быть в списке (от 32 до 65536, в зависимости от работающей у вас версии Linux). |
uid_t getuid; | Возвращает действительный uid процесса. |
uid_t geteuid; | Возвращает эффективный uid процесса. |
gid_t getgid; | Возвращает действительный gid процесса. |
gid_t getegid; | Возвращает эффективный gid процесса. |
size_t getgroups (size_t size, gid_t list[]); | Возвращает текущий набор дополнительных групп процесса в массиве list . Параметр size сообщает, сколько элементов типа gid_t может содержать list . Если размер list недостаточен, чтобы вместить все группы, возвращается – 1 , а errno устанавливается в EINVAL . В противном случае возвращается фактическое количество групп в list . Если size
0 , возвращается количество групп, но list не затрагивается. Прототип функции getgroups находится в <grp.h> . |
10.3. Информация о процессе
Ядро предоставляет значительное количество информации о каждом процессе и часть ее передается новым программам во время их загрузки. Вся эта информация образует среду выполнения для процесса.
10.3.1. Аргументы программы
Есть два типа значений, передаваемых новым программам при их запуске: аргументы командной строки и переменные окружения. Для их использования установлено множество соглашений, но система сама по себе не придерживается их автоматически. Однако хорошим тоном считается придерживаться этих соглашений, чтобы помочь вашим программам попасть в мир Unix.
Аргументы командной строки — это набор строк, передаваемый программе. Обычно они представляют собой текст, набранный вслед за именем команды в оболочке, с необязательными аргументами, начинающимися с символа "минус"
Переменные окружения — это набор пар "имя-значение". Каждая пара представляет отдельную строку в форме
И аргументы, и окружение становятся доступными программе при запуске. Аргументы командной строки передаются в виде параметров главной функции программы —
Ниже представлен полный прототип функции
18
Большинство систем передают окружение в виде параметра
Возможно, вас удивит, что
Первый параметр,
Чтобы получить прямой доступ к окружению, используйте следующую глобальную переменную:
Это представляет
Наиболее общий способ проверки элементов окружения — это вызов
Единственный параметр
Linux предоставляет два способа добавления строк в программное окружение: