LDAP сервер с PAM авторизацией клиентов

Как настроить 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 

unix-way