LDAP for Jenkins2: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 2: | Строка 2: | ||
[[Категория:CICD]] |
[[Категория:CICD]] |
||
[[Категория:LDAP]] |
[[Категория:LDAP]] |
||
+ | [[Категория:CICD_in_one_day]] |
||
− | |||
+ | =LDAP= |
||
+ | ==Установка и базовая конфигурация== |
||
<PRE> |
<PRE> |
||
sudo apt-get update |
sudo apt-get update |
||
Строка 22: | Строка 24: | ||
slapcat |
slapcat |
||
</PRE> |
</PRE> |
||
+ | <PRE> |
||
dn: dc=nodomain |
dn: dc=nodomain |
||
objectClass: top |
objectClass: top |
||
Строка 56: | Строка 59: | ||
<PRE> |
<PRE> |
||
slapcat |
slapcat |
||
+ | </PRE> |
||
+ | <PRE> |
||
dn: dc=cicd |
dn: dc=cicd |
||
objectClass: top |
objectClass: top |
||
objectClass: dcObject |
objectClass: dcObject |
||
objectClass: organization |
objectClass: organization |
||
+ | </PRE> |
||
+ | |||
+ | Проверка подключения: |
||
+ | <PRE> |
||
+ | ldapsearch -h 10.20.0.100 -D "cn=admin,dc=cicd" -w r00tme -b "dc=cicd" |
||
+ | </PRE> |
||
+ | * -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 |
||
+ | * Отключить предупреждения в темплейтах |
||
+ | <PRE> |
||
+ | $config->custom->appearance['hide_template_warning'] = true; |
||
+ | </PRE> |
||
+ | * base - точка в дереве от котоой будет идти поиск объектов |
||
+ | <PRE> |
||
+ | $servers->setValue('server','base',array('dc=cicd')); |
||
+ | </PRE> |
||
+ | * name - отображаемое имя сервера |
||
+ | <PRE> |
||
+ | $servers->setValue('server','name','CICD LDAP Server'); |
||
+ | </PRE> |
||
+ | * Фактический хост куда будет подключаться php ldap client (может быть 127.0.0.1 если все настраивается в пределах одного хоста) |
||
+ | <PRE> |
||
+ | $servers->setValue('server','host','10.20.0.100'); |
||
+ | </PRE> |
||
+ | * Логин по-умолчанию |
||
+ | <PRE> |
||
+ | $servers->setValue('login','bind_id','cn=admin,dc=cicd'); |
||
+ | </PRE> |
||
+ | ==Создание объектов в LDAP== |
||
+ | ==memberOF== |
||
+ | LDAP по-умолчанию не включает поддержку атрибута memberOf |
||
+ | |||
+ | Вообще-то функционал OpenLDAP расширяется с помошью расширений, которые необходимо подключать. случае - это расширение memberOf |
||
+ | * конфигурация сервера хранится в нем самом в <B>cn=config</B> |
||
+ | * проверить текущую конфигурацию можно командой |
||
+ | <PRE> |
||
+ | ldapsearch -Q -Y EXTERNAL -H ldapi:/// -b cn=config |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | Управлять конфигурацией (без дополнительной настройки) можно только используя |
||
+ | <B> -Y EXTERNAL -H ldapi:/// </B> |
||
+ | |||
+ | <PRE> |
||
+ | 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" |
||
+ | </PRE> |
||
+ | |||
+ | ===Org Unit=== |
||
+ | <PRE> |
||
+ | cat 001_org_unit.ldif |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | dn: ou=cicd,dc=cicd |
||
+ | changetype: add |
||
+ | ou: CICD |
||
+ | objectClass: organizationalUnit |
||
+ | description: CICD OU for Jenkis/Git groups and permissions |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | ldapmodify -h 10.20.0.100 -D "cn=admin,dc=cicd" -w "r00tme" < 001_org_unit.ldif |
||
+ | adding new entry "ou=cicd,dc=cicd" |
||
+ | </PRE> |
||
+ | ===Groups=== |
||
+ | ====Admin group ==== |
||
+ | |||
+ | <PRE> |
||
+ | dn: cn=cicd administrators,ou=cicd,dc=cicd |
||
+ | changetype: add |
||
+ | cn: cicd_administrators |
||
+ | objectClass: posixGroup |
||
+ | gidNumber: 5000 |
||
+ | description: CI/CD administrators |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | 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" |
||
+ | </PRE> |
||
+ | ====Users group ==== |
||
+ | <PRE> |
||
+ | dn: cn=cicd users,ou=cicd,dc=cicd |
||
+ | changetype: add |
||
+ | cn: cicd_users |
||
+ | objectClass: posixGroup |
||
+ | gidNumber: 6000 |
||
+ | description: CI/CD users |
||
+ | |||
+ | </PRE> |
||
+ | <PRE> |
||
+ | 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" |
||
+ | </PRE> |
||
+ | ===Users=== |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | Запрос для проверки входит ли пользователь в группу выглядит так: |
||
+ | <PRE> |
||
+ | 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' |
||
</PRE> |
</PRE> |
Текущая версия на 13:43, 12 декабря 2016
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'