LDAP for Jenkins2

Материал из naname.com.ua
Перейти к навигацииПерейти к поиску

LDAP

Установка и базовая конфигурация

sudo apt-get update
sudo apt-get install slapd ldap-utils phpldapadmin mc vim strace tcpdump tcpflow 

Эта команда установить

  • OpenLDAP сервер
  • Консольный клиент для OpenLDAP
  • phpLDAPadmin для того что бы более удобно управлять записями в LDAP

Пароль при установке - r00tme
Если требуется перенастроить - то

dpkg-reconfigure slapd

В отличие от CentOS, под Ubuntu OpenLDAP частично сконфигурирован. Посмотреть настройки можно командой slapcat

slapcat
dn: dc=nodomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: nodomain
dc: nodomain
structuralObjectClass: organization
entryUUID: 04ec921c-3941-1036-8b2b-39dffbd1cf0d
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20161107142003Z
entryCSN: 20161107142003.564562Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20161107142003Z

dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ZFUzZk1jRHVXT2RJSVZGY0lveWloK01mRVFQNTNqSzM=
structuralObjectClass: organizationalRole
entryUUID: 04ed4aea-3941-1036-8b2c-39dffbd1cf0d
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20161107142003Z
entryCSN: 20161107142003.569291Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20161107142003Z

Очевидно, что DC=nodomain это не совсем то что нужно

Запустить реконфигурацию, настроить домен cicd

slapcat
dn: dc=cicd
objectClass: top
objectClass: dcObject
objectClass: organization

Проверка подключения:

ldapsearch -h 10.20.0.100 -D "cn=admin,dc=cicd" -w r00tme -b "dc=cicd"
  • -h 10.20.0.100 - хост к которому подключаться
  • -D "cn=admin,dc=cicd" - Bind DN - "логин"
  • -w r00tme - пароль
  • -b "dc=cicd" - base for search, точка в дереве откуда начинать поиск.


PHP LDAP ADMIN

Установить следующие значения в файле /usr/share/phpldapadmin/config/config.php

  • Отключить предупреждения в темплейтах
$config->custom->appearance['hide_template_warning'] = true;
  • base - точка в дереве от котоой будет идти поиск объектов
$servers->setValue('server','base',array('dc=cicd'));
  • name - отображаемое имя сервера
$servers->setValue('server','name','CICD LDAP Server');
  • Фактический хост куда будет подключаться php ldap client (может быть 127.0.0.1 если все настраивается в пределах одного хоста)
$servers->setValue('server','host','10.20.0.100');
  • Логин по-умолчанию
$servers->setValue('login','bind_id','cn=admin,dc=cicd');

Создание объектов в LDAP

memberOF

LDAP по-умолчанию не включает поддержку атрибута memberOf

Вообще-то функционал OpenLDAP расширяется с помошью расширений, которые необходимо подключать. случае - это расширение memberOf

  • конфигурация сервера хранится в нем самом в cn=config
  • проверить текущую конфигурацию можно командой
ldapsearch -Q -Y EXTERNAL -H ldapi:///  -b cn=config
dn: cn=module,cn=config
changetype: add
cn: module
objectClass: olcModuleList
olcModuleLoad: memberof
olcModulePath: /usr/lib/ldap

dn: olcOverlay={0}memberof,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Управлять конфигурацией (без дополнительной настройки) можно только используя -Y EXTERNAL -H ldapi:///

ldapmodify -Q -Y EXTERNAL -H ldapi:///   <  004_enableMemberof.ldif
adding new entry "cn=module,cn=config"

adding new entry "olcOverlay={0}memberof,olcDatabase={1}hdb,cn=config"

Org Unit

cat 001_org_unit.ldif
dn: ou=cicd,dc=cicd
changetype: add
ou: CICD
objectClass: organizationalUnit
description: CICD OU for Jenkis/Git groups and permissions
ldapmodify -h 10.20.0.100 -D "cn=admin,dc=cicd"   -w "r00tme" <  001_org_unit.ldif
adding new entry "ou=cicd,dc=cicd"

Groups

Admin group

dn: cn=cicd  administrators,ou=cicd,dc=cicd
changetype: add
cn: cicd_administrators
objectClass: posixGroup
gidNumber: 5000
description: CI/CD  administrators
ldapmodify -h 10.20.0.100 -D "cn=admin,dc=cicd"   -w "r00tme" <  0002_cicd_admin.ldif
adding new entry "cn=cicd  administrators,ou=cicd,dc=cicd"

Users group

dn: cn=cicd  users,ou=cicd,dc=cicd
changetype: add
cn: cicd_users
objectClass: posixGroup
gidNumber: 6000
description: CI/CD  users

root@jenkins:~/ldap_objects# ldapmodify -h 10.20.0.100 -D "cn=admin,dc=cicd"   -w "r00tme" <  0002_cicd_users.ldif
adding new entry "cn=cicd  users,ou=cicd,dc=cicd"

Users

cat 003_admin_user.ldif
dn: cn=CICD Admin,ou=cicd,dc=cicd
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uidNumber: 10000
gidNumber: 5000
cn: CICD Admin
ou: cicd
uid: admin
givenName: ADMIN
sn: ADMIN
userPassword: {SSHA}5oLdx/TJdGrRb3Jaz/9JWuFsj59pPoPt
gecos: Admin Admin
mail: email@domain.tld
homeDirectory: /var/null
memberOf: cn=cicd  administrators,ou=cicd,dc=cicd
cat 003_max_user.ldif
dn: cn=Max Mazur,ou=cicd,dc=cicd
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uidNumber: 10000
gidNumber: 6000
cn: Max Mazur
ou: cicd
uid: mmaxur
givenName: Max
sn: Mazur
userPassword: {SSHA}5oLdx/TJdGrRb3Jaz/9JWuFsj59pPoPt
gecos: Max Mazur
mail: sirmax123@gmail.com
homeDirectory: /var/null
memberOf: cn=cicd  users,ou=cicd,dc=cicd
cat 003_test_user.ldif
dn: cn=TEST TEST,ou=cicd,dc=cicd
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uidNumber: 10000
gidNumber: 6000
cn: Test Test
ou: cicd
uid: test
givenName: Test
sn: Test
userPassword: {SSHA}5oLdx/TJdGrRb3Jaz/9JWuFsj59pPoPt
gecos: Max Mazur
mail: test@test.tld
homeDirectory: /var/null
memberOf: cn=cicd  users,ou=cicd,dc=cicd

Запрос для проверки входит ли пользователь в группу выглядит так:

ldapsearch -h 10.20.0.100 -D "cn=admin,dc=cicd"   -w "r00tme"  -b ou=cicd,dc=cicd   memberOf='cn=cicd  administrators,ou=cicd,dc=cicd'
ldapsearch -h 10.20.0.100 -D "cn=admin,dc=cicd"   -w "r00tme"  -b ou=cicd,dc=cicd   memberOf='cn=cicd  users,ou=cicd,dc=cicd'