[LDAP] OpenLDAP 구축하기 - 1

kafkaaaa·2024년 5월 24일

LDAP

목록 보기
1/8

OpenLDAP 설치

sudo apt update
sudo apt upgrade

sudo apt install slapd ldap-utils
  • 설치 시 LDAP관리자 계정 비밀번호 설정

OpenLDAP (재)설정

$ sudo dpkg-reconfigure slapd

처음 설치 시에는 관리자 passwd를 제외한 세부 설정은 할 수 없다. 위 명령어를 통해 재설정이 필요하다.

1. Omit OpenLDAP server configuration? NO


2. DNS domain name:


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

3. Organization name:


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


4. Administrator password


LDAP 디렉토리의 admin 엔트리 비밀번호 설정


5. Database 삭제 여부

slpad가 삭제될 때 DB도 삭제할지 선택 -> NO


6. Move old database?


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


LDAP 서버 설정 확인

sudo systemctl status slapd


LDIF (LDAP Data Interchange Format)

  • LDAP 디렉토리에 데이터를 추가하거나 수정하는 데 사용됨
  • 사용 이유
    • 데이터 추가 및 수정
      • LDAP 서버에 데이터를 추가하거나 수정하는 가장 일반적인 방법
    • 백업 및 복구
      • LDAP 디렉토리 데이터를 백업하고 복구할 때 사용
    • Data Migration
      • 다른 LDAP 서버로 데이터를 이전할 때 사용
    • Configuration
      • LDAP 설정을 프로그램적으로 관리하거나 스크립트로 자동화할 때 사용

조직 단위(OU) 추가

#0. 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

#1. 사용자 OU

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

    • 최상위 객체 클래스
    • 이것을 지정하는 이유는 모든 LDAP 객체가 top 객체 클래스를 상속받아야 하기 때문 (규칙)
    • top 객체 클래스는 다른 모든 객체 클래스의 기반이 되는 최상위 객체 클래스를 정의
    • LDAP 스키마에서 다른 모든 객체 클래스는 top클래스를 기반으로 확장됨
  • objectClass: organizationUnit

    • 이 항목이 조직 단위(OU)임을 의미
  • ou: xxx

    • 조직 단위(OU) 이름 지정: xxx

#2. 그룹 OU

dn: ou=groups,dc=ldap,dc=company,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

LDIF 파일 적용 및 확인

sudo ldapadd -x -D cn=admin,dc=ldap,dc=company,dc=com -W -f ou.ldif

  • -x : 간단한 인증 사용
  • -D : 관리자의 DN (Distinguished Name)
    • LDAP 디렉토리에 접근하기 위한 관리자의 식별자
  • -W : 비밀번호 입력 요청
  • -f : 사용할 LDIF 파일

적용 확인

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

  • -x: 간단한 인증 사용
  • -LLL: 검색 결과를 간단하게 표시
  • -D: 관리자 DN 지정
  • -W: 관리자 비밀번호 입력
  • -b: Base DN 지정


LDAP 관리자 비밀번호 재설정 방법

## 비밀번호 재설정을 위한 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


사용자 추가

방법 1. 독립적인 LDAP 사용자 추가

  • LDAP 디렉토리 내에서만 사용자 계정을 관리하며, 로컬 시스템 계정과는 독립적임
  • 이를 통해 중앙 집중식으로 사용자 계정을 관리할 수 있으며, 여러 시스템에서 동일한 LDAP 사용자 계정을 사용할 수 있음
  • 주로 대규모 네트워크 환경에서 중앙 집중식 인증을 구현할 때 사용됨

users.ldif

dn: 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: inetOrgPerson
    • 인터넷 조직의 사람을 나타내는 클래스
    • 일반적으로 사람에 대한 기본 정보 속성 정의
    • ex) 이름, 이메일, 전화번호 등
  • objectClass: posixAccount
    • POSIX 운영체제에서 사용되는 사용자 계정을 나타내는 클래스
    • ex) UID, GID, 홈디렉토리 경로, 로그인 쉘 등
  • userPassword 예시
    • 비밀번호는 해시값을 Base64 인코딩한 값으로 입력
    • {SHA-256}NWU4ODQ4OThkYTI4MDQ3MTUxZDBlNTZmOGRjNjI5Mjc3MzYwM2QwZDZhYWJiZGQ2MmExMWVmNzIxZDE1NDJkOA==

적용 및 확인

  • 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"


방법 2. 로컬 시스템 사용자와 연동 (미완료)

  • 실제 로컬 시스템의 사용자와 LDAP 사용자를 일치시킬 수 있음 (/etc/passwd 와 동일한 정보를 LDAP에 저장)
  • LDAP 사용자가 로컬 시스템 사용자와 동일한 UID 및 GID를 가지도록 설정할 수 있음
  • 주로 기존 로컬 사용자 계정을 LDAP로 Migration 하거나 로컬 시스템에서 LDAP 인증을 사용하는 경우 유용함

NSS 및 PAM 사용

  • NSS
    • Name Service Switch
  • PAM
    • Pluggable Authentication Modules
    • Unix 계열에서 인증 및 사용자 세션을 관리하는 모듈 시스템
  1. NSS 설정
    • /etc/nsswitch.conf 파일에서 passwd, group, shadow 항목을 수정하여 LDAP를 참조하도록 설정
    passwd: files systemd ldap
    group: files systemd ldap
    shadow: files ldap
  1. PAM 설정

    • /etc/pam.d/ 디렉토리에 있는 인증 관련 파일들을 수정하여 LDAP 인증 모듈을 사용하도록 구성
    • 각 파일에서 필요한 서비스(로그인, 패스워드 변경 등)에 대해 LDAP 모듈을 추가
    • /etc/pam.d/common-auth
    auth    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

...


#0. Configure LDAP Client

#0-1. LDAP 서버 주소 추가

## 네트워크에 DNS 서버가 없는 경우
## /etc/hosts 파일에 LDAP 서버 주소를 추가.

sudo cat /etc/hosts

#0-2. LDAP Client Utility 설치

sudo apt-get -y install libnss-ldap libpam-ldap ldap-utils

몇 가지 설정들이 나온다.

  • LDAP 서버 URI 지정: (예시)ldapi:///127.0.0.1
  • 검색 베이스 DN설정: (예시)dc=ldap,dc=company,dc=com
  • LDAP 버전 선택: 3
  • PAM 사용 설정: yes
  • LDAP 데이터베이스 로그인 암호 필요 여부 설정: no
  • Root LDAP 계정 지정: (예시)cn=admin,dc=company,dc=com
  • LDAP Root 계정 암호 설정

0. Test LDAP Connection

sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b "dc=ldap,dc=company,dc=com" dn


ldapsearch

LDAP 검색은 특정 기준에 따라 디렉터리 객체를 조회하고 원하는 정보를 가져오는 과정.

기본 문법

ldapsearch [options] -b <base_dn> [filter] [attributes]
  • options: 검색 옵션 (-x, -LLL, -D, -W 등)
  • -b <base_dn>: 검색 기준 base DN
  • filter: 검색할 객체 선택 필터
  • attributes: 반환할 속성 지정

예시 #1. 모든 객체 검색

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


예시 #2. 특정 속성 검색

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 부분이 정확한지 확인


Ref.

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

profile
일모도원

0개의 댓글