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

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 8 промежуточных версий этого же участника)
Строка 2: Строка 2:
 
[[Категория:CICD]]
 
[[Категория:CICD]]
 
[[Категория:LDAP]]
 
[[Категория:LDAP]]
  +
[[Категория:CICD_in_one_day]]
 
=LDAP=
 
=LDAP=
 
==Установка и базовая конфигурация==
 
==Установка и базовая конфигурация==
Строка 77: Строка 78:
   
 
==PHP LDAP ADMIN==
 
==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'