Как настроить LDAP с поддержкой PAM авторизации?
Итак!
1.Запуск LDAP.
Чтобы LDAP сервер заработал, для начала установим несколько пакетов
#apt-get install slapd ldap-utils migrationtools |
Ответим на все заданные при их установке вопросы и затем переконфигурируем slapd, чтобы заставить dpkg задать нам больше вопросов.
#dpkg-reconfigure slapd |
Проверим:
#ldapsearch -x -b dc=deb2,dc=test,dc=local # extended LDIF # # LDAPv3 # base <dc=server,dc=test,dc=local> with scope subtree # filter: (objectclass=*) # requesting: ALL #
# server.test.local dn: dc=server,dc=test,dc=local objectClass: top objectClass: dcObject objectClass: organization o: MyTestOrg dc: server
# admin, server.test.local dn: cn=admin,dc=server,dc=test,dc=local objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator
# search result search: 2 result: 0 Success
# numResponses: 3 # numEntries: 2 |
Всё работает? Да? Если нет ищем где напутали
2. Заполнение базы
Чтобы быстро импортировать всех существующих пользователей и групп в сервера (локальных пользователей и групп) в LDAP базу будем использовать утилиту migrationtools.
#сd /usr/share/migrationtools/ |
Отредактируем конфиг по умолчанию, он называется migrate_common.ph и заменим следующие параметры:
#vi migrate_common.ph $DEFAULT_MAIL_DOMAIN = "server.test.local"; $DEFAULT_BASE = "dc=server,dc=test,dc=local"; |
Затем экспортируем данные:
#./migrate_group.pl /etc/group /home/my_home/group.ldif #./migrate_passwd.pl /etc/passwd /home/my_home/passwd.ldif |
Однако этот скрипт не создает ldap-узлы Group и People поэтому нужно самим создать их. Для этого создадим ldif файл в домашнем каталоге с именем people_group.ldif и заполним его данными:
people_group.ldif (не забываем про пустую строку перед каждым dn (читай LDAP мануал)!!!)
dn: ou=People,dc=server,dc=test,dc=local ou: People objectclass: organizationalUnit
dn: ou=Group, dc=server,dc=test,dc=local ou: Group objectclass: organizationalUnit |
Теперь у нас есть списки наших пользователей и групп, сконвертированные в LDAP формат ldif. Импортируем их в нашу LDAP базу.
#ldapadd -x -W -D "cn=admin,dc=server,dc=test,dc=local" -f /home/skuleshov/people_group.ldif #ldapadd -x -W -D "cn=admin,dc=server,dc=test,dc=local" -f /home/skuleshov/group.ldif #ldapadd -x -W -D "cn=admin,dc=server,dc=test,dc=local" -f /home/skuleshov/passwd.ldif |
где:
-x означает, что не используем sasl
-W будет запрошен пароль администратора LDAP
-D используется для идентификации администратора
-f указывает файл, где ldapadd будет брать данные для добавления
3. Настройка клиентов
Установим следующие пакеты:
#apt-get install libnss-ldap libpam-ldap nscd libnss-ldapd |
libnss-ldap позволит нам использовать ldap как сервер имен, lippam-ldap позволит pam аутентифицировать пользователей через LDAP и, наконец, nscd - это lookup-демон паролей, групп и хостов, который кеширует результаты, чтобы не запрашивать повторно LDAP каждый раз, когда аутентификация будет пройдена.
Теперь отредактируем конфигурационные файлы и убедимся, что у нас установлены следующие настройки:
#vi /etc/libnss-ldap.conf host server base dc=server,dc=test,dc=local rootbinddn cn=admin,dc=server,dc=test,dc=local
#vi /etc/libnss-ldap.secret пароль
#vi /etc/pam_ldap.conf host server base dc=server,dc=test,dc=local rootbinddn cn=admin,dc=server,dc=test,dc=local
#vi /etc/pam_ldap.secret пароль
#vi /etc/pam.d/common-account account sufficient pam_ldap.so account required pam_unix.so #если вы хотите, чтобы домашний каталог пользователя создавался при первом логине #session required pam_mkhomedir.so umask=0022 skel=/etc/skel/ silent
#vi /etc/pam.d/common-auth auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure use_first_pass
#vi /etc/pam.d/common-password password sufficient pam_ldap.so password required pam_unix.so nullok obscure min=4 max=8 md5
#vi /etc/pam.d/common-session session sufficient pam_ldap.so session required pam_unix.so session optional pam_foreground.so |
Но на сайте вики есть такое
Creating home directory on login
Include this in /etc/pam.d/common-session if you want to automatically create home directories when users first login:
session required pam_mkhomedir.so skel=/etc/skel umask=0022
Не сработало. Сработало в /etc/pam.d/common-account (((
Затем, nsswitch, чтобы система имела возможность переключаться с локальной аутентификации на ldap аутентификацию.
#vim /etc/nsswitch.conf # /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file.
passwd: compat ldap group: compat ldap shadow: compat ldap
hosts: files dns networks: files
protocols: db files services: db files ethers: db files rpc: db files netgroup: nis |
Не забыть перезапустить nscd для обновления кеша!!!
С этими настройками при логине юзер сначала пытается залогиниться как локальный пользователь. Если совпадений имен не найдено, запускается аутентификация с ldap сервера.
Полезные статьи:
https://wiki.debian.org/LDAP/PAM
https://wiki.debian.org/LDAP/NSS