2007/06/08

Solaris LDAP Authentication with OpenLDAP

Продолжая тему интеграции работающих сервисов с единой директорией каталогов (LDAP), реализовал аутентификацию пользователей в Solaris 10 через PAM-модуль pam_ldap.

План следующий:
  1. Подготовить LDAP-каталог для хранения данных о пользователях
  2. Подготовить систему для работы с LDAP-каталогом
  3. Настроить PAM-конфигурацию для работы с LDAP
  4. Протестировать работоспособность
Перед тем как приступать к сборке всего этого "конструктора", советую ознакомиться (освежить в памяти) с документацией по PAM-модулям.
1. Подготовка LDAP-каталога
В LDAP-директории должны существовать записи о пользователях, которые будут иметь доступ к системе. Пример записи:
dn: uid=user3,ou=People,o=Organization,c=lt
uid: user3
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
gecos: Ivan Ivanov
sn: Ivanov
telephoneNumber: 37070022722
mail: user3@organization.lt
homeDirectory: /export/home/user3
loginShell: /usr/bin/bash
uidNumber: 1010
cn: user3
userPassword: {CRYPT}$1$Gw4bZGoA$cv7sLoqjquhfZiHIx5Hwi0
gidNumber: 1100
Также в LDAP-директории должен быть определен пользователь, имеющий доступ к "ветке" со всеми пользователями (доступ к паролям пользователей ему необязателен) - он будет использоваться для доступа к LDAP от имени системы. В рассматриваемом примере такой пользователь - cn=manager, o=Organization,c=lt (с паролем 'neskazu').
2. Подготовка операционной системы для работы с LDAP-директорией
В Solaris 10 (и прежних, как оказалось, версиях) есть команда ldapclient, которая все сделает сама - нужно только правильно сформировать запрос. Если указываемые значения содержат пробелы, их необходимо обрамлять одинарными скобками. Например, на моей системе это выглядело так:
ldapclient manual -v -a credentialLevel=proxy -a authenticationMethod=simple -a 'proxyDN=cn=manager,o=My Organization,c=lt' -a proxyPassword=neskazu -a 'defaultsearchbase=o=My Organization,c=lt '195.44.44.3
Команда создаст в системе необходимые для работы с LDAP файлы и кое-что изменит не совсем верно - это касается файла /etc/nsswitch.conf. В данном файле нужно будет поправить строку, добавив запись возможность использовать dns для преобразования dns-имен хостов (resolving)
hosts: dns ldap [NOTFOUND=return] files
Если все прошло без ошибок, то по команде getent passwd
# getent passwd
root:x:0:0:Super-User:/:/sbin/sh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
smmsp:x:25:25:SendMail Message Submission Program:/:
listen:x:37:4:Network Admin:/usr/net/nls:
gdm:x:50:50:GDM Reserved UID:/:
webservd:x:80:80:WebServer Reserved UID:/:
nobody:x:60001:60001:NFS Anonymous Access User:/:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/:
user3:x:1010:1100:Ivan Ivanov:/export/home/user3:/usr/bin/bash
...
Не забыть создать в системе домашние директории для пользователей из LDAP-директории
mkdir /export/home/user3
chown 1010:1100
/export/home/user3
3. Настроить PAM-модуль pam_ldap
В файле /etc/pam.conf внести следующие изменения:
other auth requisite pam_authtok_get.so.1
# other auth required pam_dhkeys.so.1
other auth required pam_unix_cred.so.1
other auth sufficient pam_unix_auth.so.1
other auth required pam_ldap.so.1

other account requisite pam_roles.so.1
other account sufficient pam_unix_account.so.1
other account required pam_ldap.so.1
С включенным модулем pam_dhkeys система отказывалась аутентифицировать LDAP-пользователей. Поинтересовавшись, что это за модуль и поняв, что я его не использую, закомментировал зверя.
Если в pam.conf какая-то служба описана отдельно (например xscreensaver), то для нее необходимо также указать использование модуля pam_ldap как и для 'other'.

После проделывания вышеприведенных процедур все должно заработать. Если что-то не так, то на помощь приходит Syslog-система, правда прежде чем ею воспользоваться, её конфигурационный файл (/etc/syslog.conf) тоже требует доработки - например, такой:
auth.debug /var/log/authlog
причем, если файл /var/log/authlog не создан, создать пустышку и заставить syslog перечиать свой файл конфигурации
# touch /var/log/authlog
# svcadm enable svc:/system/system-log:default

Ссылки:
  1. LDAP Authentication in Solaris 10
  2. Solaris 10 and Active Directory Integration
  3. Подключаемые Модули Аутентификации (PAM)
  4. PAM Administration (pdf)
  5. Manual Page for ldapclient

3 comments:

Anonymous said...

А если в LDAP каталоге сотня пользователей?Предлагаете для каждого из них home в ручную создавать? Есть какое-нибудь решение проблемы?

Roman Sozinov said...

to anonymous:
Да поможет Вам shell ;)

Anonymous said...

да есть решение для вашей задачи, pam_mkhomedir