LDAP for Jenkins2
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'