| |
Где работаем: ldap-srv
На данном этапе у нас есть пустой каталог OpenLDAP. Мы можем проверить это, просто попытавшись извлечь из него информацию:
$ ldapsearch -xZZLLLWD cn=admin,dc=example,dc=com -b dc=example,dc=com Enter LDAP Password: No such object (32)
Если Вам интересно, коды ошибок LDAP описаны в RFC 4511, в приложении A Результирующие коды LDAP. В случае ошибки 32 сервер информирует нас, что запрашиваемый объект dc=example,dc=com
не найден. Но такую же ошибку можно получить, если ACL сервера запрещают доступ.
Для работы нашего каталога понадобится создать корневой суффикс базы данных и добавить в него две организационных единицы (Organizational Unit, OU) для хранения пользователей и групп. Создадим LDIF-файл 4-users+groups.ldif, в котором опишем эту информацию:
dn: dc=example,dc=com
dc: example
objectClass: top
objectClass: domain
dn: ou=users,dc=example,dc=com
ou: Users
objectClass: top
objectClass: organizationalUnit
description: Central location for UNIX users
dn: ou=groups,dc=example,dc=com
ou: Groups
objectClass: top
objectClass: organizationalUnit
description: Central location for UNIX groups
Добавим эту информацию в наш каталог:
$ ldapmodify -a -xZZWD cn=admin,dc=example,dc=com -f 4-users+groups.ldif Enter LDAP Password: adding new entry "dc=example,dc=com" adding new entry "ou=users,dc=example,dc=com" adding new entry "ou=groups,dc=example,dc=com"
Можем удостовериться в том, что информация добавлена:
$ ldapsearch -xZZLLLWD cn=admin,dc=example,dc=com Enter LDAP Password: dn: dc=example,dc=com dc: example objectClass: top objectClass: domain dn: ou=users,dc=example,dc=com ou: Users objectClass: top objectClass: organizationalUnit description: Central location for UNIX users dn: ou=groups,dc=example,dc=com ou: Groups objectClass: top objectClass: organizationalUnit description: Central location for UNIX groups
Теперь давайте добавим несколько групп:
Этот список не окончательный и может быть дополнен, чтобы соответствовать нуждам Вашей организации.
Для добавления групп в каталог создадим новый LDIF, 4-groups.ldif:
dn: cn=sysadmin,ou=groups,dc=example,dc=com
cn: sysadmin
objectClass: top
objectClass: posixGroup
gidNumber: 1100
description: UNIX systems administrators
dn: cn=nssproxy,ou=groups,dc=example,dc=com
cn: nssproxy
objectClass: top
objectClass: posixGroup
gidNumber: 801
description: Network Service Switch Proxy
dn: cn=test.group,ou=groups,dc=example,dc=com
cn: test.group
objectClass: top
objectClass: posixGroup
gidNumber: 1101
description: Test Group
Загрузим LDIF в наш каталог:
$ ldapmodify -a -xZZWD cn=admin,dc=example,dc=com -f 4-groups.ldif Enter LDAP Password: adding new entry "cn=sysadmin,ou=groups,dc=example,dc=com" adding new entry "cn=nssproxy,ou=groups,dc=example,dc=com" adding new entry "cn=test.group,ou=groups,dc=example,dc=com"
Настало время создать несколько пользователей. И вновь отмечаем, что список может быть расширен в соответствии с потребностями Вашей организации:
Создадим LDIF-файл 4-users.ldif для добавления пользователей. Пока не беспокойтесь о паролях, мы сейчас к ним вернёмся:
dn: cn=pablo,ou=users,dc=example,dc=com
uid: pablo
gecos: Pablo Sdoba
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
userPassword: {SSHA}RsAMqOI3647qg1gAZF3x2BKBnp0sEVfa
shadowLastChange: 15140
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1100
gidNumber: 1100
homeDirectory: /home/pablo
dn: cn=nssproxy,ou=users,dc=example,dc=com
uid: nssproxy
gecos: Network Service Switch Proxy User
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
userPassword: {SSHA}RsAMqOI3647qg1gAZF3x2BKBnp0sEVfa
shadowLastChange: 15140
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/false
uidNumber: 801
gidNumber: 801
homeDirectory: /home/nssproxy
dn: cn=test.user,ou=users,dc=example,dc=com
uid: test.user
gecos: Test User
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
userPassword: {SSHA}RsAMqOI3647qg1gAZF3x2BKBnp0sEVfa
shadowLastChange: 15140
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1101
gidNumber: 1101
homeDirectory: /home/test.user
Пользователи связаны с группами через атрибут gidNumber
. Для того, чтобы добавить в группу других пользователей, в запись группы необходимо добавить атрибут memberUID
, перечислив в нём UID пользователей через запятую. Например, это может выглядеть вот так:
dn: cn=sysadmin,ou=groups,dc=example,dc=com
cn: sysadmin
objectClass: top
objectClass: posixGroup
gidNumber: 1100
description: UNIX systems administrators
memberUID: 801,1101
Добавьте пользователей в каталог:
$ ldapmodify -a -xZZWD cn=admin,dc=example,dc=com -f 4-users.ldif Enter LDAP Password: adding new entry "cn=pablo,ou=users,dc=example,dc=com" adding new entry "cn=nssproxy,ou=users,dc=example,dc=com" adding new entry "cn=test.user,ou=users,dc=example,dc=com"
Теперь установим пароли для пользователей. Повторите нижеследующую команду для всех пользователей. Обратите внимание, что сначала Вам будет предложено дважды ввести пароль изменяемой записи, а затем — пароль записи cn=admin,dc=example,dc=com
:
$ ldappasswd -xZZWD cn=admin,dc=example,dc=com -S cn=nssproxy,ou=users,dc=example,dc=com New password: Re-enter new password: Enter LDAP Password:
Если заглянуть в журнал /var/log/slapd.log, то можно увидеть строки, говорящие об изменении записи:
slapd[5319]: conn=1022 op=1 PASSMOD id="cn=nssproxy,ou=users,dc=example,dc=com" new slapd[5319]: conn=1022 op=1 RESULT oid= err=0 text=
Для того, чтобы пользователь nssproxy имел доступ к информации нашего каталога, необходимо поправить ACL базы данных с пользователями и группами. Но какое у этой базы DN? Давайте вспомним:
$ ldapsearch -xZZLLLWD cn=admin,dc=example,dc=com -b cn=config dn | grep -i database Enter LDAP Password: dn: olcDatabase={-1}frontend,cn=config dn: olcDatabase={0}config,cn=config dn: olcDatabase={1}mdb,cn=config dn: olcDatabase={2}monitor,cn=config
В разделе 2.6 мы дали нашей учетной записи администратора очень широкие права, поэтому он может заглянуть в конфигурацию cn=config
.
Теперь мы знаем, что требуется отредактировать ACL записи olcDatabase={1}mdb,cn=config
.
Давайте проверим, какие ACL настроены для данного DN (вывод отформатирован):
$ ldapsearch -xZZLLLWD cn=admin,dc=example,dc=com -b olcDatabase={1}mdb,cn=config olcAccess Enter LDAP Password: dn: olcDatabase={1}mdb,cn=config olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external ,cn=auth" manage by * break olcAccess: {1}to attrs=userPassword by self write by anonymous auth olcAccess: {2}to * by self read
Мы должны немного изменить ACL, чтобы предоставить доступ пользователю nssproxy на чтение атрибутов учётных записей. Для этого создадим LDIF-файл 4-nssproxy.acl.ldif:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external ,cn=auth" manage
by * break
-
add: olcAccess
olcAccess: {1}to attrs=userPassword
by self write
by anonymous auth
-
add: olcAccess
olcAccess: {2}to *
by self read
by dn.base="cn=nssproxy,ou=users,dc=example,dc=com" read
Загрузим LDIF с изменениями:
$ ldapmodify -xZZWD cn=admin,dc=example,dc=com -f 4-nssproxy.acl.ldif Enter LDAP Password: modifying entry "olcDatabase={1}mdb,cn=config"
Проверим, можем ли мы просматривать информацию в каталоге от имени пользователя nssproxy. Для этого выполним запрос с использованием его учётных данных. Результатом запроса должно быть всё DIT (Directory Information Tree). Опустим его, для краткости:
$ ldapsearch -xZZLLLWD cn=nssproxy,ou=users,dc=example,dc=com "(objectClass=*)" Enter LDAP Password: dn: dc=example,dc=com ...
Убедитесь, что другие учётные записи пользователей не имеют доступа к DIT:
$ ldapsearch -xZZLLLWD cn=pablo,ou=users,dc=example,dc=com "(objectClass=*)" Enter LDAP Password: No such object (32)
База данных нашего сервера каталогов по-немногу заполняется объектами. С этого момента стоит подумать о выборе LDAP-браузера. Как правило, это приложение, которое позволяет наглядно отображать записи в базе данных и работать с ними. Лично у меня самый любимый — ldapvi. Но он консольный и имеет объективные недостатки. Попробуйте Apache Directory Studio. Он имеет нормальный GUI, бесплатен и поддерживает множество удобных функций для управления сервером каталогов. Этот браузер может быть установлен как отдельно, так и в качестве компонента программного средства Eclipse. Должен предупредить, при использовании Apache Directory Studio у меня возникали проблемы с доступом к серверу каталогов. Единственно разумное объяснение, которое я нашёл — ориентированность этого программного средства на использование с Apache Directory Server (ApacheDS). Так же неплохой вариант для работы из Windows — LDAP Admin.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |