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

на главную

Жанры

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

Троан Эрик В.

Шрифт:

#include <security/pam_appl.h>

extern int pam_set_item(pam_handle_t * pamh, int item_type,

 const void * item);

extern int pam_get_item(const pam_handle_t * pamh, int item_type,

 const void ** item);

Аргумент

item_type
определяет идентичность и семантику элемента РАМ
item
. Мы рассмотрим только наиболее часто используемые значения
item_type
.

PAM_TTY
item
представляет указатель на строку, содержащую имя устройства TTY,
с которым связан запрос аутентификации. Это может быть
tty59
для первого последовательного порта в стандартной системе или
pts/0
для первого псевдотерминала, или
tty1
для первой виртуальной консоли.
PAM_USER
Функция
pam_start
автоматически присваивает это значение аргументу
user
, переданному функции
pam_start
. Важно отметить, что это имя может изменяться! Если вашему приложению нужно имя пользователя, то оно должно проверять значение посредством функции
pam_get_item
после попадания в стек РАМ и перед производством изменения имени в другом коде.
PAM_RUSER
Для сетевых протоколов (например, rsh и ssh) этот элемент должен применяться для передачи имени пользователя удаленной системы любым модулям РАМ, которые используют его. Благодаря этому администратор системы сможет определить, разрешена ли аутентификация типа
rhost
.
PAM_RHOST
Подобно
PAM_RUSER
,
PAM_RHOST
необходимо задавать для сетевых протоколов, в которых имя удаленного хоста может использоваться как компонент аутентификации, или при управлении учетной записью.

Все остальные функции принимают по два аргумента: непрозрачный объект

pamh
и целое число, которое может быть либо нулевым, либо флагом
РАМ_SILENT
. Флаг
PAM_SILENT
требует, чтобы каркас и модули РАМ не генерировали информационных сообщений, однако при этом будет производиться запрос на ввод пароля. В обычных приложениях флаг РАМ_
SILENT
не задается.

Функция

pam_authenticate
, показанная в строке 100 кода
pamexample.с
, выполняет все, что было сконфигурировано администратором системы в данном приложении (что определяется аргументом
service_name
функции
pam_start
) для аутентификации пользователя. Сюда может быть включено следующее: запрос на ввод одного или нескольких паролей; проверка, что пользователь с текущим именем пользователя (что определяется по элементу РАМ
РАМ_USER
, а не по текущему uid; модули РАМ не рассматривают uid, поскольку приложения, вызывающие РАМ, обычно явным образом не выполняются после аутентификации пользователя) является текущим пользователем консоли; проверка, что текущий пользователь (снова по имени пользователя) недавно прошел аутентификацию для эквивалентного уровня обслуживания; проверка элементов РАМ PAM_RUSER и PAM_RHOST в отношении локальных таблиц эквивалентных удаленных пользователей и хостов (например, то, что выполняет демон
rsh
), или что-либо подобное. (Обратите внимание, что в большинстве систем задействована система "теневых паролей", при котором с целью защиты пароля только процессы с полномочиями root могут проверять пароли произвольных пользователей; процесс, который не выполняется как root, может проверять только собственный пароль uid. Это единственное исключение из правила, когда модули РАМ принимают во внимание uid.)

Функция

pam_acct_mgmt
, показанная в строке 107, предполагает, что функция
pam_authenticate
уже была вызвана и продолжает свою работу, а затем проверяет (также по имени), разрешено ли пользователю осуществлять запрошенный доступ. Она может рассматривать элементы РАМ
PAM_USER
,
PAM_TTY
,
PAM_RUSER
и
PAM_RHOST
, определяя разрешение на доступ. Например, какому-то одному пользователю могут быть разрешены некоторые tty только в течение определенных часов, или каждому пользователю в некотором классе может быть разрешено только некоторое количество параллельных регистраций, или некоторым совокупностям удаленных пользователей и хостов могут быть даны разрешения только на несколько часов.

Функция

pam_setcred
, показанная в строке 118, предполагает, что аутентификация была пройдена, и затем устанавливает сертификаты для пользователя. Хотя uid, gid и дополнительные группы технически являются сертификатами, они не находятся под управлением функции
pam_setcred
, поскольку во многих приложениях это не будет соответствовать модели безопасности. Наоборот, она устанавливает дополнительные сертификаты. Вероятным кандидатом для использования в качестве сертификата является мандат Kerberos — файл, содержащий зашифрованные данные, которые предоставляют пользователю разрешение на доступ к некоторым ресурсам.

Функция

pam_open_session
, показанная в строке 113, открывает новый сеанс. Если в процессе есть ветвления, то функцию
pam_open_session
необходимо вызывать после ветвления, поскольку при этом могут происходить такие действия, как установка
rlimits
(см. стр. 120–121). Если ваш процесс запускается как root, а затем изменяется на uid аутентифицированного пользователя, функцию
pam_open_session
нужно вызывать перед сбросом привилегий root, поскольку модули сеанса могут попытаться выполнить системные операции (например, монтирование домашних каталогов), которые зарезервированы только для root.

Функция

pam_close_session
, показанная в строке 128, закрывает существующий сеанс. Ее можно вызывать из другого процесса, а не только из того, который вызвал функцию
pam_open_session
, при том условии, что РАМ будут доступны одни и те же данные — те же аргументы, заданные для РАМ, и те же элементы РАМ, которые используются для открытия сеанса. Обратите внимание, что поскольку элемент
PAM_USER
может быть изменен во время аутентификации и управления учетной записью, вы должны убедиться, что производится учет любых изменений, производимых с
PAM_USER
, если вы вызываете ее из отдельного процесса, установившего сеанс. Для работы функции
pam_close_session
могут потребоваться привилегии root.

1: /* pamexample.с */

2:

3: /* Программа pamexample демонстрирует вариант простой обработки РАМ.

4: * Вам нужно будет либо использовать параметр командной строки —service

5: * для выбора имени уже установленной службы (может работать "system-auth",

6: * проверьте наличие /etc/pam.d/system-auth в своей системе), либо

7: * установки системного файла */etc/pam.d/pamexample со следующими

8: * четырьмя строками (игнорируя ведущие символы "*") :

9: * #%РАМ-1.0

 10: * auth required /lib/security/pam_unix.so

 11: * account required /lib/security/pam_unix.so

 12: * session required /lib/security/pam_limits.so

 13: *

 14: * Обратите внимание, что если вы запустите эту программу не как root, то

 15: * можете столкнуться с ограничениями системы; при управлении учетными

 16: * записями может произойти сбой, вам может быть не разрешено проверять

 17: * другие пароли пользователей, в управлении сеансом может произойти

 18: * сбой - все будет зависеть от того, как сконфигурирована служба.

 19: */

 20:

 21: #include <security/pam_appl.h>

 22: #include <security/pam_misc.h>

 23: #include <popt.h>

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

Особое назначение

Тесленок Кирилл Геннадьевич
2. Гарем вне закона
Фантастика:
фэнтези
6.89
рейтинг книги
Особое назначение

Её (мой) ребенок

Рам Янка
Любовные романы:
современные любовные романы
6.91
рейтинг книги
Её (мой) ребенок

Я Гордый часть 2

Машуков Тимур
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 2

Адепт. Том второй. Каникулы

Бубела Олег Николаевич
7. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.05
рейтинг книги
Адепт. Том второй. Каникулы

Императорский отбор

Свободина Виктория
Фантастика:
фэнтези
8.56
рейтинг книги
Императорский отбор

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Начальник милиции. Книга 3

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

Огненный князь 3

Машуков Тимур
3. Багряный восход
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Огненный князь 3

Восход. Солнцев. Книга VI

Скабер Артемий
6. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга VI

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Мастер 7

Чащин Валерий
7. Мастер
Фантастика:
фэнтези
боевая фантастика
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Мастер 7

Волк 5: Лихие 90-е

Киров Никита
5. Волков
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волк 5: Лихие 90-е

Сломанная кукла

Рам Янка
5. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сломанная кукла

Идеальный мир для Лекаря 18

Сапфир Олег
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 18