[Comm] Снова об авторизации через LDAP
Denis Kirienko
=?iso-8859-1?q?kirienko_=CE=C1_mccme=2Eru?=
Ср Ноя 20 19:40:36 MSK 2002
On Thu, 14 Nov 2002, Igor Muratov wrote:
>>> Я не читаю список community и поэтому не знал что у кого-то
>>> LDAP-авторизация вызывает у кого-то проблемы. В дистрибутиве есть все
>>> необходимое и это реально работает. Напишите подробнее что вы делали
>>> и что не получилось.
Все-таки нашел время и решил попробовать насторить LDAP еще раз. Вот что
получилось. Копию письма отправляю в community на altlinux.ru
Устанавливаю Мастер из коробки:
Инсталяция: text mode, группы пакетов "Документация" и "Сетевой
сервер". Обнаружил забавный глюк - под пользователем
ряд программ (bash, mc, man) выдает сообщения по-французски
(наследие Mandrake, вероятно), хотя локаль установлена
русская.
Далее
$ apt-get install openldap openldap-clients openldap-guide openldap-servers
Правлю файл /etc/openldap/slapd.conf в соответствии с руководством
по Мастеру.
Изменяю корень, имя администратора, пароль
Снимаю комментарий со строки TLSCipherSuite
(кстати, то, что эта строка закомментирована,
а три строки
TLSCertificate... - нет, не является багом?)
password-hash {MD5}
Добавляю списки прав доступа как в руководстве
Исправляю в установки индексов surname на surName givenname на givenName
# service ldap start
Starting slapd:/etc/openldap/schema/nadf.schema: No such file or directory [FAILED]
Комментирую строку с nadf.schema в slapd.conf - теперь запуск удачен
(зачем вообще включена это строка, нет же nadf.schema в Мастере?)
Проверяю отклик сервера:
# ldapsearch -H ldap://server.school179.ru
Есть ответ сервера
# ldapsearch -H ldaps://server.school179.ru
ldap_bind: Can't contact LDAP server
Естественно, поскольку ssl-ключи не сгенерированы.
В документации об этом написано:
"создадим пользователя ldap" (нужды в этом нет - зачем писать)
"... сертификат с помощью программы openssl"
А вот здесь надо гораздо подробней. Поскольку я могу прикинуться чайником
и запустить просто команду openssl. Что же я получаю?
# openssl
bash: openssl: command not found
Ладно, делаю
# apt-get install openssl
Теперь запускаю openssl. Получаю промпт OpenSSL>, с которым совершенно
непонятно, что делать дальше. После длительных поисков (в первый раз,
на пятый раз я уже гораздо быстрее вспоминаю, что надо делать)
догадываюсь запустить файл /usr/share/openldap/gencert.sh
Не без сомнений отвечаю на некоторые вопросы. После чего обнаруживаю,
что сертификат был создан не в каталоге /etc/openldap,
а в текущем каталоге. Перемещаю его куда надо, перезапускаю сервер -
соединение по протоколу ldaps установить не могу.
Ковыряю файл slapd.conf на предмет настроек TLS.
Выясняю, что важно, стоят ли в начале строк в файле slapd.conf
пробелы или нет (в общем, неочевидная догадка).
В результате на команду
# ldapsearch -H ldaps://server.school179.ru
иногда получаю ответ
ldap_bind: Can't contact LDAP server
а иногда такой
ldap_bind: Can't contact LDAP server
additional info: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Летом Алексей Чуйков писал на community на altlinux.ru,
насколько я понимаю по архиву community,
разрешить эту проблему ему не удалось.
Вспоминаю, про обещанные полчаса, необходимые
на настройку LDAP-авторизации.
Ладно, забываю пока про шифрование, в надежде
вернуться к нему позднее.
Создаю файл intial.ldif
При попытке добавить данные сталкиваюсь с очередной проблемой:
adding new entry "dc=school179,dc=ru"
ldap_add: Operations error
Вспоминаю, в чем дело: в /etc/openldap/slapd.conf написана
по умолчанию строка
directory /var/lib/ldap/bases
которую я не стал изменять, в то время как такого каталога не существует!
Создаю каталог /var/lib/ldap/bases, не забыв поменять
ему группу и права доступа.
Добавляю данные при помощи ldapadd
Пытаюсь сделать анонимный запрос:
# ldapsearch -xLLL "(uid=denis)"
No such object (32)
После очередных мучений вспоминаю, в чем дело
(опять таки, я все это повторяю не в первый раз, в первый
раз на это уходило гораздо больше времени).
Нужно подправить файл /etc/openldap/ldap.conf, изменив в нем
параметр BASE (и не забыть при этом убрать пробел между двумя
dc=... ) и сделать символическую ссылку /etc/ldap.conf на
/etc/openldap/ldap.conf
Вот это большая тонкость: в пакете openldap есть файл
/etc/openldap/ldap.conf, а на самом деле клиентские
настройки LDAP должны лежать в /etc/ldap.conf.
В документации на Мастер написано, что это именно
/etc/ldap.conf, но когда перед глазами упорно маячит
/etc/openldap/ldap.conf с аналогичными настройками,
очень тяжело понять, что эти настройки нужно указывать
в другом файле - /etc/ldap.conf
Следует заметить, что информация о настройке клиента и файле
/etc/ldap.conf написана в документации на Мастер ПОСЛЕ
предложения выполнить анонимный запрос при помощи ldapsearch,
таким образом этот анонимный запрос выполнить не удастся.
Что будет казаться пользователю очень странным - данные
в базе LDAP лежат, соединение устанавливается, авторизация
проходится, а найти ничего не удается!
Ну вот теперь мне удалось сделать так, чтобы отработал запрос
$ ldapsearch -xLLL "(uid=denis)"
Переходим к разделу "Централизованная авторизация" документации
на Мастер.
Выполняю:
$ apt_get instal nss_ldap pam_ldap
Записываю пароль администратора LDAP в /etc/ldap.secret
Изменяю файл /etc/nsswitch.conf
passwd: files ldap nisplus nis
shadow: tcb files ldap nisplus nis
group: files ldap nisplus nis
(а в документации на Мастер написано:
passwd: file ldap
то есть file, а не files. Такие ляпы в документации сильно
смущают пользователей).
Теперь проверяем, подключены ли пользователи из базы:
$ id denis
uid=1000(denis) gid=1000(luser) groupes=1000(luser)
Однако, войти в систему с консоли не удается.
В /var/log/syslog/messages написано:
Nov 15 21:11:11 server pam_tcb[2919]: login: Authentication failed for denis from (uid=0)
Дальнейшие события не являются каким-либо багом в Мастере,
но представляют интерес с точки зрения возможных грабель
на пути.
Я понимал (судя по community), что теперь надо править файлы /etc/pam.d/*
но в документации на Мастер об этом ничего не сказано!
В конце сентября sergey кидал на community свои конфигурационные файлы,
в том числе /etc/pam.d/system-auth и
/etc/pam.d/system-auth-use_first_pass.
В октябре я попробовал поставить себе эти конфигурационные файлы, это
привело к тому, что вообще невозможно стало войти в систему,
при этом у пользователя даже не запрашивался пароль.
Поскольку сил на LDAP к этому времени я потратил много,
то я решил сделать простое "временное" решение, отложив
настройку LDAP в длинный список TODO.
Теперь, вернувшись к настройке авторизации через LDAP, я снова
наткнулся на эти грабли. Опять скопировал примеры
/etc/pam.d/system-auth* от sergey, опять обнаружил, что пользователя
в систему не пускают. Но на этот раз каким-то наитием я догадался
взглянуть на эти файлы в шестнадцатеричном просмотрщике.
Как вы думаете, что я обнаружил? Естественно, \0x0D\0x0A
в качестве концов строк! После исправления этого недоразумения
авторизация заработала! К сожалению, сейчас я уже затрудняюсь
ответить на вопрос, каким образом я приносил на свою
машину, не подключенную к интернету, эти файлы и кто
виноват в возникновении этой досадной проблемы.
Итак, резюмирую:
0. На настройку авторизации мне понадобилось несколько
часов, с учетом того, что на все грабли я натыкался
не в первый раз и процесс их устранения занимал
гораздо меньше времени, нежели при первом наступании.
1. Описание LDAP в документации на Мастер выполнено
с рядом неточностей и нуждается в серьезном исправлении.
2. Хорошо бы исправить соответствующие пакеты
в Мастере (отсутствие файлов /etc/openldap/schema/nadf.schema
и /etc/ldap.conf)
3. В документации на Мастер не описан процесс настройки
протокола ldaps, попытки самостоятельно выполнить настройку
не увенчались успехом, а ставить авторизацию без шифрования -
небезопасно.
4. В документации на Мастер не описаны изменения, которые необходимо
сделать в файлах /etc/pam.d/*, без которых авторизация работать
не будет.
Денис
Подробная информация о списке рассылки community