sudo apt update
sudo apt upgrade
sudo apt install slapd ldap-utils
$ sudo dpkg-reconfigure slapd
처음 설치 시에는 관리자 passwd를 제외한 세부 설정은 할 수 없다. 위 명령어를 통해 재설정이 필요하다.
NO

base DN으로 사용할 DNS domain name 입력
ex) ldap.company.com

LDAP 디렉토리의 base DN이 사용하는 조직 이름
ex) company

LDAP 디렉토리의 admin 엔트리 비밀번호 설정
slpad가 삭제될 때 DB도 삭제할지 선택 -> NO

/var/lib/ldap 에 기존DB가 있는 경우 백업시키고(/var/backups) 새 DB를 만들것인지? -> YES
sudo systemctl status slapd

LDIF (LDAP Data Interchange Format)
- LDAP 디렉토리에 데이터를 추가하거나 수정하는 데 사용됨
- 사용 이유
- 데이터 추가 및 수정
- LDAP 서버에 데이터를 추가하거나 수정하는 가장 일반적인 방법
- 백업 및 복구
- LDAP 디렉토리 데이터를 백업하고 복구할 때 사용
- Data Migration
- 다른 LDAP 서버로 데이터를 이전할 때 사용
- Configuration
- LDAP 설정을 프로그램적으로 관리하거나 스크립트로 자동화할 때 사용
base DN$ cat baseDN.ldif
# OU for Users
dn: ou=users,dc=ldap,dc=company,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users
# OU for Groups
dn: ou=groups,dc=ldap,dc=company,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups
dn: ou=users,dc=ldap,dc=company,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users
dn: ou=users,dc=ldap,dc=company,dc=com
dc=ldap,dc=compnay,dc=com 도메인 하위에 ou=users라는 조직 단위(OU)를 정의함objectClass: top
top 객체 클래스를 상속받아야 하기 때문 (규칙)top 객체 클래스는 다른 모든 객체 클래스의 기반이 되는 최상위 객체 클래스를 정의top클래스를 기반으로 확장됨objectClass: organizationUnit
ou: xxx
xxxdn: ou=groups,dc=ldap,dc=company,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups
sudo ldapadd -x -D cn=admin,dc=ldap,dc=company,dc=com -W -f ou.ldif

ldapsearch -x -LLL -D "cn=admin,dc=ldap,dc=company,dc=com" -W -b "dc=ldap,dc=company,dc=com" "(objectClass=organizationalUnit)"

## 비밀번호 재설정을 위한 LDIF 파일 작성
vi reset_admin_passwd.ldif
dn: cn=admin,dc=ldap,dc=company,dc=com #실제 관리자 DN에 맞게 수정
changetype: modify
replace: userPassword
userPassword: 새로운비밀번호 #예시: {SHA-256}NWQ1YjA5ZjZkY2IyZDUzYTVmZmZjNjBjNGFjMGQ1NWZhYmRmNTU2MDY5ZDY2MzE1NDVmNDJhYTZlMzUwMGYyZQ==
userPassword => 비밀번호 -> SHA256 -> Base64 Encoding
LDIF 파일 작성 후,
sudo ldapmodify -x -D "cn=admin,dc=ldap,dc=company,dc=com" -W -f reset_admin_passwd.ldif
users.ldifdn: uid=donlee,ou=users,dc=ldap,dc=company,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: Don Lee
sn: Lee
uid: donlee
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/donlee
loginShell: /bin/bash
userPassword: {암호화 알고리즘}비밀번호
gecos: Don Lee
objectClass: inetOrgPersonobjectClass: posixAccountuserPassword 예시sudo ldapadd -x -D "cn=admin,dc=ldap,dc=company,dc=com" -W -f users.ldif
ldapsearch -x -LLL -D "cn=admin,dc=ldap,dc=company,dc=com" -W -b "ou=users,dc=ldap,dc=company,dc=com" "uid=donlee"
NSS 및 PAM 사용
/etc/nsswitch.conf 파일에서 passwd, group, shadow 항목을 수정하여 LDAP를 참조하도록 설정 passwd: files systemd ldap
group: files systemd ldap
shadow: files ldap
PAM 설정
/etc/pam.d/ 디렉토리에 있는 인증 관련 파일들을 수정하여 LDAP 인증 모듈을 사용하도록 구성/etc/pam.d/common-authauth required pam_env.so
auth required pam_unix.so nullok_secure
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
/etc/pam.d/sudo/# LDAP auth
auth sufficient pam_ldap.so
auth required pam_unix.so
...
## 네트워크에 DNS 서버가 없는 경우
## /etc/hosts 파일에 LDAP 서버 주소를 추가.
sudo cat /etc/hosts
sudo apt-get -y install libnss-ldap libpam-ldap ldap-utils
몇 가지 설정들이 나온다.
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b "dc=ldap,dc=company,dc=com" dn

LDAP 검색은 특정 기준에 따라 디렉터리 객체를 조회하고 원하는 정보를 가져오는 과정.
ldapsearch [options] -b <base_dn> [filter] [attributes]
ldapsearch -x -LLL -D "cn=admin,dc=ldap,dc=company,dc=com" -W -b "dc=ldap,dc=company,dc=com" "(objectClass=*)"

ldapsearch -x -LLL -D "cn=admin,dc=ldap,dc=company,dc=com" -W -b "dc=ldap,dc=company,dc=com" "(uid= donlee)" cn sn uid

Error: 'No such object'
slapd.conf 파일의 설정을 다시 확인
base DN 부분이 정확한지 확인
https://ldap.com/
https://www.baeldung.com/linux/ldap-active-directory-alternative
https://www.samsungsds.com/kr/insights/ldap.html
https://www.okta.com/kr/identity-101/ldap-vs-active-directory/
https://yongho1037.tistory.com/796
https://ko.wikipedia.org/wiki/LDAP