LDAP(Lightweight Directory Access Protocol)은 디렉토리 서비스를 제공하기 위한 애플리케이션 프로토콜입니다. 주로 네트워크 상에서 사용자, 그룹, 장치 등의 정보를 중앙에서 관리하고, 검색 및 수정할 수 있도록 설계되었습니다. 이를 통해 여러 시스템 간에 인증 및 권한 부여를 일관되게 수행할 수 있습니다. LDAP는 효율적인 디렉토리 데이터베이스로서, 기업 환경에서 사용자 계정 관리 및 조직의 구조화를 돕습니다.
LDAP(Lightweight Directory Access Protocol)의 여러 기능 중 하나는 사용자 계정을 구축하는 것입니다. 기본 개념은 LDAP 서버에 조직 및 사용자에 대한 구조화된 정보를 저장하고, LDAP 클라이언트에서 접속 요청이 오면 LDAP 서버에서 사용자 인증을 처리하는 것입니다. 이를 통해 여러 서버의 계정을 중앙에서 관리할 수 있습니다. LDAP 서버는 사용자의 인증, 권한 부여, 계정 정보 등의 중앙 집중화된 관리를 가능하게 합니다. 여러 서버와 애플리케이션이 LDAP 서버와 통신하여 사용자를 인증하고, 권한을 부여받으며, 필요한 계정 정보를 가져올 수 있습니다.
1. OpenLDAP 서버 설치
sudo apt-get install slapd ldap-utils
LDAP 서버로 사용할 서버에 접속해서 관련 라이브러리를 설치합니다.
2. OpenLDAP 서버 초기 구성
sudo dpkg-reconfigure slapd
이 명령어를 실행하면 몇 가지 설정 질문이 나타납니다:
- DNS 도메인 이름: 예를 들어 example.com
- 조직 이름: 예를 들어 Example Inc
- 관리자 비밀번호 설정
- 데이터베이스 파일을 삭제할지 여부: 기본값을 유지 (No)
- Move old database: 기본값을 유지 (Yes)
- 데이터베이스를 만들 수 있는 허용된 세션 수: 기본값을 유지 (No)
3. LDAP 디렉토리 구조 설정
LDAP 디렉토리 구조를 설정하려면 LDIF (LDAP Data Interchange Format) 파일을 사용합니다. 다음은 기본 디렉토리 구조를 설정하는 예입니다:
#base.ldif
# 조직의 루트 엔트리
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Organization
dc: example
# 사용자 조직 단위
dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users
# 그룹 조직 단위
dn: ou=groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups
# IT 부서 조직 단위
dn: ou=IT,ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: IT
# HR 부서 조직 단위
dn: ou=HR,ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: HR
# 관리자 계정
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP Administrator
userPassword: {SSHA}PASSWORD_HASH
각 항목의 설명
- dn (Distinguished Name):
- LDAP 디렉토리에서 엔트리를 고유하게 식별하는 이름입니다. 디렉토리 트리의 경로를 나타냅니다.
- 예: dn: dc=example,dc=com은 도메인 구성 요소가 example과 com인 루트 엔트리를 의미합니다.
- objectClass:
- 엔트리의 유형을 정의합니다. 각 objectClass는 엔트리가 가질 수 있는 속성을 정의합니다.
- top: 모든 LDAP 엔트리가 상속하는 최상위 클래스입니다.
- dcObject: 도메인 구성 요소를 나타내는 클래스입니다.
- organization: 조직을 나타내는 클래스입니다.
- organizationalUnit: 조직 단위를 나타내는 클래스입니다.
- 조직 정보:
- o: 조직의 이름을 나타냅니다.
- dc: 도메인 구성 요소를 나타냅니다.
- 예: o: Example Organization, dc: example
- 조직 단위:
- ou: 조직 단위의 이름을 나타냅니다.
- 예: ou: users, ou: groups
PASSWORD_HASH 값은 아래 명령어로 생성한 다음에 붙여넣으면 됩니다.
slappasswd
base.ldif는 조직 구조에 따라 계층적 설계도 가능합니다.
# 조직의 루트 엔트리
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: example org
dc: example
# 사용자 조직 단위
dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users
# 그룹 조직 단위
dn: ou=groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups
# AI부문 조직 단위
dn: ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: AI
# AI 연구개발 부서 조직 단위
dn: ou=RnD,ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: RnD
# AI 전략기획 부서 조직 단위
dn: ou=SnP,ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: SnP
# 관리자 계정
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP Administrator
userPassword: {SSHA}PASSWORD_HASH
작성한 base.ldif 파일을 적용시킵니다.
sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f base.ldif
4. 사용자 및 그룹 추가
이제 새로운 사용자를 추가합니다.
#add_rnd_user.ldif
# 그룹 객체 생성
dn: cn=johndoe,ou=RnD,ou=AI,dc=example,dc=com
objectClass: top
objectClass: posixGroup
cn: johndoe
gidNumber: 5001
# 사용자 객체 생성
dn: uid=johndoe,ou=RnD,ou=AI,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: John Doe
sn: Doe
uid: johndoe
uidNumber: 10001
gidNumber: 5001
homeDirectory: /home/johndoe
loginShell: /bin/bash
userPassword: {SSHA}PASSWORD_HASH
mail: johndoe@example.com
ldif 파일을 ldap 서버에 적용시킵니다.
sudo ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f add_rnd_user.ldif
잘 적용되었는지 확인해 봅시다.
ldapsearch -x -LLL -b "dc=example,dc=com" "(objectClass=*)"
새로운 사용자가 생길때마다 add_user를 진행하면 되고 HASH값을 받아서 직접 사용자 계정을 생성해도 되지만 기본 비밀번호로 생성하고 사용자에게 직접 변경하도록 합니다.
사용자가 자신의 비밀번호를 변경하려면 아래처럼 작성합니다.
ldappasswd -x -D "uid=username,ou=users,dc=example,dc=com" -W
조직의 구조를 나누고 여기에 따른 각각의 권한을 가지도록 할 수도 있습니다. (나중에 추가)
LDAP 서버에서의 설정은 끝났습니다. 이제 이 설정을 적용할 LDAP 클라이언트 서버에서 이어서 작업합니다.
5. LDAP 클라이언트 설정
이 설정은 모든 클라이언트에서 각각 진행합니다.
LDAP 클라이언트 서버에서 libnss-ldap 및 libpam-ldap 패키지를 설치합니다:
sudo apt-get install -y libnss-ldap libpam-ldap ldap-utils nscd
이후에 파일을 수정해도 되지만, 설치 과정에서 나오는 ldap 주소 등을 정확하게 입력하면 수고를 줄일 수 있습니다.
nscd를 데몬으로 실행합니다.
sudo systemctl enable nscd
sudo systemctl start nscd
환경 설정 -
클라이언트에서 처음 로그인 한다면 홈 폴더가 없기 때문에 생성하는 설정을 추가합니다.
#/etc/pam.d/common-session
session optional pam_mkhomedir.so skel=/etc/skel umask=0077
계정이 있는지 ldap에서 확인하는 작업을 추가합니ㅏㄷ.
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: files systemd ldap
group: files systemd ldap
shadow: files ldap
gshadow: files
hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
먼저 로컬 계정이 있는지 확인하고 없으면 ldap를 확인하는 설정입니다.
설정이 잘 적용되었다면 아래 명령어로 호스트에서 가져온 정보가 포함되어있는지 확인합니다.
getent passwd
getent group
'Computer Science > linux' 카테고리의 다른 글
Docker 사용하기 (0) | 2024.09.15 |
---|---|
Slurm 설치 (0) | 2024.06.05 |
Docker와 MariaDB연결하기 (0) | 2022.08.24 |
centos 8에 slurm 설치하기 (0) | 2022.05.11 |
conda 채널 추가 (0) | 2022.02.22 |