LDAP for Jenkins2: различия между версиями
Sirmax (обсуждение | вклад) (Новая страница: «Категория:Linux Категория:CICD Категория:LDAP <PRE> sudo apt-get update sudo apt-get install slapd ldap-utils phpldapadmin…») |
Sirmax (обсуждение | вклад) |
||
| (не показано 13 промежуточных версий этого же участника) | |||
| Строка 2: | Строка 2: | ||
[[Категория:CICD]] |
[[Категория:CICD]] |
||
[[Категория:LDAP]] |
[[Категория:LDAP]] |
||
| + | [[Категория:CICD_in_one_day]] |
||
| + | =LDAP= |
||
| + | ==Установка и базовая конфигурация== |
||
<PRE> |
<PRE> |
||
sudo apt-get update |
sudo apt-get update |
||
| Строка 11: | Строка 14: | ||
* Консольный клиент для OpenLDAP |
* Консольный клиент для OpenLDAP |
||
* phpLDAPadmin для того что бы более удобно управлять записями в LDAP |
* phpLDAPadmin для того что бы более удобно управлять записями в LDAP |
||
| + | |||
| + | Пароль при установке - <B>r00tme</B> |
||
| + | <BR>Если требуется перенастроить - то |
||
| + | <PRE> |
||
| + | dpkg-reconfigure slapd |
||
| + | </PRE> |
||
| + | В отличие от CentOS, под Ubuntu OpenLDAP частично сконфигурирован. Посмотреть настройки можно командой <b>slapcat</B> |
||
| + | <PRE> |
||
| + | slapcat |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | 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 |
||
| + | </PRE> |
||
| + | |||
| + | Очевидно, что <B>DC=nodomain</B> это не совсем то что нужно |
||
| + | |||
| + | Запустить реконфигурацию, настроить домен cicd |
||
| + | <PRE> |
||
| + | slapcat |
||
| + | </PRE> |
||
| + | <PRE> |
||
| + | dn: dc=cicd |
||
| + | objectClass: top |
||
| + | objectClass: dcObject |
||
| + | 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> |
||
Текущая версия на 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'