Страница 73 из 324
Поскольку UID — это ключевой параметр для идентификации пользователя, начнем с него.
У UID есть свои тип uid_t, определенный в файле sys/types.h. Обычно это короткое целое (small integer). Одни идентификаторы пользователя заранее определены системой, другие создаются системным администратором, когда новые пользователи становятся известны системе. Как правило, идентификаторы пользователей имеют значения, большие 100.
<b>#include <sys/types.h></b>
<b>#include <unistd.h></b>
<b>uid_t getuid (void);</b>
<b>char *getlogin(void);</b>
Функция getuid возвращает UID, с которым связана программа. Обычно это UID пользователя, запустившего программу.
Функция getlogin возвращает регистрационное имя, ассоциированное с текущим пользователем.
Системный файл /etc/passwd содержит базу данных, имеющую дело с учетными записями пользователей. Он состоит из строк по одной на каждого пользователя, в каждую строку включены имя пользователя, зашифрованный пароль, идентификатор пользователя (UID), идентификатор группы (GID), полное имя, исходный каталог и командная оболочка, запускаемая по умолчанию. Далее приведен пример такой строки:
neil:zBqxfqedfpk:500:100:Neil Matthew:/home/neil:/bin/bash
Если вы пишете программу, которая определяет UID пользователя, запустившего ее, то можете расширить ее возможности и заглянуть в файл passwd для выяснения регистрационного имени пользователя и его полного имени. Мы не рекомендуем делать это, потому что современные UNIX-подобные системы уходят от применения файлов учетных записей пользователей для повышения безопасности системы. Многие системы, включая Linux, имеют возможность использовать файлы теневых паролей (shadow password), совсем не содержащие пригодной информации о зашифрованных паролях (она часто хранится в файле /etc/shadow, которые обычные пользователи не могут читать). По этой причине определен ряд функций для предоставления эффективного программного интерфейса, позволяющего получать эту пользовательскую информацию.
<b>#include <sys/types.h></b>
<b>#include <pwd.h></b>
<b>struct passwd *getpwuid(uid_t uid);</b>
<b>struct passwd *getpwnam(const char *name);</b>
Структура базы данных учетных записей пользователей passwd определена в файле pwd.h и включает элементы, перечисленные в табл. 4.4.
Таблица 4.4