LDAP Linux Auth: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
Строка 195: | Строка 195: | ||
<PRE> |
<PRE> |
||
+ | # 04_customer_organization |
||
− | # example.org |
||
− | dn: dc=customer_organization,dc= |
+ | dn: dc=customer_organization,dc=fuel_domain |
dc: customer_organization |
dc: customer_organization |
||
o: Example Organization |
o: Example Organization |
||
Строка 202: | Строка 202: | ||
objectClass: organization |
objectClass: organization |
||
</PRE> |
</PRE> |
||
+ | Добавить организацию: |
||
− | |||
<PRE> |
<PRE> |
||
ldapadd < 04_customer_organization |
ldapadd < 04_customer_organization |
||
Строка 218: | Строка 218: | ||
+ | ==Manager== |
||
− | Сокращения |
||
⚫ | |||
− | alias ldapadd='ldapadd -D "cn=admin,dc=fuel" -w r00tme' |
||
− | alias ldapmodify='ldapmodify -D "cn=admin,dc=fuel" -w r00tme' |
||
− | alias ldapsearch='ldapsearch -D "cn=admin,dc=fuel" -w r00tme' |
||
⚫ | |||
− | |||
− | <PRE> |
||
− | ldapadd < org |
||
− | adding new entry "dc=example_organization,dc=fuel" |
||
− | </PRE> |
||
− | |||
− | |||
− | |||
<PRE> |
<PRE> |
||
# Manager |
# Manager |
||
Строка 240: | Строка 227: | ||
objectClass: top |
objectClass: top |
||
roleOccupant: dc=example_organization,dc=fuel |
roleOccupant: dc=example_organization,dc=fuel |
||
− | |||
</PRE> |
</PRE> |
||
+ | ==Organization Units People and Groups== |
||
<PRE> |
<PRE> |
||
# People |
# People |
||
Строка 249: | Строка 236: | ||
objectClass: top |
objectClass: top |
||
objectClass: organizationalUnit |
objectClass: organizationalUnit |
||
⚫ | |||
− | |||
⚫ | |||
# Groups |
# Groups |
||
dn: ou=Group,dc=example_organization,dc=fuel |
dn: ou=Group,dc=example_organization,dc=fuel |
||
Строка 258: | Строка 246: | ||
</PRE> |
</PRE> |
||
+ | ==Users== |
||
− | |||
<PRE> |
<PRE> |
||
dn: uid=sirmax,ou=People,dc=example_organization,dc=fuel |
dn: uid=sirmax,ou=People,dc=example_organization,dc=fuel |
||
Строка 283: | Строка 271: | ||
description: This is an example user |
description: This is an example user |
||
</PRE> |
</PRE> |
||
+ | |||
+ | =2= |
||
Пароль криптуется с помощью slappasswd |
Пароль криптуется с помощью slappasswd |
||
Версия 16:47, 15 мая 2016
1
getent passwd getent group
LDAP Server Installation
"Тихая" установка
DEBIAN_FRONTEND=noninteractive apt-get install slapd ldap-utils
Современные дистрибутивы OpenLDAP используют сам LDAP как хранилище конфигурации.
Посмотреть содержимое можно так:
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"
Создать отдельную базу данных для своих объектов.
Внимательно проверить права на директорию - она должна существовать и быть доступна серверу на запись (/var/lib/ldap_fuel_domain/)
dn: olcDatabase={2}hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {2}hdb olcDbDirectory: /var/lib/ldap_fuel_domain/ olcSuffix: dc=fuel_domain olcAccess: {0}to * by * write olcLastMod: TRUE olcRootDN: cn=admin,dc=fuel_domain olcRootPW: {SSHA}bxQpFzYmIkILSbDEL3cVl+nf03mdra/t olcDbCheckpoint: 512 30 olcDbConfig: {0}set_cachesize 0 2097152 0 olcDbConfig: {1}set_lk_max_objects 1500 olcDbConfig: {2}set_lk_max_locks 1500 olcDbConfig: {3}set_lk_max_lockers 1500 olcDbIndex: objectClass eq
Обратить внимание на
olcAccess: {0}to * by * write
Изначально я даю полный доступ всем на все, изменю его позже.
Создание: (подключение через -H ldapi:/// в установке по умолчанию доступно руту без пароля.
ldapadd -Y EXTERNAL -H ldapi:/// < database SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "olcDatabase={2}hdb,cn=config"
Если права на директорию неправильные ИЛИ не настроен apparmor возникает ошибка:
root@node-3:~/ldap# ldapadd -Y EXTERNAL -H ldapi:/// < database SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "olcDatabase={2}hdb,cn=config" ldap_add: Other (e.g., implementation specific) error (80) additional info: olcDbDirectory: value #0: invalid path: Permission denied
Исправить:
/etc/apparmor.d/usr.sbin.slapd ## /var/lib/ldap** rwk,
Для работы создаем свой домен куда будем помещать все объекты.
- domain
# fuel_domain dn: dc=fuel_domain objectClass: top objectClass: dcObject objectClass: organization o: fuel_users
- domain_admin
# admin dn: cn=admin,dc=fuel_domain objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword: {SSHA}bxQpFzYmIkILSbDEL3cVl+nf03mdra/t
Пароль пользователя генерируется утилитой ldappasswd, в моем примере это 'r00tme'
Загрузить объекты:
ldapadd -Y EXTERNAL -H ldapi:/// < domain ldapadd -Y EXTERNAL -H ldapi:/// < domain_admin
Проверить, подключившись с ново-созданным пользователем
ldapsearch -D "cn=admin,dc=fuel_domain" -w 'r00tme' -b 'dc=fuel_domain' '(objectclass=*)'
- -D - "логин"
- -w - пароль
- -b - base, ветка дерева в которой искать
- '(objectclass=*)' - "что искать", в примере - "все"
Результат поиска:
# extended LDIF # # LDAPv3 # base <dc=fuel_domain> with scope subtree # filter: (objectclass=*) # requesting: ALL # # fuel_domain dn: dc=fuel_domain objectClass: top objectClass: dcObject objectClass: organization o: fuel_users dc: fuel_domain # admin, fuel_domain dn: cn=admin,dc=fuel_domain objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: e1NTSEF9YnhRcEZ6WW1Ja0lMU2JERUwzY1ZsK25mMDNtZHJhL3Q= # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
Исправить права на базу:
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=fuel_domain" write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=admin,dc=fuel_domain" write by * read
ldapmodify -Y EXTERNAL -H ldapi:/// < 03_fix_permissions SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={2}hdb,cn=config"
Проверить права можно например скачав весь конфиг:
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" > all_config
LDAP Configuration
Aliases
Для простоты я создаю алиасы что бы не вводить пароль каждый раз
alias ldapsearch='ldapsearch -D "cn=admin,dc=fuel_domain" -w r00tme' alias ldapmodify='ldapmodify -D "cn=admin,dc=fuel_domain" -w r00tme' alias ldapadd='ldapadd -D "cn=admin,dc=fuel_domain" -w r00tme'
Organization
Добавить организацию Обратить внимание - dn: dc=customer_organization,dc=fuel_domain - порядок важен. dc В КОТОРЫЙ добавляется должен быть последним.
# 04_customer_organization dn: dc=customer_organization,dc=fuel_domain dc: customer_organization o: Example Organization objectClass: dcObject objectClass: organization
Добавить организацию:
ldapadd < 04_customer_organization
Результат:
ldapadd < 04_customer_organization adding new entry "dc=customer_organization,dc=fue_domain" ldap_add: Server is unwilling to perform (53) additional info: no global superior knowledge root@node-3:~/ldap# ldapadd < 04_customer_organization adding new entry "dc=customer_organization,dc=fuel_domain"
Manager
# Manager dn: cn=Manager,dc=example_organization,dc=fuel cn: Manager description: LDAP administrator objectClass: organizationalRole objectClass: top roleOccupant: dc=example_organization,dc=fuel
Organization Units People and Groups
# People dn: ou=People,dc=example_organization,dc=fuel ou: People objectClass: top objectClass: organizationalUnit
# Groups dn: ou=Group,dc=example_organization,dc=fuel ou: Group objectClass: top objectClass: organizationalUnit
Users
dn: uid=sirmax,ou=People,dc=example_organization,dc=fuel objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: sirmax cn: Max Mazur sn: Mazur givenName: Mazur title: test user telephoneNumber: +38 067 341 80 70 mobile: +38 067 341 80 70 postalAddress: AddressLine1$AddressLine2$AddressLine3 userPassword: {SSHA}pNCOaigx9LpjZp80yG4lDd/LPI2sZj7K labeledURI: http://wiki.sirmax.noname.com.ua/ loginShell: /bin/bash uidNumber: 9999 gidNumber: 9999 homeDirectory: /home/sirmax/ description: This is an example user
2
Пароль криптуется с помощью slappasswd
Проверить (\ - отключить алиас) (настройки безопасности - отдельная тема, http://www.openldap.org/doc/admin24/access-control.html )
\ldapsearch -x -b 'dc=example_organization,dc=fuel' '(objectclass=*)'
\ldapsearch -D "uid=sirmax,ou=People,dc=example_organization,dc=fuel" -w r00tme -b 'dc=example_organization,dc=fuel' '(uid=sirmax)'
dn: cn=sirmax,ou=Group,dc=example_organization,dc=fuel changetype: add cn: fuel users objectClass: posixGroup gidNumber: 9999 description: Fuel Users memberUid: sirmax
dn: cn=fuel_users,ou=Group,dc=example_organization,dc=fuel changetype: add cn: fuel users objectClass: posixGroup gidNumber: 109999 description: Fuel Users memberUid: sirmax
Ссылки
- ВВедение в PAM https://www.ibm.com/developerworks/ru/library/l-pam/
PAM
PAM vs NSS
http://serverfault.com/questions/538383/understand-pam-and-nss
http://pro-ldap.ru/tr/zytrax/ch6/slapd-config.html
https://wiki.archlinux.org/index.php/LDAP_authentication
RUS
http://www.bog.pp.ru/work/LDAP.html
http://pro-ldap.ru/tr/zytrax/ch6/slapd-config.html
http://xgu.ru/wiki/man:ldapmodify
https://rtfm.co.ua/openldap-migraciya-s-slapd-conf-na-cnconfig-olc/