Централизация аутентификации клиентов UNIX в смешанной среде

Пользователи гетерогенных сетей на базе Windows и UNIX часто имеют несколько учетных записей UNIX для доступа к системам UNIX и доменную учетную запись в Active Directory (AD) — для доступа к ресурсам Windows. Такая организация доступа давно уже вызывает нарекания со стороны администраторов и специалистов в области безопасности: дело в том, что, если пользователи имеют целый ряд учетных записей или применяют их не слишком часто, пароли забываются. В результате сотрудники, которым приходится запоминать большое количество паролей, часто записывают их на листках бумаги и оставляют эти записи на рабочем месте. Чтобы обеспечить защиту данных в таких сетях, некоторые администраторы используют имеющуюся в системе UNIX службу Network Information Service (NIS). Она позволяет создавать центральную базу данных пользовательских учетных записей для нескольких систем UNIX, так что для регистрации в различных системах UNIX пользователь может задействовать одну и ту же учетную запись. Однако с течением времени значение такого фактора, как безопасность, постоянно возрастает, и многие организации стремятся повысить уровень защиты своих информационных систем за счет проведения усиленной парольной политики на обеих платформах — и Windows и UNIX.

Сильная парольная политика в сетях с AD должна не только предусматривать определенный уровень сложности паролей и ограничения на повторное их использование, но и регулировать сроки действия паролей и обеспечивать их блокировку. Требования AD относительно уровня сложности паролей состоят в том, что в каждом пароле обязательно должны присутствовать символы трех из имеющихся четырех типов знаков: строчные буквы, прописные буквы, цифры и специальные символы, причем пароль должен состоять как минимум из шести знаков. В соответствии с заложенными в службе AD требованиями к истории паролей, пользователи могут вновь задействовать старый пароль лишь после смены определенного, указанного администратором числа паролей (скажем, после смены 10 паролей). К сожалению, ни одна из версий UNIX и Linux (это же, кстати, относится и к службе NIS) не имеет собственных средств для поддержки предусмотренного службой AD уровня сложности паролей и порядка возврата к старым паролям. Хотя в то же время они обеспечивают уровень сложности паролей на другом уровне: в каждом пароле должны присутствовать по меньшей мере две строчные или прописные буквы и не менее одной цифры или символа. Кроме того, они предъявляют ряд требований к составлению новых паролей взамен старых: в новом пароле должно быть хотя бы три знака, которых не было в старом пароле. Многие предлагаемые независимыми поставщиками средства аутентификации и управления учетными записями позволяют проводить усиленную парольную политику на нескольких платформах, но эти средства дорого стоят и их сложно реализовать. Продукт Microsoft Services for UNIX (SFU) позволяет устанавливать службы NIS на контроллерах доменов AD и применять объект «пользователь» службы AD для хранения свойств и учетных данных пользователя UNIX, но и в этом случае при регистрации в системах UNIX и в сетях с AD пользователю приходится иметь дело с разными паролями.

Подход, описываемый в настоящей статье, представляет собой самое простое, быстрое и экономичное решение проблемы централизованной аутентификации пользователей UNIX средствами AD. Предлагаемая схема дает пользователям UNIX возможность применять их доменные учетные записи AD для регистрации в системах UNIX (т. е. каждый пользователь должен помнить лишь один пароль) и обеспечивает реализацию в системах UNIX усиленной парольной политики AD.

PAM-архитектура системы аутентификации пользователей UNIX средствами AD

Что такое PAM

Почти все современные версии UNIX и Linux используют разработанную Open Software Foundation (OSF) архитектуру Pluggable Authentication Module (PAM). Эта архитектура позволяет с легкостью интегрировать в системы UNIX различные технологии аутентификации, такие как UNIX, протоколы Lightweight directory Access Protocol (LDAP), Kerberos и смарт-карты для наделенных средствами PAM приложений и служб, например login, passwd, rlogin, telnet и ftp. PAM-совместимые службы и приложения не занимаются аутентификацией пользователей, эта задача возлагается на отдельные PAM-модули. По умолчанию для аутентификации в системах UNIX используются модули UNIX PAM; при этом применяются файлы passwd и shadow passwd, где хранится информация о пользовательских учетных записях и паролях. Но архитектура PAM позволяет с легкостью добавлять и использовать альтернативные модули PAM и перекладывать бремя аутентификации пользователей на другие системы, которые будут выполнять эту процедуру в соответствии с особенностями конкретного приложения и требованиями к защите данных. Так, модуль LDAP PAM позволяет осуществлять аутентификацию пользователей с помощью службы каталога LDAP, такой как AD, Novell eDirectory, OpenLDAP и разработанного корпорацией Sun Microsystems средства Sun ONE Directory Server. Модуль Kerberos PAM дает возможность выполнять процедуру аутентификации с помощью Kerberos Distribution Center (KDC), в частности Heimdal Kerberos, Massachusetts Institute of Technology (MIT) Kerberos, Sun Enterprise Authentication Mechanism (SEAM) и Windows 2000 Kerberos. Стоит отметить, что PAM позволяет осуществлять аутентификацию, но не авторизацию системных ресурсов, к которым пользователь получает доступ после регистрации в системе.

Поскольку в сети Windows 2000 имеется инфраструктура AD и для регистрации в системе Windows пользователи ежедневно применяют свои учетные записи для доменов AD, администратор может организовать аутентификацию пользователей по схеме «от AD к UNIX» (AD-to-UNIX) средствами LDAP PAM или Kerberos PAM. Таким образом, для обращения к системам Windows и UNIX пользователям нужно будет знать предъявляемые при регистрации учетные данные только одной учетной записи. В то же время можно будет реализовать ту же самую применяемую в службе AD усиленную парольную политику как для пользователей AD, так и для пользователей UNIX. Более подробно вопросы конфигурирования парольных политик AD описаны в статье Кэти Ивенс «Защита пароля», опубликованной в Windows & .NET Magazine/RE №7 за 2002 год.

Сравнив модули LDAP PAM и Kerberos PAM, я обнаружил, что проще развертывается модуль LDAP PAM — как с точки зрения администраторов Windows, так и с позиции администраторов UNIX-систем. Давайте более подробно остановимся на реализации модуля LDAP PAM в службе AD. Те, кто желает познакомиться со средствами аутентификации пользователей средствами реализованной в Windows 2000 службы Kerberos for UNIX, могут обратиться к статье «Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability», опубликованной на сайте Microsoft.

Как функционирует программа LDAP PAM

LDAP PAM (pam_ldap) — это бесплатно распространяемая программа с открытым исходным кодом. PADL Software, компания, разработавшая библиотеку pam_ldap, поддерживает исходный код программы и расширяет ее функциональные возможности. Поставщики UNIX, как правило, оснащают свои версии операционной системы поставляемой PADL Software программой pam_ldap или библиотеками pam_ldap собственной разработки. Последние версии Linux тоже включают в себя программу pam_ldap.

LDAP PAM управляет аутентификацией пользователей UNIX в каталогах LDAP. При этом для взаимодействия с соответствующим каталогом LDAP используется клиент UNIX LDAP или программа от независимого поставщика, например OpenLDAP. Если имеющаяся версия UNIX наделена собственными средствами для взаимодействия с Secure Sockets Layer (SSL) или используются SSL-средства независимых поставщиков, скажем OpenSSL, и клиент LDAP, а также соответствующий каталог совместимы с SSL, модуль LDAP PAM может для обеспечения безопасного взаимодействия между системой UNIX и каталогом LDAP использовать протокол LDAP over SSL (LDAPS). AD автоматически получает возможность взаимодействовать с LDAPS в случае, если на контроллерах доменов AD установлены сертификаты серверов. Рассмотрим процесс аутентификации от LDAP PAM к AD, который проиллюстрирован представленной на рисунке архитектурой PAM.

Когда оснащенная средствами PAM служба или приложение выполняет процедуру аутентификации пользователя (например, в случае, если пользователь обращается по протоколу telnet к серверу UNIX), она обращается к библиотеке PAM. Последняя вызывает модуль аутентификации, который требуется службе или приложению в соответствии с конфигурацией PAM, указанной в файле pam.conf (процедура настройки PAM будет рассмотрена позже). Затем на основе спецификаций взаимодействия, определенных в файле ldap.conf, модуль LDAP PAM предоставляет необходимую для регистрации информацию службе AD. После этого служба LDAP каталога AD сопоставляет предоставленные регистрационные данные пользователя с учетными данными пользователя, хранящимися в AD, и применяет парольную политику AD для аутентификации пользователя.

Перед тем как пользователь сможет по завершении процесса аутентификации зарегистрироваться в системе UNIX, система должна создать среду, включающую идентификационный номер пользователя UNIX, основной каталог и применяемую по умолчанию оболочку. Эти атрибуты, не являющиеся частью пользовательских атрибутов в системе AD, генерируются в тот момент, когда создается учетная запись UNIX, и хранятся в локальном файле passwd на сервере NIS. Следовательно, необходимость хранения учетных записей UNIX на каждой системе UNIX остается; однако от пользователей уже не требуется знания их учетных данных для системы UNIX; они могут даже не знать о том, что имеют учетную запись на локальной системе. Иначе говоря, модуль PAM можно сконфигурировать таким образом, чтобы пользователи для регистрации в данной системе могли задейтвовать не учетные записи UNIX, а учетные записи AD.

Установка LDAP PAM

Библиотечный файл pam_ldap, который часто называется pam_ldap.so.1 или pam_ldap.so, в большинстве UNIX-систем располагается в каталоге /usr/lib/security, но часто случается, что данная версия старше, нежели файл pam_ldap, распространяемый компанией PADL. А более ранние версии часто не взаимодействуют со службой AD, поскольку их создатели не ставили перед собой задачу обеспечивать совместимость со службой AD. Поэтому, если предоставляемый поставщиком используемой версии UNIX файл pam_ldap не имеет совместимости с AD, я рекомендую или загрузить текущую версию файла pam_ldap с сайта фирмы PADL (http://www.padl. com/OSS/pam_ldap.html) и откомпилировать его своим силами, или получить бинарный пакет на Web-узле консалтинговой компании Symas (http://rebec.symas. net/download/connexitor).

В процессе установки файла pam_ldap на системе Sun Solaris 2.8 я обнаружил, что входящий в комплект поставки Solaris 2.8 файл pam_ldap несовместим с AD, но предоставляемый фирмой PADL файл pam_ldap 164 (новейшая версия) хорошо взаимодействует с этой службой. Так что, если планируется использовать pam_ldap в системе Solaris 2.8, можно следовать изложенным ниже инструкциям (тем, кто пользуется не Solaris, а другой системой, возможно, придется внести в эти инструкции некоторые изменения). Для компилирования и поддержки файла pam_ldap я пользуюсь бесплатно распространяемыми программными средствами с открытым исходным кодом. Итак:

1. Следует установить необходимые для генерирования исполняемых файлов компоненты GNU Compiler collection (Gcc), make, automake и autoconf. Эти инструменты понадобятся для создания файла pam_ldap и зависимых от него файлов. Новейшую, стабильно функционирующую версию Gcc 3.3 можно загрузить по адресу http://www.gnu.org/directory/gnu/gcc.html, версию make 3.80 — по адресу http://www.gnu.org/directory/gnu/make.html, версию automake 1.76 — по адресу http://www.gnu.org/directory/gnu/automake.html и версию autoconf 2.57 — по адресу http://www.gnu.org/directory/gnu/autoconf.html. Бинарные пакеты Gcc, make, automake и autoconf можно найти по адресу http://www.sunfreeware.com.

2. Необходимо загрузить и установить генератор случайных чисел, с помощью которого модуль SSL будет генерировать ключи шифрования. Хорошим генератором является программа Pseudo Random Number Generator Daemon (PRNGD) 0.9.27. Ее исходный код можно получить на узле http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html. Бинарный пакет версии 0.95 доступен по адресу http://www.sunfreeware.com.

3. Для обеспечения взаимодействия с SSL следует загрузить и установить новейшую версию OpenSSL 0.9. 7b.

Исходный код можно получить по адресу http://www.openssl.org. Имеется и бинарный пакет. Он доступен по адресу http://www.sunfreeware.com.

4. Требуется загрузить исходный код программы OpenLDAP 2.1.22, размещенный по адресу http://www.openldap.org/software/download. Перед тем как приступить к компилированию OpenLDAP, нужно установить параметры окружения с помощью следующих команд:

export LDFLAGS CPPFLAGS
unset LD_LIBRARY_PATH
LDFLAGS="-L/usr/local/ssl/lib -L/usr/local/
lib"
LDFLAGS="$LDFLAGS -R/usr/local/ssl/lib:/usr/
local/lib"
CPPFLAGS="-I/usr/local/ssl/include -I/usr/
local/include"

Далее с помощью перечисленных ниже команд из каталога исходного кода OpenLDAP следует выполнить компиляцию и установку клиента OpenLDAP и используемой программой pam_ldap функции LDAPS:

./configure -disable-slapd -with-tls
make depend
make
make install

5. Необходимо применить следующие команды для компиляции и установки файла pam_ldap 164 из каталога pam_ldap:

./configure -with-ldap
-lib=openldap -with-ldap-
dir=/usr/local
-with-ldap-conf-
file=/etc/ldap.conf<
make
make install

Ключи в команде configure извещают программу pam_ldap о том, что необходимо использовать реализованные в OpenLDAP функции LDAP и конфигурацию LDAP и файла /etc/ldap.conf. Программа размещает файл pam_ldap.so.1 в каталоге /usr/lib/security.

Настройка модуля LDAP PAM

Чтобы иметь возможность задействовать программу pam_ldap, нужно предварительно настроить в системе UNIX файлы ldap.conf и pam.conf. Необходима также настройка службы AD в системе Windows 2000. Вместе с исходным кодом pam_ldap компания PADL предоставляет шаблонные коды файлов ldap.conf и pam.conf, но их надлежит модифицировать в соответствии с особенностями конкретной сети. Рассмотрим для начала, как осуществляется настройка файла ldap.conf, а затем перейдем к настройке AD и pam.conf.

В листинге 1 ((http://www.secadministrator.com, InstantDoc ID 39989) представлен шаблонный файл ldap.conf, который я использовал для настройки доступа к AD средствами pam_ldap. Код в метке A в листинге 1 указывает базу поиска отличительного имени LDAP (DN, т. е. строка с полным AD-именем организации) и предписывает LDAP выполнять поиск объектов и атрибутов в базе поиска, включая все организации-потомки, до тех пор пока LDAP не найдет (или пока не придет к выводу о том, что не в состоянии найти) искомый объект в пределах указанного пользователем отрезка времени — в данном случае 30 секунд.

Код в метке B показывает унифицированные идентификаторы ресурсов (Uniform Resource Identifiers, URI) сервера AD LDAP, которые будет использовать программа pam-ldap. Когда указывается несколько контроллеров доменов, как в приведенном примере, при недоступности текущего контроллера домена аутентификация может быть передана следующему доступному контроллеру. LDAPS осуществляет шифрование LDAP-сообщений с тем, чтобы учетные данные пользователя были защищены на этапе передачи их от системы UNIX в службу AD. Кроме того, код в метке B предлагает LDAPS использовать TCP-порт 636 и указывает версию сервера LDAP; дело в том, что служба AD совместима лишь с новейшей версией, а именно c LDAP 3.0.

Далее код предоставляет LDAP соответствующее имя DN и пароль для регистрации в службе AD в течение установленного времени (скажем, 30 секунд) и выполняет просмотр объекта и атрибутов пользователя LDAP для аутентификации пользователя UNIX. Предоставленная для регистрации связующая учетная запись LDAP может быть гостевой учетной записью из группы Domain Guests; записи такого рода не имеют особых привилегий доступа. Пользоваться предусмотренной в службе AD учетной записью anonymous нельзя, так как данная учетная запись не допускает возможности просмотра атрибута sAMAccountName объекта «пользователь», что необходимо в процессе аутентификации средствами pam_ldap. AD позволяет администратору определять группу и включать в нее только тех пользователей, которые имеют полномочия на регистрацию в системе UNIX. Код в метке C указывает, что pam_ldap позволяет регистрироваться в системе только тем пользователями, которые являются членами группы Unix-System1. Этот основанный на проверке принадлежности к группе критерий не допускает к регистрации в системе пользователей, не имеющих на то полномочий, в случаях, когда администратор забыл удалить старую учетную запись пользователя для системы UNIX или случайно создал в системе учетную запись этого пользователя. Последняя строка кода в листинге 1 указывает, что пароль пользователя является паролем для службы AD.

Можно создать собственный файл ldap.conf, если заменить шаблонные имена в коде соответствующими именами из своей системы. Затем следует сохранить этот файл на системе UNIX в каталоге /etc и защитить его, предоставив права на чтение или изменение этого файла только обладателю учетной записи root.

Настройка AD

Процедура настройки AD, обеспечивающая функционирование программы pam_ldap, проста и не вызывает никаких затруднений. Сначала нужно создать гостевую учетную запись, являющуюся связующей учетной записью LDAP (о том, как это сделать, я рассказывал выше), а затем наделить эту запись лишь теми привилегиями, которые предусмотрены для членов группы Domain guests с сильным паролем. Далее нужно создать для системы UNIX глобальную группу, такую как UNIX-System1, и ввести в эту группу всех пользователей, которым требуется доступ к данной системе. Чтобы служба AD могла взаимодействовать с LDAPS, следует установить — во всяком случае, на тех контроллерах доменов, которые задействует программа pam_ldap, — службу Windows 2000 Certificate Services или сервер сертификатов от независимого поставщика. Я, например, использовал сервер Certificate Services операционной системы Windows 2000 и с помощью глобальной общей политики обеспечил автоматическое получение сертификатов всеми контроллерами доменов.

Настройка PAM

Чтобы дать пользователям возможность регистрироваться в системах UNIX с помощью службы AD, нужно пройти еще один важнейший этап — этап настройки модулей PAM. Архитектура PAM обеспечивает выполнение четырех функций управления: auth (аутентификация), account (учетная запись), session (сеанс) и password (пароль). Функция auth устанавливает учетные данные пользователей и осуществляет их аутентификацию; функция account выполняет проверку учетных записей пользователей (скажем, проверяет правильность паролей и сроки прекращения действия учетных записей); функция session устанавливает и прекращает сеансы регистрации, а функция password управляет изменениями паролей. Настройку всех четырех указанных функций необходимо выполнять в файле pam.conf. Каждая запись в любой представленной в файле pam.conf функции управления содержит имя службы или приложения, за которым следует функция управления, ключ управления, путь к библиотеке аутентификации и дополнительный параметр. В листинге 2 (http://www.secadministrator.com, InstantDoc ID 39989) представлен образец файла pam.conf, на примере которого я покажу, как настраивается модуль PAM.

В качестве имени службы или приложения может использоваться имя любой оснащенной средствами PAM службы или приложения UNIX. В листинге 2 login в первом поле предназначен для регистрации на консоли системы; другие включают остальные PAM-совместимые службы и приложения, в том числе telnet, ftp, ssh, su и sudo. Если для работы с определенной службой или приложением желательно использовать конкретные модули аутентификации (например, sudo), можно создать для sudo одну или несколько отдельных записей. Второе поле задает функцию управления (это может быть auth, account, session или password), которая взаимодействует со службой или приложением.

Третье поле — это ключ, управляющий применением данной функции управления. К примеру, в коде, содержащемся в метке A листинга 2, контрольный ключ, достаточный для службы регистрации, означает, что аутентификация прошла успешно, аутентификация завершается; иначе PAM вызывает модуль PAM, на который указывает код в метке B. Поскольку требуется контрольный ключ в коде, представленном в метке B, пользователь может зарегистрироваться на консоли, только если аутентификация прошла успешно.

В четвертом поле записи указывается путь доступа к библиотеке модуля PAM. Путь доступа, обозначенный в коде метки A, указывает на библиотеку pam_ldap, а путь, приведенный в метке B, указывает на pam_unix (собственная программа аутентификации системы UNIX). Поэтому, когда пользователь регистрируется на системной консоли, система сначала выполняет процедуру аутентификации в AD, и, если эта процедура не завершается успешно, PAM проводит аутентификацию средствами UNIX. При выполнении приведенного в метке B варианта try_first_pass PAM не предлагает пользователю повторно ввести пароль для аутентификации средствами UNIX, а вместо этого автоматически применяет пароль, введенный пользователем для аутентификации средствами AD. Приведенный в метке C вариант ignore_unknown_user подразумевает, что, если в каталоге AD нет учетной записи данного пользователя, PAM ищет соответствующую учетную запись в системе UNIX. Этот шаблонный файл pam.conf позволяет пользователю, скажем администратору, имеющему возможность физического доступа к системе, регистрироваться с системной консоли. Когда данная система UNIX теряет связь с сетью, администратор, которому нужно найти причину неполадки, может зарегистрироваться на консоли, используя локальную учетную запись root. В сценарии также указывается, что все остальные службы (кроме login) и приложения при выполнении аутентификации пользователей и при проверке учетных записей должны задействовать только службу AD. Pam_ldap не имеет функции управления сеансами, поэтому для управления сеансами связи PAM должна прибегать к помощи модуля UNIX PAM, как указано в коде метки D (и это, кстати говоря, еще одно основание для того, чтобы хранить пользовательские учетные записи UNIX непосредственно в системе). Последние строки кода указывают, что если в каталоге AD нет учетной записи пользователя, то в случаях, когда системный администратор изменяет пароль данного пользователя, PAM изменяет его пароль в учетной записи UNIX.

Файл pam.conf следует редактировать и сохранять в каталоге /etc системы UNIX. Перезагружать систему после конфигурирования PAM не нужно. Система фиксирует изменения автоматически в ходе следующего сеанса аутентификации пользователя. Теперь она готова к аутентификации пользователей UNIX средствами AD.

Всего лишь первый шаг

Служба AD обеспечивает добротную централизованную инфраструктуру аутентификации в масштабе всего предприятия. Модуль LDAP PAM позволяет задействовать службу AD для создания централизованной системы аутентификации пользователей UNIX. Наряду с этим он дает возможность облегчить решение возложенной на администраторов задачи управления паролями, освободить пользователей от необходимости запоминать множество паролей и реализовать усиленную парольную политику на платформах Windows и UNIX. Впрочем, применение службы AD для аутентификации пользователей UNIX — всего лишь первый шаг на пути к созданию объединенной системы управления пользователями уровня предприятия. Учетные записи пользователей UNIX на системах UNIX нужно обслуживать даже в тех случаях, когда пользователям нет необходимости знать, что у них есть учетные записи UNIX. Можно задействовать службу AD для хранения и управления сведениями об учетных записях пользователей UNIX и избавиться от необходимости постоянно контролировать действия пользователей UNIX на отдельных системах. Об этой функции будет рассказано в одной из следующих статей.

Тао Чжоу (taoz@ix.netcom.com) — редактор журнала Windows & .NET Magazine и сервисный инженер, работающий в сфере Internet. Он имеет сертификаты MCSE и Master CNE, а также степень магистра компьютерных наук


Листинг 1. Шаблонный файл Ldap.conf

Начало метки A
base dc=windows,dc=example,dc=com
scope sub
timelimit 30
Конец метки A
Начало метки B
uri ldaps://dc1.windows.example.com
 ldaps://dc2.windows.example.com
port 636
ldap_version 3
Конец метки B
binddn cn=ldaps,cn=Users,dc=windows,
dc=example,dc=com
bindpw N0+Pr1vil3gE
bind_timelimit 30
pam_filter objectclass=user
pam_login_attribute sAMAccountName
Начало метки C
pam_groupdn cn=Unix-System1,cn=Users,
dc=windows,dc=example,dc=com
Конец метки C
pam_member_attribute Member
pam_password ad

Листинг 2. Шаблонный файл Pam.conf

# Управление аутентификацией
Начало метки A
login auth sufficient /usr/lib/
security/pam_ldap.so.1
Конец метки A
Начало метки B
login auth required /usr/lib/
security/pam_unix.so.1 try_first_pass
Конец метки B
other auth required /usr/lib/
security/pam_ldap.so.1
# Управление учетными записями
Начало метки C
login account sufficient /usr/lib/
security/pam_ldap.so.1 ignore_unknown_user
Конец метки C
login account required /usr/lib/
security/pam_unix.so.1
other account required /usr/lib/
security/pam_ldap.so.1
# Управление сеансами, не реализованное
 в pam_ldap
Начало метки D
other session required /usr/lib/
security/pam_unix.so.1
Конец метки D
# Управление паролями
other password sufficient /usr/lib/
security/pam_ldap.so.1 ignore_unknown_user
other 	password required /usr/lib/
security/pam_unix.so.1