Установка и настройка сервера
Для начала установим пакет OpenLDAP-сервера:
# yum install openldap-servers
Демон OpenLDAP называется slapd. Сконфигурируем его. Но сначала надо внести некоторые изменения в конфигурацию rsyslog и iptables:
В /etc/rsyslog.conf нужно добавить строчку:
local4.* /var/log/ldap
А в /etc/sysconfig/iptables такую:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT
После чего перезагрузить сервисы:
# /sbin/service rsyslog restart
# /sbin/service iptables restart
Начиная с RedHat 6 OpenLDAP использует т.н. dynamic config: вся конфигурация хранится в формате LDIF в директории /etc/openldap/slapd.d Удалим эту директорию, т.к. мы будем использовать текстовый конфигурационный файл:
# rm -r /etc/openldap/slapd.d
Создадим конфигурационный файл /etc/openldap/slapd.conf:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
pidfile /var/run/openldap/slapd.pid
access to attrs=userPassword
by self write by anonymous auth
by dn.base="cn=root,dc=tdc" write
by dn.exact="cn=proxyuser,ou=role,dc=tdc" read
by * read
access to *
by self write
by dn.base="cn=root,dc=tdc" write
by * read
database bdb
suffix "dc=tdc"
rootdn "cn=root,dc=tdc"
rootpw {SSHA}tWdDKXtLj+HQma3STSZ8kjZNIE5+WxHg
directory /var/lib/ldap
loglevel 128
Директивы include нужны для подключения схем каталогов LDAP - без них slapd не сможет даже прочитать строчку dc=tdc. Директива suffix определяет суффикс всех DN, обслуживаемых данным сервером, как правило это сетевой домен в форме dc=example,dc=com (в моем случае это tdc). rootdn - это имя сущности, представляющей администратора сервера, ее же пароль задается директивой rootpw. Создать пароль для директивы rootpw можно с помощью команды slappasswd. И наконец, database и directory задают бек-энд базы данных и расположения файлов с данными. В нашем случае это /var/lib/ldap - домашняя директория пользователя LDAP.
Теперь можно запустить slapd:
# /sbin/service slapd start
Создаем пользователей и группы
Теперь можно создать пользователя и группу для него. Но сначала потребуется описать некоторые каталоги ldap: корневой объект dc и организационные элементы (organizationalUnit) people для пользователей и groups для групп. Кроме этого нам потребуется специальная роль proxyuser для того, чтобы ее могли использовать клиенты pam_ldap. В данном примере мы создадим пользователя ogsadm и группу ogsusers. Опишем их записи в формате LDIF и сохраним в файле /tmp/ogsadm.ldap:
dn: dc=tdc
dc: tdc
description: Root LDAP entry for tdc
objectClass: dcObject
objectClass: organizationalUnit
ou: rootobject
dn: ou=people,dc=tdc
ou: people
description: All people in organisation
objectClass: organizationalUnit
dn: ou=groups,dc=tdc
ou: groups
description: All groups in organisation
objectClass: organizationalUnit
dn: cn=ogsusers,ou=groups,dc=tdc
cn: ogsusers
objectClass: top
objectClass: posixGroup
gidNumber: 300
# User account
dn: uid=ogsadm,ou=people,dc=tdc
cn: ogsadm
givenName: ogsadm
sn: OGS Administrator
uid: ogsadm
uidNumber: 300
gidNumber: 300
homeDirectory: /grid/ogsadm
mail: ogsadm@mt-mercury.tdc
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
loginShell: /bin/bash
userPassword: {CRYPT}*
dn: ou=role,dc=tdc
objectclass: organizationalUnit
ou: role
dn: cn=proxyuser,ou=role,dc=tdc
cn: proxyuser
objectclass: top
objectclass: person
objectclass: posixAccount
objectclass: shadowAccount
uid: proxyuser
uidNumber: 64001
gidNumber: 55
homeDirectory: /home/proxyuser
loginShell: /sbin/nologin
userPassword:
sn: proxyuser
description: Account for read-only access
После этого вызовем ldapadd чтобы добавить эти записи:
# ldapadd -D "cn=root,dc=tdc" -W -x -f /tmp/ogsadm.ldap
Если в процессе конфигурации возникла ошибка, то нужно использовать ldapmodify например так:
# ldapmodify -D "cn=root,dc=tdc" -W -x
Enter LDAP Password:
dn: uid=ogsadm,ou=people,dc=tdc
changetype: modify
replace: cn
cn: ogsadm
-
<CR>
modifying entry "uid=ogsadm,ou=people,dc=tdc"
^C
Также нужно установить пароль
для роли proxyuser:
# ldappasswd -D "cn=root,dc=tdc" -W -s proxypassword -x cn=proxyuser,ou=role,dc=tdc
Настройка клиентов
Установим openldap-клиент:
# yum install openldap-clients nss-pam-ldapd
В RedHat конфигурацию LDAP можно выполнить через графическую утилиту system-config-authentication или посредством команды authconfig. Во втором случае команда будет выглядеть следующим образом:
# authconfig --enableldap --enableldapauth --ldapserver=ldap://mt-mercury.tdc \
--ldapbasedn="dc=tdc" --update
Здесь ldapbasedn - путь до организационного элемента, хранящего пользовательские записи, а ldapserver - URL до ldap-сервера. Задать binddn и bindpw для pam_ldap нужно отдельно. Достаточно просто дописать следующие строчки в конфиг /etc/pam_ldap.conf:
binddn cn=proxyuser,ou=role,dc=tdc
bindpw proxypassword
После этого проверим, появился ли у нас пользователь ogsadm:
# getent passwd ogsadm
ogsadm:x:300:300:ogsadm:/grid/ogsadm:/bin/bash
Также можно попробовать залогиниться через ssh. Овсянка готова!
В моем случае uid пользователя был 300, тогда как RHEL считает, что пользовательские UID'ы начинаются с 500, что видно в файлах /etc/pam.d/system-auth и /etc/pam.d/password-auth