Чтение онлайн

на главную

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

24: * мы показываем пример проверки кода, возвращаемого функцией dlerror.

25: */

26: dlerror;

27: hello = dlsym(library, "print_hello");

28: error = dlerror;

29: if (error) {

30: fprintf(stderr, "He удается найти print_hello: %s\n", error);

31: exit(1);

32: }

33:

34: (*hello);

35: dlclose(library);

36: return 0;

37: }

Глава 28

Идентификация

и аутентификация пользователей

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

28.1. Преобразование идентификатора в имя

В результате выполнения команды

ls -l
для вывода списка содержимого текущего каталога в третьей и четвертой колонках указываются идентификаторы (ID) пользователя и группы, к которой принадлежит каждый файл. Этот список выглядит примерно следующим образом.

drwxrwxr-x 5 christid christid 1024 Aug 15 02:30 christid

drwxr-xr-x 73 johnsonm root 4096 Jan 18 12:48 johnsonm

drwxr-xr-x 25 kim root 2048 Jan 12 21:13 kim

drwxrwsr-x 2 tytso tytso 1024 Jan 30 1996 tytso

Однако нигде в ядре не хранится строка

christid
. Программа
ls
осуществляет преобразование номеров, предоставленных ядром, в имена. Она получает номера из системного вызова
stat
и производит поиск имен в двух системных базах данных. Обычно эти базы данных хранятся в файлах
/etc/passwd
и
/etc/group
, хотя в некоторых системах информация может располагаться где-нибудь в сети или в каком-то другом нестандартном месте. Программистам не нужно беспокоиться о том, где хранится эта информация; библиотека С предлагает обобщённые функции, которые считывают конфигурационные файлы для определения места хранения этой информации, производят выборку информации и возвращают ее незаметно для вас.

Чтобы продемонстрировать, что программа

ls
получает из ядра, выполним команду
ls -ln
.

drwxrwxr-x 5 500 500 1024 Aug 15 02:30 christid

drwxr-xr-x 73 100 0 4096 Jan 18 12:48 johnsonm

drwxr-xr-x 25 101 0 2048 Jan 12 21:13 kim

drwxrwsr-x 2 1008 1008 1024 Jan 30 1996 tytso

Структура, представляющая элементы в

/etc/passwd
(или эквивалентной базы данных системы), определена в
<pwd.h>
.

struct passwd {

char * pw_name; /* Имя пользователя */

 char * pw_passwd; /* Пароль */

 __uid_t pw_uid; /* Идентификатор пользователя */

 __gid_t pw_gid; /* Идентификатор группы */

 char * pw_gecos; /* Настоящее имя */

 char * pw_dir; /* Домашний каталог */

 char * pw_shell; /* Программа shell */

};

• 

pw_name
представляет уникальное имя пользователя.

• 

pw_passwd
может представлять зашифрованный пароль или нечто подобное, связанное с процедурой аутентификации. Зависит от системы.

• 

pw_uid
представляет номер (обычно уникальный), который используется в ядре для идентификации пользователя.

• 

pw_gid
представляет главную группу, которую ядро связывает с пользователем.

• 

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

• 

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

• 

pw_shell
представляет имя командной оболочки, которая запускается в случае успешной регистрации пользователя. Сюда обычно относятся
/bin/bash
,
/bin/tcsh
,
bin/zsh
и так далее. Однако элементы, используемые для других целей, могут иметь другие оболочки,
/bin/false
применяется для элементов
passwd
, которые не используются для регистрации пользователей. Специализированные оболочки часто служат для целей, рассмотрение которых выходит за рамки настоящей книги.

Структура, которая представляет элементы в

/etc/group
(или в эквивалентных базах данных), определена в
<grp.h>
.

struct group {

 char * gr_name; /* Имя группы */

 char * gr_passwd; /* Пароль */

 __gid_t gr_gid; /* Идентификатор группы */

 char ** gr_mem; /* Список членов */

};

• 

gr_name
представляет уникальное имя группы.

• 

gr_passwd
представляет пароль (обычно неиспользуемый). К нему применимы те же требования, что и к
pw_passwd
, только в еще большей степени.

• 

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

• 

gr_mem
представляет список членов группы, разделенных запятыми. Это список имен пользователей, которые присваиваются этой группе на вторичной основе (см. главу 10).

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

getpwuid
и
getgrgid
, которые принимают целочисленный идентификатор и возвращают указатель на структуру, содержащую информацию из соответствующей системной базы данных. Точно так же имеются две функции, которые производят поиск имен,
getpwnam
и
getgrnam
, и они возвращают те же две структуры.

Поделиться:
Популярные книги

Воевода

Ланцов Михаил Алексеевич
5. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Воевода

Девятый

Каменистый Артем
1. Девятый
Фантастика:
боевая фантастика
попаданцы
9.15
рейтинг книги
Девятый

Совершенный: пробуждение

Vector
1. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Совершенный: пробуждение

Кодекс Крови. Книга Х

Борзых М.
10. РОС: Кодекс Крови
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга Х

Дайте поспать! Том IV

Матисов Павел
4. Вечный Сон
Фантастика:
городское фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать! Том IV

Ротмистр Гордеев

Дашко Дмитрий Николаевич
1. Ротмистр Гордеев
Фантастика:
фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Тройняшки не по плану. Идеальный генофонд

Лесневская Вероника
Роковые подмены
Любовные романы:
современные любовные романы
6.80
рейтинг книги
Тройняшки не по плану. Идеальный генофонд

Специалист

Кораблев Родион
17. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Специалист

Не грози Дубровскому! Том IX

Панарин Антон
9. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том IX

Неудержимый. Книга III

Боярский Андрей
3. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга III

Изгой. Пенталогия

Михайлов Дем Алексеевич
Изгой
Фантастика:
фэнтези
9.01
рейтинг книги
Изгой. Пенталогия

Жена по ошибке

Ардова Алиса
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Жена по ошибке

Пистоль и шпага

Дроздов Анатолий Федорович
2. Штуцер и тесак
Фантастика:
альтернативная история
8.28
рейтинг книги
Пистоль и шпага