Это руководство покажет вам, как держать своих пользователей в LDAP и аутентифицировать некоторых из них.
Я не буду показывать, как устанавливать определенные пакеты, поскольку это зависит от дистрибутива / системы.
Я сосредоточусь на «чистой» конфигурации всех компонентов, необходимых для аутентификации / хранения пользователей в LDAP.
Предполагается, что вы переходите от обычной аутентификации passwd / shadow, но она также подходит для людей, которые делают это с нуля.
Требования
Введение
Мы хотим добиться того, чтобы наши пользователи сохранялись в LDAP, аутентифицировались через LDAP (direct или pam) и чтобы вы имели некоторый инструмент для управления этими всем понятным для человека способом.
Таким образом, мы можем использовать все программное обеспечение, поддерживающее LDAP, или возвратимся к модулю LDAP PAM, который будет действовать как шлюз PAM-> LDAP.
Более подробную информацию о идее LDAP можно найти в Википедии: LDAP wikipedia
Настройка OpenLDAP
OpenLDAP состоит из slapd и slurpd-демона.
Этот способ охватывает один сервер LDAP без репликации, поэтому мы сосредоточимся только на slapd.
Я также предполагаю, что вы установили и инициализировали установку OpenLDAP (в зависимости от системы / распространения).
Если да, перейдем к части конфигурации.
В моей системе (Gentoo) конфигурация OpenLDAP хранится в /etc/openldap, нас интересует файл /etc/openldap/slapd.conf.
Но сначала мы должны сгенерировать пароль для администратора LDAP, чтобы поместить его в файл конфигурации:
slappasswd -h {md5}
Конфигурация выглядит так:
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema allow bind_v2 pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args modulepath /usr/lib/openldap/openldap access to attrs=userPassword by dn="uid=root,ou=People,dc=domain,dc=com" write by dn="cn=Manager,dc=domain,dc=com" write by anonymous auth by self write by * none access to dn.base="" by * read access to * by dn="cn=Manager,dc=domain,dc=com" write by * read database bdb suffix "dc=domain,dc=com" rootdn "cn=Manager,dc=domain,dc=com" rootpw {MD5}Tk1sMytv5ipjr+Vhcf03JQ== directory /var/lib/openldap-data index objectClass eq
Не забудьте изменить суффикс и пути.
Это варианты с некоторыми базовыми ACL, необходимыми для изменения паролей пользователем.
Если вам нужна дополнительная функциональность, прочитайте руководство по OpenLDAP.
Теперь, когда у нас есть надлежащая конфигурация для slapd, мы можем запустить демон:
service slapd start
Пожалуйста, не забудьте сделать что-то подобное в файле конфигурации, отвечающем за аргументы, переданные slapd (путь должен указывать на slapd.sock):
OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"
Теперь мы можем проверить, работает ли openldap и работает ли он правильно.
У нас еще нет данных в каталоге, но мы можем попытаться связать их как cn = Manager, dc = domain, dc = com.
Когда вас попросят ввести пароль, вы должны использовать тот, который вы создали (конечно, его текстовая версия :):
ldapsearch -D "cn=Manager,dc=domain,dc=com" -W
Миграция / добавление данных в каталог
Теперь, когда у нас есть работающий сервер LDAP, мы должны заполнить его данными, либо создать, либо перенести записи.
Я покажу вам, как переносить существующие записи из обычных /etc/ passwd, /etc/shadow, /etc/groups
Первый шаг – настроить mogrationtools.
Конфигурационный файл в Gentoo находится в /usr/share/migrationtools/migrate_common.ph.
Как правило, вам нужно изменить только эти моменты:
$DEFAULT_BASE = "dc=domain,dc=com"; $EXTENDED_SCHEMA = 1;
Теперь вы готовы перенести данные (на самом деле это работает даже без команды export):
export ETC_SHADOW=/etc/shadow
./migrate_base.pl > /tmp/base.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
Теперь у нас есть данные в формате, понятном серверу LDAP.
Пожалуйста, откройте один из файлов с текстовым редактором, чтобы привыкнуть к синтаксису.
После этого мы можем добавить данные из ldifs.
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldif
Вы можете попробовать найти некоторые данные:
ldapsearch uid=foouser
Конфигурация клиента
Под клиентом я имею в виду машину, которая подключается к LDAP-серверу для получения пользователей и авторизации.
Это может быть и машина, на которой работает LDAP-сервер.
В обоих случаях мы должны отредактировать три файла: /etc/ldap.conf, /etc/nsswitch.conf и /etc/pam.d/system-auth
Начнем с ldap.conf, клиента ldap:
BASE dc=domain, dc=com scope sub suffix "dc=domain,dc=com" ## when you want to change user's password by root rootbinddn cn=Manager,dc=domain,dc=com ## there are needed when your ldap dies timelimit 5 bind_timelimit 5 uri ldap://ldap.domain.com/ pam_password exop ldap_version 3 pam_filter objectclass=posixAccount pam_login_attribute uid pam_member_attribute memberuid nss_base_passwd ou=Computers,dc=cognifide,dc=pl nss_base_passwd ou=People,dc=cognifide,dc=pl nss_base_shadow ou=People,dc=cognifide,dc=pl nss_base_group ou=Group,dc=cognifide,dc=pl nss_base_hosts ou=Hosts,dc=cognifide,dc=pl
Теперь пришло время для nsswitch.conf и pam
Добавьте в nsswitch.conf:
passwd: files ldap shadow: files ldap group: files ldap
И измените system-auth (или все, что у вас есть, например login, sshd и т. д.):
auth required pam_env.so auth sufficient pam_unix.so likeauth nullok auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account sufficient pam_unix.so account sufficient pam_ldap.so account required pam_ldap.so password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 password sufficient pam_unix.so nullok md5 shadow use_authtok password sufficient pam_ldap.so use_first_pass password required pam_deny.so session required pam_limits.so session required pam_unix.so session optional pam_ldap.so
Время проверить его. Лучший инструмент для этого – хороший старый getent.
Выберите пользователя из вашей системы и введите:
getent passwd | grep foouser
Вы должны получить результат дважды, если nss_ldap работает нормально.
По часть pam , работоспособность может быть протестирована путем удаления пользователя из /etc/passwd и попытки входа в систему через ssh.
Apache mod_auth_ldap
Чтобы получить авторизацию LDAP в apache, вам необходимо загрузить модуль mod_auth_ldap
LoadModule mm_auth_ldap_module modules/mod_auth_ldap.so
Теперь достаточно изменить .htaccess:
AuthName "Restricted" AuthType Basic AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid AuthLDAPBindDN "cn=Manager,dc=domain,dc=com" AuthLDAPBindPassword "your_secret_secret_password_to_ldap_admin" require valid-user
Обратите внимание, что этот метод можно также использовать для авторизации Subversion WebDAV
Средства администрирования LDAP
Есть несколько инструментов, которые я рекомендую использовать для администрирования сервера OpenLDAP
- phpldapadmin – веб-инструмент
- ldapvi – vim просмотр
- PADL migrationtools – средства миграции
- IDEALX sambaldap tools – инструменты samba LDAP
Другие приложения, поддерживающие ldap
- Postfix
- Courier IMAP
- jabberd
- eGroupware