Поиск по сайту:

Аутентификация LDAP в Linux


На этой странице

  1. Требования
  2. Введение
  3. Настройка OpenLDAP
  4. Перенос/добавление данных в каталог
  5. Конфигурация клиента
  6. Apache mod_auth_ldap
  7. Инструменты администрирования для LDAP
  8. Другие приложения, поддерживающие ldap
  9. Сводка

Это руководство покажет вам, как хранить ваших пользователей в LDAP и аутентифицировать некоторые службы на нем. Я не буду показывать, как устанавливать определенные пакеты, так как это зависит от дистрибутива/системы. Я сосредоточусь на «чистой» конфигурации всех компонентов, необходимых для аутентификации/хранения пользователей LDAP. Howto каким-то образом предполагает, что вы переходите с обычной аутентификации passwd/shadow, но он также подходит для людей, которые делают это с нуля.

Требования

  • Открытый LDAP
  • pam_ldap
  • nss_ldap
  • Инструменты миграции PADL

Введение

Мы хотим добиться того, чтобы наши пользователи хранились в LDAP, аутентифицировались по LDAP (direct или pam) и имели какой-то инструмент для управления этим понятным для человека способом.

Таким образом, мы можем использовать все программное обеспечение, поддерживающее LDAP, или использовать резервный модуль PAM LDAP, который будет действовать как шлюз 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.

Первый шаг — настроить инструменты миграции в соответствии с вашими потребностями. Файл конфигурации в Gentoo находится в /usr/share/migrationtools/migrate_common.ph.

Как правило, вам нужно изменить только это:

$DEFAULT_BASE = "dc=domain,dc=com";
$EXTENDED_SCHEMA = 1;

Теперь вы готовы к миграции данных (на самом деле это работает даже без команды экспорта):

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, клиента ldaps:

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

И измените системную аутентификацию (или что-то еще, например, логин, 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

Обратите внимание, что этот метод также можно использовать для авторизации подрывной деятельности WebDAV.

Инструменты администрирования для LDAP

Есть несколько инструментов, которые я рекомендую использовать для администрирования сервера OpenLDAP.

  • phpldapadmin — веб-инструмент
  • ldapvi — просмотр vim
  • Инструменты миграции PADL — инструменты миграции
  • Инструменты IDEALX sambaldap — инструменты LDAP samba

Другие приложения, поддерживающие ldap

    • Постфикс
    • Курьер IMAP
    • бред
    • программное обеспечение электронной групповой работы

    Резюме

    Если у кого-то есть, что добавить, пожалуйста. Я знаю, что конфигурация может быть не идеальной.