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

В статье рассматривается методика создания единой системы идентификации и аутентификации (I and A) в гетерогенной многоплатформенной среде. Система идентификации и аутентификации обеспечивает уровень абстракции между пользовательским приложением и необходимым данному приложению механизмом аутентификации.

Паллави Галгали, программист, IBM

Паллави Галгали (Pallavi Galgalli) работает программистом в лаборатории IBM India Software в Пуни (Индия). Паллави участвовала в разработке и поддержке проектов SAN File System, Advanced Distributed File System и Distributed Computing Environment. Она является соавтором учебника IBM TotalStorage Solutions Handbook. Закончила факультет вычислительной техники Института Компьютерных технологий в Пуни. Её интересы охватывают сетевое хранение, файловые системы и драйвера устройств. C ней можно связаться по адресу: pgalgali@in.ibm.com.



Рахул Гайтонде, программист, IBM

Рахул Гайтонде (Rahul Gaitonde) работает в команде разработки файловой системы SAN File System в лаборатории IBM India Software в Пуни (Индия). Он выпускник факультета вычислительной техники университета в Мумбаи. Рахул написал несколько статей для сайтов "Linux on the Desktop" и "Technology Strategy". Область его интересов - операционные системы, высокопроизводительные системы и Linux. C ним можно связаться по адресу: rahul.gaitonde@in.ibm.com. rahul.gaitonde@in.ibm.com.



15.07.2008

Вступление

Интерфейс прикладного программирования (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. Путь выполнения запросов идентификации

На рисунке изображён путь выполнения запросов при вызове функции библиотеки 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. Взаимодействие с приложением

В файле конфигурации 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.
  • Команда IBM developerWorks проводит по всему миру сотни бесплатных технических консультаций.(EN)
  • developerWorks eServer zone : в разделе developerWorks eServer zone размещена различная информация, которая поможет лучше изучить продукты eServer.(EN)

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


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