IT 잡동사니

Ubuntu OpenLDAP 설치

케키키케 2024. 7. 1. 23:53

0. 용어 

용어가 모르면 산으로 간다. 먼저 익히자

  • DN (Distinguished Name) : 고유 명칭 (도메인)
  • CN (Canonical Name) : 정식 이름 (사용자 이름)
  • OU (Organizational Unit) : 조직 단위 (부서 이름)
  • database : 데이터베이스 종류 (bdb)
  • suffix : 최상위 dc
  • rootdn : 관리용 DN, 사용자 추가 삭제 등 사용되는 DN
  • rootpw : DN 인증을 위한 패스워드
  • directory : 데이터베이스 위치

출처: https://co-de.tistory.com/114 [코알못:티스토리]

 

1. OpenLDAP 설치

sudo apt install slapd ldap-utils

sudo dpkg-reconfigure slapd

 

아래 가이드 참고하여 설치

https://www.tp-link.com/kr/support/faq/3570/

 

How to Install LDAP server on Ubuntu | TP-Link 대한민국

Crazy Egg cebsp_, _ce.s, _ce.clock_data, _ce.clock_event, cebs Hotjar OptanonConsent, _sctr, _cs_s, _hjFirstSeen, _hjAbsoluteSessionInProgress, _hjSessionUser_14, _fbp, ajs_anonymous_id, _hjSessionUser_<hotjar-id>, _uetsid, _schn, _uetvid, NEXT_LOCALE, _hj

www.tp-link.com

 

2. 설정

위 가이드대로 하다보면 중간에 DNS를 설정하도록 하는데, 만약 abc.def.ghi 로 설정했다면,

/etc/ldap/ldap.conf는 아래와 같이 수정한다.

만약 초기 설치 시 설정을 변경하고 싶다면 sudo dpkg-reconfigure slapd 부터 다시 시작하면 된다.

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666

BASE    dc=abc,dc=def,dc=ghi
URI     ldap://localhost

#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never

# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt

 

 

3. 실행

sudo systemctl start slapd.service

netstat -an // 389로 뜬 서비스가 있는지 확인

* 이 때, wsl에서 실행 시에 version2가 아니라면 systemctl 등록이 안되므로 업데이트를 해주는 것이 앞으로 편한 길이  될 것이다.. 테스트 용도로 업데이트도 귀찮고 굳이 계속 띄울 필요가 없다면 아래의  실행 명령어를 참고하여 실행

 

ps -ef | grep ldap

openldap     352       1  0 22:30 ?        00:00:00 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d

 

4. 루트 사용자 설정

LDAP에서 관리 태스크를 실행하려면 루트 사용자를 설정해야 한다. 

루트 사용자를 olcRootDN이라고 한다.

 

1. 비밀번호 설정

slappasswd

-> 비밀번호 해시를 준다. 잘 저장해두기~

 

2. rootpw.ldif 파일 생성

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}abcdefg //저장해둔 비밀번호 입력

그리고 적용

ldapadd -Y EXTERNAL -H ldapi:// -f rootpw.ldif

이 때, 아래와 같은 메시지가 나오면 sudo로 실행. 

>  ldap_modify: Insufficient access (50)

sudo ldapadd -Y EXTERNAL .....

3. 스키마 불러오기

아래 쭉 진행..

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/dyngroup.ldif

 

4. LDAP 서버에 대한 액세스 구성 및 관리자 사용자 구성. manager.ldif 파일 생성

dn: olcDatabase={1}mdb,cn=config    //centos는 olcDatabase={2}mdb이고, ubuntu는 olcDatabase={1}mdb임
changetype: modify
replace: olcSuffix
olcSuffix: dc=abc,dc=def,dc=fgi //내가 설정한 것과 똑같이 입력

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=abc,dc=def,dc=fgi //여기도

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}abcde //아까 받은 비밀번호 입력

 

그리고 적용

ldapmodify -Y EXTERNAL -H ldapi:// -f manager.ldif

 

 

5. 관리자 사용자 등록

* 여기서 관리자, 사용자 등 용어가 많은데, 아래서 LDAP DIT 구조를 보면 많은 도움이 될 것이다. -

 

LDAP 인증 - 블로코 기술블로그

LDAP은 Lightweight Directory Access Protocol의 약자로, 분산 디렉터리 서비스에서 사용자, 시스템, 네트워크, 서비스, 앱 등의 정보를 공유하기 위한 오픈 프로토콜입니다.

www.blocko.io

 

 

아래 파일 생성 및 적용

dn, dc 꼭 바꿔줄 것!

dn: dc=abc,dc=def,dc=ghi  //변경
objectClass: top
objectClass: dcObject
objectclass: organization
o: IBM RPA Server
dc: abc   //이 부분 잊지 말고 바꿔줄 것!

dn: cn=Manager,dc=abc,dc=def,dc=ghi	//변경
objectClass: organizationalRole
cn: Manager
description: LDAP Manager

dn: ou=rpausers,dc=abc,dc=def,dc=ghi //변경
objectClass: organizationalUnit
ou: rpaUsers

 

ldapadd -x -D cn=Manager,dc=abc,dc=def,dc=ghi -W -f org.ldif

 

-> 이 과정에서 오류가 있었음

자꾸 아래와 같은 오류가 발생함

Enter LDAP Password:
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

 

2번에서 설정한 URI를 localhost로 지정하였는데, 혹시 못찾나 싶어서 IP로 직접 넣어주고 ldap 서비스 재실행.

netstat -ano |  grep 389로 모두 제대로 listening하고 있는지도 확인.

그리고 4.5번에서 dc 입력 부분에 기존 가이드 대로 따라 하다가 abc로 안바꿔줌. 내가 설정한 dc로 꼭 변경해줄 것!

용어가 익숙하지 않다보니 어떤 것들을 변경해야 하는지 놓치기 쉽다. 

용어에 익숙해지도록 노력할 것!

 

 

5. 진짜 사용자 등록

addUserName.ldif 파일 생성

dn: cn=user1 Name,dc=abc,dc=def,dc=ghi
changetype: add
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: user1
cn: user1
sn: user1
displayName: user1
mail: username@example.com
userPassword: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • dc=rpa,dc=ibm,dc=com 를 내가 설정한 DN으로 변경
  • sn : 사용자 성
  • uid : 사용자의 사용자 이름 
  • displayName에 : 사용자의 표시 이름
  • mail : 사용자 이메일 주소
  • userPassword에서 slappasswd 명령으로 얻은 사용자 비밀번호의 해시 입력

이름을 하도 많이 입력하라고 그래서 그냥 user1으로 통일했다.

 

등록하자.

ldapadd -D "cn=Manager,dc=abc,dc=def,dc=ghi" -W -f addUserName.ldif

 

adding new entry "cn=Manager,dc=abc,dc=def,dc=ghi" 

라고 나오면 성공~

 

 

6. 이제 사용자가 잘 등록되었는지 확인해보자

ldapsearch -x -H ldap://localhost:389 -D "cn=Manager,dc=abc,dc=def,dc=ghi"  "uid=없는유저"-W

> 패스워드 입력

이러면 뭐가 많이 나오는데.. 실제로 검색이 되면, 사용자의 모든 정보가 출력된다.

없는 경우엔 그냥 검색 조건만 출력된다.

 

ldapsearch -x -H ldap://localhost:389 -D "cn=Manager,dc=abc,dc=def,dc=ghi"  "uid=user1  -W

이렇게 검색하면, 내가 아까 등록한 addUserName.ldif 의 정보가 출력될 것이다.

 

 

 

7. 추가~!! OU (그룹 개념)를 추가하고 그 하위에 사용자를 추가해보자!

7.1. OU 생성을 위한 파일 생성

vi addOu.ldif

dn: ou=newou,dc=abc,dc=def,dc=ghi
objectClass: organizationalUnit
ou: newou

 

7.2 OU추가

> ldapadd -x -D "cn=Manager, dc=abc,dc=def,dc=ghi " -W -f addOu .ldif  

 

7.3 OU 그룹에 속한 사용자 추가를 위한 파일 생성

vi addUser1.ldif

dn: uid=user1, ou=newou,dc=abc,dc=def,dc=ghi
objectClass: inetOrgPerson
uid: user1
cn: User One
sn: One
userPassword: {SSHA}hashed_password

 

7.4. OU 그룹에 속한 사용자 추가

> ldapadd -x -D "cn=Manager, dc=abc,dc=def,dc=ghi "  -W -f addUser1 .ldif

 

7.5 확인

> ldapsearch -x -H ldap://localhost:389 -D "cn=Manager,dc=abc,dc=def,dc=ghi"  "uid=user1" -W

 

 

 

 

참고

LDAP 설치 및 구성 - https://www.ibm.com/docs/ko/rpa/23.0?topic=ldap-installing-configuring-openldap

 

OpenLDAP 설치 및 구성

 

www.ibm.com

LDAP이란 ? - https://ldap.or.kr/ldap-%EC%9D%B4%EB%9E%80/