Вход:  Пароль:  
FreeSource: AltLinux/Документация/OpenLDAP ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

Настройка OpenLDAP и его клиентов


Черновик

Авторы

davinchi (davinchi@zu.org.ru или boldin.pavel@gmail.com)
Anton Gorlov (gorlov@pnz.ru)
Andrey Chesnokov (aacchhee@gmail.com)


Рассматривается вопрос использования Open LDAP для хранения информации о системе, как то:


Оглавление документа

Преамбула


Хотелось бы, чтобы перед прочтением этого руководства, Вы прочитали документацию по LDAP.


Этот документ будет находится в состоянии: «Непонятно для кого», пока не будет причесано кем-либо :)


По историческим причинам и личным пристрастиям мой домашний хост называется nirvana.home.

PAM_LDAP и NSS_LDAP


Аутентификация и информация о пользователях через openldap. Данные пакеты позволяют хранить информацию о пользователях (идентификатор, пароль, путь к домашней директории, любимый shell) в LDAP системе.


Преимуществом такого подхода является отсутствие необходимости синхронизировать кучу /etc/passwd и /etc/shadow файлов на различных машинах (которые, кстати, могут быть выключены в данный момент), минусы же известны – над этим необходимо работать, чему и посвящена эта часть статьи про openldap.

Установка пакетов


Начнем с приятного: все эти пакеты есть в ALM2.4 и Sisyphus.


Поэтому для их установки достаточно просто набрать:


и для сервера ldap

Настройка в openldap-server


Для начала вам надо настроить Ваш ldap-сервер, для этого:


  1. найдите файл /etc/openldap/slapd.conf и найдите в нём описание database
  2. поменяйте значение suffix на нечто более похожее на Ваше доменное имя, к примеру


или (у меня)


  1. Теперь поменяйте rootdn – это «отличительное имя» супер пользователя для этой базы. Супер пользователь может входить под своим dn, даже если каталога на порядок выше не существует. Поменяйте rootpw, это ваш секретный пароль (позже мы настроим sasl + krb5), если затрудняетесь с выбором пароля, используйте pwgen.
  2. Поменяйте также directory для данного «дерева» ldap:


или у меня

  1. Нужно не забыть поменять права доступа (ACL) для созданного нами дерева, о чем немного позже.
  2. Запустите slapd (# service slapd start)

Если вы будете администрировать и обращаться к LDAP c другой машины, то проверьте, что LDAP слушает public interface:


По умолчанию в branch4.0 LDAP слушает только на loopback-интерфейсе без SSL. Нужно выбрать подходящую строку и её раскомментировать в файле /etc/sysconfig/ldap:


После настройки шифрования стоит вернуться к этому файлу и убрать порты без SSL.


В branch4.0 после установки пакетов все логи ldap выводятся только на tty12. Если вы хотите иметь отдельный логфайл, то добавьте в /etc/syslog.conf следующее:

и перезапустите syslogd.


Теперь необходимо инициализировать наше дерево:
Вот примерный файл newentry.ldif:


Вы должны заменить dc=nirvana,dc=home на ваш suffix (смотрите выше).


objectClass определяет класс добавляемого в дерево объекта, в данном случае это тип «организация» с параметром “o:» равным “home”.


Второй кусок файла создает ветку, в которой будут хранится логины пользователей (не важно как Вы его назовете, но обычно это ou=People или ou=accounts).


теперь его необходимо «загнать» в ldap.

вместо опции -w Вы можете использовать опцию -W и пароль будет запрошен на stdin (Для того чтобы выполнить эту команду должен быть установлен пакет openldap-clients, в состав которого входит ldapadd).


пример команды:


вывод должен быть похожим на:


Теперь Вы можете создавать пользователей в этой ветке, используя gq, или мигрировать существующих из shadow/tcb используя migration-tools или их немного изменённую мною версию для чтения tcb (которая появится здесь немного позже когда же??).


К примеру Вы выбрали второй путь.
Если используется tcb, то необходимо сначала конвертировать из tcb в shadow с помощью утилиты tcb_unconvert из пакета tcb-utils.
(не забывайте делать резервные копии)


при правильном завершении программы в accounts.ldif Вы получите LDIF для миграции пользователей в Open LDAP.


Примечание Пароли пользователей хранятся в accounts.ldif в виде хэшей, однако этот файл нужно беречь от глаз посторонних людей.


Запустим его:

или, если необходимо быстрее и безопаснее:


Если все прошло успешно, все Ваши пользователи «перехали» в ldap.
Теперь займемся настройкой клиентов.

Настройка Клиентов


Теперь время настроить клиенты nss_ldap и pam_ldap.
В ALM2.4 эти пакеты используют один и тот же конфигурационный файл:
/etc/ldap.conf (не путать с /etc/openldap/ldap.conf).
В sisyphus – два различных файла:
/etc/nss_ldap.conf и /etc/pam_ldap.conf


Разберем его построчно:


или, Вы можете посмотреть мой конфигурационный файл:
(комментарии удалены)


Настройка PAM для работы с pam_ldap


Настройка pam для pam_ldap очень проста – Вам надо лишь добавить строки, начинающиеся с '>' в файл /etc/pam.d/system-auth



Заметьте, что создание домашних каталогов не работает с sshd из ALT Linux Master 2.4.
Возможно это будет работать (в Сизифе точно работает), если pam_mkhomedir вызывать на стадии account:

> account required /lib/security/pam_mkhomedir.so skel=/etc/skel.ru_RU.KOI8-R/ umask=0077

Эта строка должна быть первой (!), если account-строк несколько .


Смотрите здесь.


Теперь Вам необходимо отдельно настроить sshd (из-за того что он использует pam_userpass) и xscreensaver (из-за того что он использует <PAMROOT>/system-auth-user_first_pass)


Файл /etc/pam.d/sshd


Файл /etc/pam.d/system-auth-use_first_pass

Смена паролей в ldap


Теперь сделаем то, из-за чего было столько страданий – изменение паролей в ldap.
(Лично я делал все это ради одной только смены паролей.)


Замените Ваш /etc/pam.d/passwd на следующий файл.



Заметьте, что если Вы не указали rootbinddn в файле /etc/ldap.conf или не создали файл /etc/ldap.secret (в Sisyphus он называется pam_ldap.secret),
содержащий пароль rootbinddn, то Вы не сможете менять пароли от пользователя root (вам прийдется ввести пароль пользователя для этого).
Однако, это не так страшно, если Вы используете ldapadd или gq для управления директорией с пользователями.


Примечание: если /etc/pam.d/passwd имеет следующий вид:



то менять ничего не требуется – для изменения пароля будут иcпользованы настройки, сделанные в /etc/pam.d/system-auth.

Использование nss_ldap


NSS – диспетчер имен, расширение для glibc, позволяющее резолвить имена из разных источников (files, dns, nis, nisplus, ldap).


Для того, чтобы заставить его работать с nss_ldap, необходимо изменить /etc/nsswitch.conf следующим образом.
Замените обычные строки с passwd, shadow и group на эти.


Примечание: Учтите, что если вы установите ldap в первым в списке, то некоторые статически слинкованные (rpm, sh, vi) программы будут выпадать с segfault.


Подробнее смотрите файл file:///usr/share/doc/nss_ldap-220/README.ALT


Проверка


Настало время проверить нашу систему.


Создайте тестового пользователя в ldap (у меня это был vasya pupkin :-) ).
(например, используя gq или ldapadd).


Теперь наберите:
( # – от root, $ – от обычного пользователя)


0. $ ldapsearch -x -h 'ldap://<hostname>/' -d -1
1. # id vasya
2. # su – vasya
3. # ssh vasya@localhost
4. vasya$ id vasya
5. vasya$ stat .
6. vasya$ exit
7. # su – <user not in ldap>
8. user$ id vasya
9. user$ su – vasya
10. user$ ssh vasya@localhost


Теперь разберем:
если не работает 0: проверьте ваш acl лист и uri сервера
если не работает 1: проверьте /etc/nsswitch.conf и строки, начинающиеся с nss_ в файле /etc/ldap.conf
если не работает 2: проверьте наличие домашней директории vasya (если вы не добавили pam_mkhomedir), проверьте секцию сессии из pam.d/system-auth
если не работает 3: проверьте наличие домашней директории vasya (даже если вы добавили pam_mkhomedir), иногда требуется перезапуск sshd, чтобы изменения вступили в силу (странно, да?)
если не работает 4: проверьте может ли пользователь читать файлы /etc/ldap.conf и /etc/openldap/ldap.conf (а еще и сертификаты, если вы используете tls/ssl)
если не работает 5: (чего быть не может) – проверьте что выдает он в полях owner и group.
если не работает 6: :-).
если не работает 7: :-).
если не работает 8: смотрите 4.
если не работает 9: проверьте /etc/nsswitch.conf и /etc/ldap.conf.
если не работает 10: проверьте наличие домашней директории.


Если не работает что-то: проверьте, правильно ли указан uri сервера в /etc/ldap.conf, проверьте также acl лист для ldap сервера.


PAM_LDAP -> PAM_TCB


Однако, вот ваш ldap сервер «упал», а репликацию мы пока не настроили – в этом случае можно использовать pam_tcb (что и случится при выше указанных конфигах pam)


В этом вам поможет perl скрипт, показанный ниже (он, к несчастью, требует perl-ldap, что тянет за собой 15 Mb зависимостей – если для вас это не страшно (все равно perl кем-то еще используется – у нас – студентами)).


Используйте этот скрипт с осторожностью!

Секьюрити

Корректный ACL 


В нашем ACL должно быть:
1. разрешение на запись для админов
2. разрешение на чтения для публичных полей (loginShell,gecos,cn,uid)
3. запрет на чтение userPassword для остальных
4. разрешение на запись в userPassword, loginShell, gecos для пользователя
5. разрешение на чтение всех полей для пользователя TCB (смотрите скрипт выше)


Вот Вам примерный ACL:
замените <YOUR ADMIN DN> на Ваш DN в директории (у меня это uid=davinchi,ou=People,dc=vnet1)

Настройка шифрования (TLS)


Если вам захотелось хоть немного безопасности, и клиенты LDAP'а живут не на одной машинке с самим сервером (что очень вероятно) -то вам придётся открывать доступ к LDAP'у «снаружи», то есть из локальной сети или (мало ли что) даже из всемирной паутины (это может понадобится для хранения профилей почтовиков в LDAP)
и вы боитесь что ваш трафик к ldap (хеши паролей,логины или ещё что-то.) засниферят (или более просто говоря -позаимствуют без вашего ведома) – то вам несколько поможет использование шифрования.


Вот об этом мне и хотелось бы с вами поделиться.
Итак – приступим.
Все действия я проводил на базе ALT LINUX MASTER 2.4.


Что там понадобится из пакетов:



Сначала нам предстоит сгенерировать сертификаты и ключи. Я для этих целей воспользовался скриптом CA.pl из пакета openssl-0.9.7d-alt1.


В /var/lib/ssl/misc лежит перловый скрипт CA.pl для генерации сертификатов, последовательность команд следующая



Как всё это выглядит


Для начала проверим что тот сервер, на котором крутится ldap готов к работе.



Такую же картину мы должны наблюдать на всех клиентах ldap-сервера. И при создании сертификатов в качестве Common Name надо будет указывать “ring.local” и такое же имя на всех клиентах ldap-сервера для обращения к серверу. То есть никаких IP 192.168.1.111 в настройках остаться не должно. Вместо него должно присутствовать ring.local.
Иначе вы получите «CN сертификата не совпадает с именем хоста», это также пожет проявится при подключении через SASL/KRB5.



Важно Выше мы делали nslookup ring.local, так вот: в Common Name у вас должно стоять тоже самое и LDAP должен висеть на том ip-адресе, который вам вернул nslookup.


Результат:
Получаем директорию demoCA в нем нам нужен будет файл cacert.pem



Как это выглядит



Обратите внимание – Common Name == ring.local


Результат:
Получаем newreq.pem



Как это выглядит



Результат:
Подписываем newreq.pem, используя demoCA, и получаем newcert.pem



Можно еще и с правами помутить. Ну это на ваше усмотрение, но коли упрут сертификаты, будет плохо.

На сервере.

Примечания для пользователей Sisyphus

В Пакете openldap из Sisyphus (версий до 2.2.26, кажется) есть баг с неполным chroot: не копируются библиотеки libgssapi и другие, используемые sasl.


Быстрое решение: скопировать эти библиотеки вручную в каталог /var/lib/ldap/lib


Правильное решение: обновить пакет.

Изменения в slapd.conf

Надо добавить следующие строки



Будьте внимательны и не перепутайте, где чего надо прописать, а то при service slapd start, slapd просто не будет запускаться.

Изменения в ldap.conf из пакета openldap

Надо внести следующую строчку в /etc/openldap/ldap.conf



И изменить ldap на ldaps в URI.


Далее необходимо заставить ldap слушать секурный порт на внешнем адресе, ну и несекурный оставим только для ответов на 127.0.0.1
Для этого идём в /etc/sysconfig и правим там файл “ldap”


было:


А надо:



Дополнение:


Проверка работостособности
Выполняем.


[root@ring sysconfig]# netstat -nap | grep slapd


Результат должен быть приблизительно следующим


Так же


[root@ring.local openldap]# openssl s_client -connect ring.local:636 -showcerts -state -CAfile /etc/openldap/ssl/cacert.pem


Результат должен быть приблизительно следующим



Изменения в ldap.conf из пакета nss_ldap
В ldap.conf из nss_ldap лежащем в /etc



Лучше всего добавить

после

это приведет к жесткой проверке сертификата сервера (и исключит man-in-middle атаку).


Изменения в ldap.conf тот что в /etc/openldap
Учтите -что если у вас на клиентах не стоит openldap-server то вам придётся руками создать в /etc папку openldap.
Создать там файл ldap.conf.


(БП: Странно, rpm -qf /etc/openldap/ldap.conf => openldap-clients)



Вот что в этом файле на клиентских машинах:



Насчёт прав не забывайте — простой пользователь должен иметь возможность читать cacert, иначе при любом вызове nss_ldap вы получите «нет такого пользователя».


SAMBA PDC+LDAP+TLS

Здесь мне хотелось бы рассказать как заставить самбу брать данные из LDAP+использовать при этом шифрование.


Для начала хотелось бы напомнить: самба 3 требует, что бы пользователи резолвились в системе. Для этого в данном случае должен быть настроен NSS_LDAP (см выше).
Так же не забывайте про /etc/openldap/ldap.conf на клиентских машинах. Напомню, что если его нет (а его и не будет, если LDAP сервер не стоит на этой машине) – то вам нужно будет создать соответствующий каталог+файл, и пользователь (любой) должен иметь возможность прочитать содержимое файла /etc/openldap/ldap.conf и CA-сертефикат.


Предположим что nss_ldap у вас работает, пользователь может залогиниться в систему (например).
Итак приступим к танцам. Вот вырезка из работающего конфига:



После этого делаем smbpasswd -w админский пароль для доступа в LDAP.


В принципе всё работает. С помощью smbpasswd пользователь теперь может изменить свой пароль....


Для работы SAMBA использует следующие атрибуты в lDAP'е:



Не забывайте – это должен быть POSIX ACCOUNT!


И ещё о значении нескольких параметров на примере.



В результате профили пользователя будут лежать в /profiles/username
В качестве диска R: (сетевой) будет монтироваться домашний каталог пользователя /home/anton (не забывайте что sambaHomePat – это UNC путь.) Здесь нужно задавать NETBIOS NAME компьютера, где всё это планируется располагать. В данном случае я всё расположил на локальной машинке с LDAP.


Squid+LDAP+TLS

настройка прокси-сервере squid для работы с openldap-сервером достаточно простая. Приведу пример настройки..думаю там будет всё более-менее понятно


cat /etc/squid/squid.conf |grep ldap


При этом юзер должен входить в группу squiduser в LDAP:



Ссылки


Страницы, ссылающиеся на данную: ALTLinux/Dokumentacija/OpenLDAP/TLS
ALTLinux/Документация/OpenLDAP
ALTLinux/Документация/НастройкаSSH
AltLinux/Документация/OpenLDAP
AltLinux/Документация/НастройкаSSH
Sysadmin
TZ/СерверИнтеграции
Windows/Desktop/Utils
Статьи/ПочтоваяСистема


 
Файлы [Скрыть файлы/форму]
Комментариев нет. [Показать комментарии/форму]