1. 관련 프로그램 설치
기본 레파지토리에는 openldap-servers가 존재하지 않으므로 레피지토리에 추가
# dnf config-manager --set-enabled plus
# dnf repolist
# dnf update
# dnf -y install openldap openldap-servers openldap-clients
# systemctl enable slapd
# systemctl start slapd
# firewall-cmd --permanent --add-service={ldap,ldaps}
# firewall-cmd --reload
2. 관리자 패스워드 설정
# slappasswd
New password : *******
Re-enter new password : *******
{SSHA}*********************************** <--복사필요
# vi admin_pass.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}*********************************** <--위화면 패스워드 붙여넣기
# ldapadd -Y EXTERNAL -H ldapi:/// -f admin_pass.ldif <--루트 패스워드를 변경함.
3. Base DN을 설정
# vi base_structure.ldif
# base_structure.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=example,dc=com
# ldapadd -Y EXTERNAL -H ldapi:/// -f base_structure.ldif <--적용
4. 기본 스키마 로드
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
5. 기본 조직 설정
# vi initial_org.ldif
# 조직의 루트 DIT(Directory Information Tree) 항목 정의
# dc=example,dc=com은 설치 시 설정한 기본 도메인에 맞춰 변경해야 합니다.
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: My Company
description: My Company's main LDAP directory
# 사용자들을 위한 조직 구성 단위(OU) 정의
dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users
description: All user accounts in My Company
# 그룹들을 위한 조직 구성 단위(OU) 정의
dn: ou=groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups
description: All user groups in My Company
# 부서들을 위한 조직 구성 단위(OU) 정의
dn: ou=departments,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: departments
description: Departments within My Company
# IT 부서 OU 정의 (부서 OU 아래에 위치)
dn: ou=IT,ou=departments,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: IT
description: Information Technology Department
# HR 부서 OU 정의 (부서 OU 아래에 위치)
dn: ou=HR,ou=departments,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: HR
description: Human Resources Department
# ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f initial_org.ldif
※ 패스워드는 이전에 설정한 관리자 패스워드를 입력
6. Base Dn : cn=admin,dc=example,dc=com , 관리자 패스워드 사용하여 관리 가능
- 사용자 추가(HR 부서의 홍길동)
# slappassword <--사용할 패스워드의 해시값으로 변환
New password: 홍길동
Re-enter new password: 홍길동
{SSHA}48cA5xSMTaz61+xo46Ek17DC07rapLtJ <-- 해시값 복사
# vi add_hong.ldif
dn: uid=honggildong,ou=HR,ou=departments,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: 홍길동
sn: 홍
givenName: 길동
mail: hong.gildong@example.com
uid: honggildong
userPassword: {SSHA}48cA5xSMTaz61+xo46Ek17DC07rapLtJ
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f add_hong.ldif
- Apache Directory Studio 프로그램에서 보면 정상적으로 추가되었음을 볼 수 있음.
만약 HR부서에 속한 인원을 조회시
# ldapsearch -x -b "ou=HR,ou=departments,dc=example,dc=com" "(objectClass=person)" cn
인증이 필요한 경우
# ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b "ou=IT,dc=example,dc=com" "(objectClass=person)" cn
-x : 간편 인증 / -W 비밀번호 묻기
-b : 검색 기준(Base DN)
-D : Bind DN 로그인 계정 주소
(objectClass=Person) : 인원객체를 검색(추가 검색 조건 추가가능
ex>이름(cn)이 홍길동일 경우 (&(objectClass=Person)(cn=홍길동))
cn : 조회결과 속성
메일링 그룹을 만들시 goupofNames 또는 groupOfUniqueNames 객체를 사용하여 구성
# vi group.ldif
dn: cn=all-users,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfNames
cn: all-users
description: All Users Mailing List
member: cn=John Doe,ou=IT,dc=example,dc=com
member: cn=Jane Smith,ou=HR,dc=example,dc=com
member: cn=Alice Kim,ou=Finance,dc=example,dc=com
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f group.ldif
그룹 멤버 추가 방법
1. 매뉴얼로 수정 처리하는 방법
- 스크립터로 구성 가능
ldapsearch -x -b "dc=example,dc=com" "(objectClass=person)" dn | grep "^dn:" | awk '{print "member: "$2}''
실행시 멤버 대상으로 생성되며 이를 LDIF로 만들어 생성할 수 있음.
2. 특정 그룹에 포함된 모든 대상자를 자동 포함시
- 추가 스키마가 필요하므로 추가
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
- vi group.ldif
dn: cn=all-users,ou=Groups,dc=example,dc=com
objectClass: groupOfURLs
cn: all-users
memberURL: ldap:///dc=example,dc=com??sub?(objectClass=person)
description: All Users Mailing List
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f group.ldif
Postfix와 연동시
/etc/postfix/ldap-groups.cf
server_host = ldap://localhost
search_base = ou=Groups,dc=example,dc=com
query_filter = (cn=%s)
result_attribute = member
bind = yes
bind_dn = cn=admin,dc=example,dc=com
bind_pw = yourpassword
main.cf에 적용
virtual_alias_maps = ldap:/etc/postfix/ldap-groups.cf
a11-user@example.com으로 이메일 전송시 해당 멤버에게 자동으로 이메일 전송됨.