-
[Docker] LDAP Server 생성하기ETC/Docker 2022. 3. 8. 16:32
사내 시스템을 구성하기 위해 Docker로 여러개의 컨테이너를 이용중인데
현재는 Git, MinIO, 메일서버, ERP, 관리자 등 여러 서비스에서 각각의 계정을 만들어주어야 하기 때문에
인증정보 통합의 필요성을 느껴 LDAP서버를 사용하기로 했다.
LDAP란 Lightweight Directory Access Protocol의 약자로, 분산 디렉터리 서비스에서 사용자, 시스템, 네트워크, 서비스, 앱 등의 정보를 공유하기 위한 프로토콜이다.
자세한 내용은
LDAP에 대해 알아보자
가볍지만 무거운 프로토콜 😮
medium.com
참조
쉽게말해 네트워크 기반 데이터베이스라고 볼 수 있는데, 생소한 개념이라 그런지 조금 어렵다 😅
복잡하게 갈 필요 없이 openldap를 이용했다.
해당 이미지를 올려서 LDAP 서버로 사용하면 시놀로지 SMB 서비스 이용이 불가합니다.
(DB에 저장해놓고 OAuth와 같은 SSO를 구현하거나, 시놀로지에서 지원하는 LDAP 또는 SSO서버를 이용할 수도 있지만 직접 만들어보고 싶었다.)
GitHub - osixia/docker-openldap: A docker image to run OpenLDAP 🐳
A docker image to run OpenLDAP 🐳. Contribute to osixia/docker-openldap development by creating an account on GitHub.
github.com
Docker에 컨테이너 생성
$ sudo docker pull osixia/openldap:latest $ sudo docker run -p 389:389 -p 636:636 \ --env LDAP_ORGANISATION="Company Name" \ --env LDAP_DOMAIN="testcompany.com" \ --env LDAP_ADMIN_PASSWORD="<PASSWORD>" \ --name ldap-server \ --network web-server-network \ --detach osixia/openldap:latest
테스트
$ sudo docker exec ldap-server ldapsearch -x -H ldap://testcompany.com -b dc=testcompany,dc=com -D "cn=admin,dc=testcompany,dc=com" -w "<PASSWORD>"
출력결과
# extended LDIF # # LDAPv3 # base <dc=testcompany,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # testcompany.com dn: dc=testcompany,dc=com objectClass: top objectClass: dcObject objectClass: organization o: Company Name dc: testcompany # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
LDAP 관리를 위한 관리자 컨테이너 생성
$ sudo docker pull osixia/phpldapadmin:latest $ sudo docker run -p 8443:443 \ --env PHPLDAPADMIN_LDAPHOSTS=testcompany.com \ --name ldap-server-admin \ --network web-server-network \ --detach osixia/phpldapadmin:latest
LDIF 작성
# Distinguished Name dn: dc=testcompany,dc=com dc: testcompany o: testcompany objectclass: top objectclass: dcObject objectclass: organization # Entry - Groups cn=groups,dc=testcompany,dc=com cn: groups objectclass: organizationalRole objectclass: top # Entry - Groups: admin dn: cn=admin,cn=groups,dc=testcompany,dc=com cn: admin gidnumber: 1000 objectclass: posixGroup objectclass: top # Entry - Groups: userlist dn: cn=userlist,cn=groups,dc=testcompany,dc=com cn: userlist gidnumber: 1001 objectclass: posixGroup objectclass: top # Entry - User: superadmin dn: cn=superadmin,cn=admin,cn=groups,dc=testcompany,dc=com cn: superadmin gidnumber: 1000 givenname: super homedirectory: /home/sadmin loginshell: /usr/sbin/nologin objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: admin uid: sadmin uidnumber: 1000 userpassword: {SSHA}IyThfNXL+vePA7xYD8mebKud6bhn0p2U # Entry - User: jade dn: cn=jade,cn=userlist,cn=groups,dc=testcompany,dc=com cn: jade gidnumber: 1001 givenname: jade homedirectory: /home/jade loginshell: /usr/sbin/nologin objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: jade uid: jade uidnumber: 1001 userpassword: {SSHA}w8gyqYeTaOZerh/aI0UfKpHV5Bifmaz5
userpassword는 slappasswd 명령어로 만들 수 있다.
https://ip-addr:8443/으로 접속
Login DN: cn=admin,dc=testcompany,dc=com
Password: 컨테이너 생성 시 작성한 비밀번호
좌측 메뉴 상단의 import 클릭 후 위에 작성한 LDIF 입력, Proceed >> 클릭
최종 결과물 시놀로지 연결 테스트
중간에 Samba가 지원되지 않는다고 나온다.
심각한 오류는 아니므로 자세히 보기를 눌러 체크박스 체크 후 적용하면 된다.
메일플러스 서버 - 서비스 - 프로토콜 탭에서 "로컬 사용자"를 "LDAP 사용자"로 바꿔주고, 계정 탭에서 만들어둔 계정을 활성화하면 된다.
메일플러스에 로그인 할 때는 LDAP URL을 @과 함께 뒤에 붙여주어야 한다.
References
'ETC > Docker' 카테고리의 다른 글
[Docker] LDAP Server 생성하기 (0) 2022.03.08