Содержание


Сравнение систем безопасности в AIX, Linux и Solaris

Comments

Вступление

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

AIX®, Linux® и Solaris применяют различные системы идентификации и аутентификации, поэтому для реализации данной задачи в многоплатформенной гетерогенной среде необходимо выработать единую стратегию идентификации и аутентификации. Данная статья адресована IT-персоналу, занимающемуся разработкой и реализацией I and A в гетерогенной среде окружения.

Начнем с описания системы I and A , затем расскажем о реализациях ее на трех платформах: LAM (loadable authentication modules), PAM (pluggable authentication modules) и NSS (name service switch). После общего описания будут представлены конкретные советы для реализации единой I and A.

Обзор идентификации и аутентификации

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

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

  1. клиент telnet открывает TCP-соединение к telnet-серверу;
  2. пользователь вводит свое имя пользователя, идентифицируя себя для системы (идентификация);
  3. пользователю предлагается ввести пароль (начало аутентификации);
  4. проверка пароля гарантирует подлинность пользователя, завершая аутентификацию.

Системы, которые предоставляют идентификацию и аутентификацию, называются I and A. Такие системы позволяют использовать новые методы идентификации и аутентификации.

I and A предоставляет уровень абстракции между пользовательским приложением и реализацией любой функции аутентификации и идентификации. Для идентификации и аутентификации пользовательское приложение должно использовать только стандартные функции библиотеки C. Администратором системы определяются доступные для этих целей механизмы, предоставляемые работающими на уровне пользователя модулями.

Например, системный администратор может задать требование аутентификации для пользователя A на машине M простой парой имя пользователя/пароль, используя для проверки подлинности локальный файл паролей, в то время как другой пользователь B на машине M может аутентифицироваться с помощью методов биометрического контроля. Во всех этих случаях будет использована одна и та же программа аутентификации с использованием одних и тех же функций библиотеки безопасности. Однако в каждом из этих случаев будут использованы различные модули реализации аутентификации, каждый модуль будет решать эту задачу своим методом.

Сравнение механизмов аутентификации и идентификации в AIX, Linux и Solaris

Существуют некоторые отличия между тем как различные UNIX-платформы реализуют идентификацию и аутентификацию. В таблице 1 можно увидеть отличия, имеющиеся у данных функций в AIX, Linux, Solaris. Ниже приведены названия подсистем, реализующих идентификацию и аутентификацию.

Таблица 1. Названия подсистем
ПлатформаИдентификация Аутентификация
AIX LAMLAM / PAM
SolarisNSSPAM
LinuxNSSPAM

Служба NSS

Даже после того как пользователь был успешно аутентифицирован, многим приложениям по-прежнему необходима информация, которую он использовал при аутентификации. Данная информация обычно содержится в текстовых файлах (/etc/passwd, /etc/shadow, /etc/group), но может быть предоставлена и другими способами, для реализации которых в UNIX-системах имеются обычные API для предоставления этой информации и написаны ряд модулей, выполняющих эту задачу в зависимости от выбранной технологии. Такая служба называется NSS, она использует обычный API и файл конфигурации(/etc/nsswitch.conf), в котором заданы имена всех провайдеров службы имён для каждой поддерживаемой базы данных. Для получения дополнительной информации смотрите раздел "Системные базы данных и переключение службы имён" в описании библиотеки GNU C.

Рисунок 1. Путь выполнения запросов идентификации
Рисунок 1. Путь выполнения запросов идентификации
Рисунок 1. Путь выполнения запросов идентификации

На рисунке изображён путь выполнения запросов при вызове функции библиотеки C, относящейся к идентификации. Сначала библиотечный вызов перенаправляется в NSS- библиотеку, которая, собственно, реализует эти функции и экспортирует данный API. Библиотека NSS сверяется с настройками в /etc/nsswitch.conf и затем подгружает соответствующие, необходимые для запроса модули.

Файл настроек nsswitch.conf приведён в листинге 1. Первый столбец задаёт имя базы данных, все последующие ключевые слова определяют, каким образом должны обрабатываться запросы.

Листинг 1. Конфигурационный файл NSS
# /etc/nsswitch.conf

#

# Name Service Switch configuration file.

#



passwd:     db files nis

shadow:     files

group:      db files nis



hosts:      files nisplus nis dns

networks:   nisplus [NOTFOUND=return] files



ethers:     nisplus [NOTFOUND=return] db files

protocols:  nisplus [NOTFOUND=return] db files

rpc:        nisplus [NOTFOUND=return] db files

services:   nisplus [NOTFOUND=return] db files

Инфрастуктура PAM

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

PAM состоит из библиотеки с интерфейсом и множества модулей аутентификации. На уровне библиотеки реализуется API, в модулях аутентификации реализуется конкретный алгоритм аутентификации пользователя.

На рисунке 2 показано взаимодействие между приложением, библиотекой и модулями. Приложение (ftp, telnet, login) использует библиотеку для доступа к подходящему модулю. Файл конфигурации pam.conf определяет, какой из модулей должен быть использован для каждого приложения. Ответы модулей перенаправляются в приложение.

Рисунок 2. Взаимодействие с приложением
Рисунок 2. Взаимодействие с приложением
Рисунок 2. Взаимодействие с приложением

В файле конфигурации PAM /etc/pam.conf можно задать, какой именно механизм аутентификации должен быть использован для каждого системного приложения. Файл имеет следующий синтаксис:

Service_name module_type control_flag module_path module_option

То есть:

имя_сервиса тип_модуля флаги_управления путь_к_модулю опции_модуля.

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

login auth required /usr/lib/security/pam_unix debug

Инфраструктура LAM

Интерфейс LAM является стандартной системой идентификации и аутентификации в AIX. Каждый модуль системы LAM определяет подфункции интерфейса. По требуемому функционалу определяется, какая именно из набора подфункций должна быть вызвана.

LAM-модуль представляет собой динамически подгружаемую библиотеку, которая настраивается при загрузке функцией инициализации. Данная функция инициализации модуля - точка входа в библиотеку, она определяется в момент компиляции. В дальнейшем LAM-модуль взаимодействует с системой безопасности AIX через интерфейс secmethod_table, который представляет собой набор указателей на функции. Каждая функция интерфейса решает чётко определённую задачу. Функция инициализации получает указатель на структуру secmethod_table и задаёт его указатели на соответствующие реализации данных функций. Таким образом, системная библиотека безопасности использует заданные функции вместо обычных функций, работающих с локальными файловыми базами пользователей.

Рассмотрим простой пример аутентификации и идентификации с использованием LAM-модулей.

  1. Приложение вызывает функцию аутентификации в системной библиотеке безопасности AIX.
  2. Считывается файл /etc/security/user. Данный файл является набором директив, каждая директива состоит из одной или нескольких пар имя/значение. LAM задаёт политику безопасности, базируясь на информации о пользователе. Каждая директива в /etc/security/user соответствует одному пользователю, для которого заданы данные политики (существует директива для политики по умолчанию!) Значение переменной SYSTEM определяет механизм аутентификации для заданного пользователя. Это ключевое слово - индекс в файле /usr/lib/security/methods.cfg Например, доступ для пользователя "rahul" настраивается следующим образом:
    * /etc/security/user:
    
    * stanza for user "rahul"
    
    rahul:
    
           .
    
           .
    
           .
    
           SYSTEM="MY_AUTH"
    
           .
    
           .
    
           .
  3. После того как прочитана переменная SYSTEM, читается файл /usr/lib/security/methods.cfg. Cинтаксис этого файла похож на синтаксис /etc/security/user - это набор директив, каждая директива - это пара имя/значение. Определяется директива, которая соответствует ключевому слову в /etc/security/user. Главной частью директивы является имя и путь к подгружаемому LAM-модулю. Так, запись в methods.cfg, соответствующая ключевому слову "MY_AUTH" в вышеприведённом листинге, могла бы быть:
    * /usr/lib/security/methods.cfg
    
    *stanza for "MY_AUTH"
    
    MY_AUTH:
    
    program = /usr/lib/security/LAM_MY_AUTH
    
           .
    
           .
    
           .

    /usr/lib/security/LAM_MY_AUTH в данном примере - это модуль, который и реализует аутентификацию или идентификацию, которая была бы выполнена без этого модуля при помощи стандартных файлов типа /etc/passwd. Данный модуль будет загружен, затем будет выполнена соответствующая функция.

    Возвращаемое модулем значение передаётся приложению через код возврата функции системной библиотеки безопасности.

Проблемы при реализации систем I and A в старых версиях ОС AIX.

Данный раздел предназначен для администраторов, которым необходимо интегрировать старые AIX-системы (версия ниже 5.2) в обычную I and A.

AIX 5.2 и выше поддерживают PAM в стандартной версии; в них можно реализовать полноценное PAM-решение. Однако до версии 5.2 приложения в системе не поддерживали PAM, поэтому AIX использовала довольно сложный механизм для достижения аутентификации с использованием PAM. Ниже описан данный механизм с обзором работы механизма LAM.

В системе AIX имеются подгружаемые модули аутентификации для обеспечения поддержки PAM "родными" приложениями AIX. Приложения AIX вызывают функции, предоставляемые PAM, через существующую систему LAM.

Отметим, что это "PAM через LAM" - это не полноценный PAM; вот почему не рекомендуется использовать данный метод для обеспечения аутентификации для родных приложений AIX.

Это типичное использование LAM, однако в данном случае необходимо использовать PAM-модуль, для чего потребуется LAM-модуль (PAM), поэтому внесем изменение в файл /usr/lib/security/methods.cfg (см. раздел Инфраструктура LAM), изменив строку

program = /usr/lib/security/LAM_MY_AUTH

на строки:

program = /usr/lib/security/PAM

options = authonly

Данный LAM-модуль (PAM) перенаправляет вызовы от служб безопасности AIX в библиотеку PAM (libpam.a). Другими словами, оно переопределяет библиотечные функции на функции в PAM API. Таким образом, начиная с этого момента, это полноценное окружение PAM для пользовательского приложения. Библиотека libpam.a считывает /etc/pam.conf для определения PAM-модуля для загрузки и использования, основываясь на службе, которая осуществила первоначальный вызов. Как правило, в случае "PAM через LAM" все функции аутентификации, вне зависимости от службы, обрабатываются каким-либо PAM-модулем.

В таблице 2 показана часть привязки к PAM через LAM.

Таблица 2. Привязка к PAM через LAM
AIXPAM API
authenticatepam_authenticate
chpasspam_chauthtok
passwdexpiredpam_acct_mgmt
passwdrestrictionsПривязки не существует, всегда возвращается код успешного выполнения.

Как видно, не все функции библиотеки системной безопасности AIX имеют свои эквиваленты в PAM API. В таких случаях должны быть написаны и использоваться функции-заглушки, которые должны быть в PAM-модуле. В вышеприведённом примере такими заглушками являются функции, просто возвращающие код успешного завершения операции.

Предупреждаем, что в системах с PAM, где приложения напрямую взаимодействуют с PAM-модулями, PAM-модуль может выдавать предложение пользователю ввести различные данные, такие как имя пользователя и т.д. В данном случае будет невозможно организовывать взаимодействие с пользователем на уровне модуля PAM, так как все данные, выведенные службой сетевой безопасности AIX, перенаправляются в PAM-модуль с использованием pam_set_item метода, а не напрямую. Аналогично PAM-модули должны запрашивать все данные, используя функцию pam_get_item, и никогда напрямую: всё взаимодействие с пользователем обрабатывается библиотекой безопасности AIX.

Рекомендации по реализации I and A

Если необходимо написать собственную I and A, которая работала бы на AIX, Solaris и Linux, то придется написать следующие модули:

  • модуль NSS. Данный модуль будет выполнять идентификацию в Solaris и Linux;
  • модуль PAM. Данный модуль будет выполнять идентификацию в Solaris, Linux и AIX;
  • модуль LAM. Данный модуль будет выполнять идентификацию в AIX.

Написание собственных PAM-модулей хорошо документировано, можно найти ссылки на примеры реализации PAM-модулей вместе с другой документацией по написанию PAM в разделе Ресурсы).

Ниже приводится написание модулей NSS и LAM, которые предоставляют одинаковую функциональность идентификации, для того чтобы было можно создать единое решение по аутентификации на всех трёх платформах. Фактическая реализация функций будет очень похожа на всех платформах (см. таблицу 3) вне зависимости от используемого модуля, LAM это или PAM-модуль.

Рассмотрим простую систему идентификации на базе паролей и групп.

Идентификация с помощью NSS

Рассмотрим, каким образом модуль NSS "mynss" выполняет идентификацию. В таблице 3 представлены записи, ориентированные на использование паролей, с использованием имени группы вместо логина пользователя. Таким образом, файл, который будет реализовывать идентификацию для парольных записей, будет иметь следующие функции (см. таблицу 3).

Модуль NSS
_nss_mynss_getpwnamФункция возвращает структуру пароля на основе заданного имени пользователя.
_nss_mynss_getpwuidФункция возвращает структуру пароля на основе заданного id пользователя.
_nss_mynss_setpwentВызов этой функции должен установить указатель на пароли в первую запись базы данных паролей. Данная функция должна быть вызвана до первого вызова функции getpwent (см ниже).
_nss_mynss_getpwentПервый вызов этой функции возвращает структуру пароля по указателю, установленному предыдущей функцией. Также происходит увеличение этого указателя, так что последующие вызовы будут возвращать следующие записи из базы данных паролей.
nss_mynss_endpwentФункция заканчивает операции, начатые двумя вышеописанными функциями.

В листинге 2 приведена типичная функция getpwnam().

Листинг 2. Функция getpwnam()
nss_status_t _nss_mynss_getpwnam( void* mynssinfo, void *data)

{

        nss_XbyY_args_t *lookup_data = (nss_XbyY_args_t *)data;

        int string_length;

 
        printf ( "_nss_mynss_getpwnam: called for username %s\n", 
					lookup_data->key.name);  

/* Эта реализация ищет записи в структуре  passwd, 
 * используя username в качестве входного параметра.
 * Структура  passwd заполняется указателем на данные и возвращается.
 */
       
        return SUCCESS;

}

Идентификация при помощи LAM

Рассмотрим типичный LAM-модуль с именем mylam, занимающийся идентификацией. В таблице 4 приведен набор функций, которые должны быть реализованы в этом модуле.

Таблица 4. Типичный LAM-модуль
mylam_getpwnamФункция возвращает структуру пароля для заданного имени пользователя.
mylam_getpwuidФункция возвращает структуру пароля для заданного id пользователя.
mylam_getgrnamФункция возвращает структуру с информацией о группе для заданного имени группы.
mylam_getgrgidФункция возвращает структуру с информацией о группе для заданного id группы.
mylam_getgrsetФункция возвращает информацию о группах, в которые входит пользователь, для данного имени пользователя.

В листинге 3 приведена типичная функция mylam_getpwnam:

Listing 3. mylam_getpwnam function
struct passwd* adfs_getpwnam (const char *username) {

     /*

     * Поместить информацию о пароле в структуру passwd

     * и вернуть указатель на нее в случае успеха,

     * в противном случае вернуть NULL.

     */

}

Ресурсы для скачивания


Похожие темы

  • A comparison of security subsystems on AIX, Linux, and Solaris (EN): оригинал статьи.
  • Loadable Authentication Module Programming Interface (EN): документ о концепциях программирования расширений ядра, поддержке устройств и интерфейсе подгружаемых модулей аутентификации описывает способы расширения модулей идентификации и аутентификации.
  • Pluggable Authentication Modules (EN): руководство по безопасности AIX 5L, раздел "Подгружаемые модули аутентификации" описывает модули PAM и подключение нескольких механизмов аутентификации в систему.
  • user file (EN): Web-cтраница "файл пользователя" раздела "описание файлов" руководства AIX представляет описание записей атрибутов для пользователей.
  • /usr/lib/security/methods.cfg file (EN): Web-cтраница "файл /usr/lib/security/methods.cfg" раздела "описание файлов" руководства AIX содержит информацию о конфигурации LAM.
  • System Databases and Name Service Switch (EN): описание "системные базы данных и служба переключения имён" в документации библиотеки GNU C описывает настройку корректной работы различных функций библиотеки C.
  • Linux-PAM: сайт Linux-PAM это главный сайт проекта Linux-PAM.(EN)
  • В разделе AIX и UNIX сайта developerWorks размещена различная информация по всем аспектам системного администрирования AIX, которая поможет лучше изучить UNIX.
  • Ознакомьтесь с инструментами для разработки ПО и связующим ПО от DB2®, Lotus®, Rational®, Tivoli® и WebSphere®. Можно бесплатно загрузить ознакомительные версии продуктов или Linux или Windows® версию Software Evaluation Kit от developerWorks.(EN)
  • developerWorks eServer zone : в разделе developerWorks eServer zone размещена различная информация, которая поможет лучше изучить продукты eServer.(EN)

Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=320628
ArticleTitle=Сравнение систем безопасности в AIX, Linux и Solaris
publish-date=07152008