사내에 airflow를 ldap과 연동해서 사용하고 있는데 버전업을 하면서 신규 기능이랑 잘 호환이 될 지 확인하고자 부랴부랴 openldap 을 설치해봤다. 단순한 인증 DB? 서버? 라고 생각했는데 생각보다 어려운 개념이었다. LDAP 프로토콜에 대한 자세한(?) 설명은 아래 링크에서 잘 알려주는 것 같으니 참고.
조직도와 같은 계층 구조를 아래와 같은 트리 구조로 정의해놓고 특정 노드나 집합을 찾아낼 수 있게 해주는 시스템으로 간단히 이해하고
속성 | 의미 |
---|---|
dn | distinguished name |
o | organization |
cn | common name |
c | country |
rdn | relative DN |
ou | organization unit |
sn | surname |
각 속성명은 위와 같다는 것까지만 알고 넘어가면 앞으로 진행할 내용을 이해하는데는 크게 무리가 없을 것 같다.
개념을 이해하고 제대로 설치한 것인지는 잘 모르겠지만, 두 명의 사용자에 대한 인증 서비스를 제공하는, 가벼운 테스트 용도로 설치해볼 수 있었다.
설치 환경
다음과 같은 환경에서 진행했다.
-
CentOS7
http://mirror.kakao.com/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso
-
hostname
centos.vm.oboki.net
-
cat /etc/passwd
user1:x:1005:1005::/home:/sbin/nologin
user2:x:1006:1006::/home:/sbin/nologin
패키지 설치
yum -y install openldap openldap-servers openldap-clients
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl enable slapd
systemctl start slapd
389
번 포트로 서비스가 잘 동작하고 있는지 확인해보면 설치 끝.
설치가 완료되면 slappasswd
명령으로 root 패스워드를 설정하고 출력되는 해시값을 잘 복사해둔다.
New password:
Re-enter new password:
{SSHA}1QgGcR5AZZ/+DtAxYMVAFOdWSFGmNBei # olcRootPW
다음과 같이 vim db.ldif
파일을 따라 쓰고 olcRootPW 란에는 위에서 복사해둔 패스워드를 넣은 뒤
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}1QgGcR5AZZ/+DtAxYMVAFOdWSFGmNBei
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=centos
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=centos
ldapmodify -Y EXTERNAL -H ldapi:/// -f db.ldif
명령으로 변경사항을 적용한다.
이어서 아래 순서대로 쭉 진행하면 되는데 자세하게 어떤 기능을 하는지는 아직도 잘 모르겠다. 많은 샘플 자료들을 보고 따라했지만 막히는 부분들이 많았고 결국 성공한 과정인데 .. 나중에 자세히 공부해봐야겠다.
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/core.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
vim base.ldif
dn: dc=centos
dc: centos
objectClass: top
objectClass: domain
dn: cn=admin,dc=centos
objectClass: organizationalRole
cn: admin
description: LDAP Manager
dn: ou=People,dc=centos
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=centos
objectClass: organizationalUnit
ou: Group
ldapadd -x -W -D "cn=admin,dc=centos" -f base.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
cat user1.ldif
dn: uid=user1,ou=People,dc=centos
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: user1
uid: user1
uidNumber: 1005
gidNumber: 1005
homeDirectory: /home
loginShell: /sbin/nologin
gecos: user1 [Administrator]
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
ldapadd -x -W -D "cn=admin,dc=centos" -f user1.ldif
ldappasswd -s password -W -D "cn=admin,dc=centos" -x "uid=user1,ou=People,dc=centos"
cat user2.ldif
dn: uid=user2,ou=People,dc=centos
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: user2
uid: user2
uidNumber: 1006
gidNumber: 1006
homeDirectory: /home
loginShell: /sbin/nologin
gecos: user2 [Administrator]
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
ldapadd -x -W -D "cn=admin,dc=centos" -f user2.ldif
ldappasswd -s password -W -D "cn=admin,dc=centos" -x "uid=user2,ou=People,dc=centos"
ldap util 참고
- 특정 dn 삭제
ldapdelete -x "cn=testgroup,ou=Group,dc=centos" -D "cn=admin,dc=centos" -W
- 특정 dn 검색
ldapsearch -x -H ldap://centos:389 -D "cn=admin,dc=centos" -W -b "dc=centos" -LLL
※ -x
옵션 뒤에 대상 dn 을 적어주면 됨