LDAP Linux Auth: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 84: Строка 84:
   
 
Для работы создаем свой домен куда будем помещать все объекты.
 
Для работы создаем свой домен куда будем помещать все объекты.
  +
* domain
  +
<PRE>
  +
# domain.tld
  +
dn: dc=fuel_domain
  +
objectClass: top
  +
objectClass: dcObject
  +
objectClass: organization
  +
o: fuel_users
  +
</PRE>
  +
* domain_admin
  +
<PRE>
  +
# admin
  +
dn: cn=admin,dc=fuel_domain
  +
objectClass: simpleSecurityObject
  +
objectClass: organizationalRole
  +
cn: admin
  +
description: LDAP administrator
  +
userPassword: {SSHA}bxQpFzYmIkILSbDEL3cVl+nf03mdra/t
  +
</PRE>
  +
Пароль пользователя генерируется утилитой ldappasswd, в моем примере это 'r00tme'
  +
  +
Загрузить объекты:
  +
<PRE>
  +
ldapadd -Y EXTERNAL -H ldapi:/// < domain
  +
ldapadd -Y EXTERNAL -H ldapi:/// < domain_admin
  +
</PRE>
  +
  +
Проверить, подключившись с ново-созданным пользователем
  +
<PRE>
  +
ldapsearch -D "cn=admin,dc=fuel_domain" -w 'r00tme' -b 'dc=fuel_domain' '(objectclass=*)'
  +
</PRE>
  +
* -D - "логин"
  +
* -w - пароль
  +
* -b - base, ветка дерева в которой искать
  +
* '(objectclass=*)' - "что искать", в примере - "все"
  +
  +
Результат поиска:
  +
  +
<PRE>
  +
# 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
  +
</PRE>
   
 
=LDAP Configuration=
 
=LDAP Configuration=

Версия 17:30, 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
# domain.tld
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

LDAP Configuration

alias ldapsearch='ldapsearch -D "cn=admin,dc=fuel" -w r00tme'
alias ldapmodify='ldapmodify -D "cn=admin,dc=fuel" -w r00tme'

slapcat

dn: dc=fuel
objectClass: top
objectClass: dcObject
objectClass: organization
o: fuel_org
dc: fuel
structuralObjectClass: organization
entryUUID: 9e2a168a-a714-1035-9f39-4b3bdb074971
creatorsName: cn=admin,dc=fuel
createTimestamp: 20160505135423Z
entryCSN: 20160505135423.540761Z#000000#000#000000
modifiersName: cn=admin,dc=fuel
modifyTimestamp: 20160505135423Z

dn: cn=admin,dc=fuel
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9dndjQVZSdnlXWHhyT05LTmpZQVIyMlpmMnFocmg4eWs=
structuralObjectClass: organizationalRole
entryUUID: 9e2a9772-a714-1035-9f3a-4b3bdb074971
creatorsName: cn=admin,dc=fuel
createTimestamp: 20160505135423Z
entryCSN: 20160505135423.544062Z#000000#000#000000
modifiersName: cn=admin,dc=fuel
modifyTimestamp: 20160505135423Z

Добавить организацию Обратить внимание - dn: dc=example_organization,dc=fuel - порядок важен. dc В КОТОРЫЙ добавляется должен быть последним.

# example.org
dn: dc=example_organization,dc=fuel
dc: example_organization
o: Example Organization
objectClass: dcObject
objectClass: organization

Сокращения

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'
ldapadd < org
adding new entry "dc=example_organization,dc=fuel"


# Manager
dn: cn=Manager,dc=example_organization,dc=fuel
cn: Manager
description: LDAP administrator
objectClass: organizationalRole
objectClass: top
roleOccupant: dc=example_organization,dc=fuel

# 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


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

Пароль криптуется с помощью 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

PAM vs NSS

http://serverfault.com/questions/538383/understand-pam-and-nss

http://skeletor.org.ua/?p=464

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/