don't stop believing

LDAP Server 설치 (on CentOS) 본문

Tools/LDAP & CAS

LDAP Server 설치 (on CentOS)

Tongchun 2018. 10. 12. 15:15

LDAP 서버를 설치하겠습니다.


먼저 OS 버전부터 확인하고 가겠습니다.

$ grep . /etc/*-release
/etc/centos-release:CentOS Linux release 7.5.1804 (Core) 
/etc/os-release:NAME="CentOS Linux"
/etc/os-release:VERSION="7 (Core)"
/etc/os-release:ID="centos"
/etc/os-release:ID_LIKE="rhel fedora"
/etc/os-release:VERSION_ID="7"
/etc/os-release:PRETTY_NAME="CentOS Linux 7 (Core)"
/etc/os-release:ANSI_COLOR="0;31"
/etc/os-release:CPE_NAME="cpe:/o:centos:centos:7"
/etc/os-release:HOME_URL="https://www.centos.org/"
/etc/os-release:BUG_REPORT_URL="https://bugs.centos.org/"
/etc/os-release:CENTOS_MANTISBT_PROJECT="CentOS-7"
/etc/os-release:CENTOS_MANTISBT_PROJECT_VERSION="7"
/etc/os-release:REDHAT_SUPPORT_PRODUCT="centos"
/etc/os-release:REDHAT_SUPPORT_PRODUCT_VERSION="7"
/etc/redhat-release:CentOS Linux release 7.5.1804 (Core) 
/etc/system-release:CentOS Linux release 7.5.1804 (Core) 

이제 openldap을 포함한 패키지들을 설치합니다.

$ sudo yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel

설치가 되었다면 sladp (openldap)을 실행시키고 항상 실행되도록 등록합니다.

$ systemctl start slapd
$ systemctl enable slapd

ldap이 정상적으로 실행되었는지 포트를 확인합니다.

ldap의 포트는 389 입니다.

$ netstat -antup | grep -i 389
(No info could be read for "-p": geteuid()=1000 but you should be root.)
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::389                  :::*                    LISTEN      - 

ldap 설정을 위해 먼저 ldppassword를 생성합니다. slappasswd 명령을 실행하면 비번을 뭍고 해당 비번을 암호화해 줍니다.

암호화된 비번은 설정에 추가됩니다.

$ slappasswd
New password: 
Re-enter new password: 
{SSHA}3ppRnFtC1srY+NRt2q13G2l7f74cqveA

ldap 설정 파일은 /etc/openldap/slapd.d/ 경로 안에 있습니다.

설정 항목 중 olcSuffix와 olcRootDN, olcRootPW의 변경이 필요합니다. 설정 파일은 /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif 입니다. 하지만 직접 수정하는 것을 권장하지 않습니다.

olcSuffix – Database Suffix, it is the domain name for which the LDAP server provides the information. In simple words, it should be changed to your domain name.


olcRootDN – Root Distinguished Name (DN) entry for the user who has the unrestricted access to perform all administration activities on LDAP, like a root user.


olcRootPW – LDAP admin password for the above RootDN.

먼저 아래와 같이 db.ldif 파일을 만들고 원본에 적용하겠습니다.

$ sudo vim db.ldif

db.ldif 파일안에 아래 내용을 추가합니다.

olcRootPW는 앞서 생성한 암호화된 비번으로 넣습니다. dc의 내용은 사용하는 도메인(ngle.co.kr)으로 넣습니다.

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ngle,dc=co,dc=kr

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=ngle,dc=co,dc=kr

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}3ppRnFtC1srY+NRt2q13G2l7f74cqveA

이제 작성한 db.ldif 파일의 내용을 ldap server에 업데이트 합니다.

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

$ sudo ldapmodify -Y EXTERNAL  -H ldapi:/// -f db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"


monitor 접속 계정에 대한 설정도 해야 합니다.

monitor.ldif 파일을 만들고 원본 설정파일(/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif)에 업데이트 하겠습니다.

$ sudo vim monitor.ldif

아래와 같이 ldapadm 계정만 접속가능하게 합니다.

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=ngle,dc=co,dc=kr" read by * none

monitor.ldif 파일을 저장하고 설정에 업데이트 합니다.

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

$ sudo ldapmodify -Y EXTERNAL  -H ldapi:/// -f monitor.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

이제 ldap database를 설정할 차례입니다.

database 설정은 /usr/share/openldap-servers/ 폴더안에 있는 sample 파일을 업데이트하고 권한을 설정해 주면 됩니다.

$ sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
$ sudo chown ldap:ldap /var/lib/ldap/

ldap schema을 적용합니다.

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

도메일 정보도 변경해 줍니다. 마찬가지로 base.ldif 파일을 만들고 업데이트 하겠습니다.

$ sudo vim base.ldif

base.ldif 파일안에 아래와 같이 추가합니다.

dn: dc=ngle,dc=co,dc=kr
dc: ngle
objectClass: top
objectClass: domain

dn: cn=ldapadm, dc=ngle,dc=co,dc=kr
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager

dn: ou=People, dc=ngle,dc=co,dc=kr
objectClass: organizationalUnit
ou: People

dn: ou=Group, dc=ngle,dc=co,dc=kr
objectClass: organizationalUnit
ou: Group

base.ldif 파일을 작성했다면 아래 명령으로 directory structure를 빌드합니다.

ldapadd -x -W -D "cn=ldapadm,dc=ngle,dc=co,dc=kr" -f base.ldif

$ sudo ldapadd -x -W -D "cn=ldapadm,dc=ngle,dc=co,dc=kr" -f base.ldif
Enter LDAP Password: 
adding new entry "dc=ngle,dc=co,dc=kr"

adding new entry "cn=ldapadm, dc=ngle,dc=co,dc=kr"

adding new entry "ou=People, dc=ngle,dc=co,dc=kr"

adding new entry "ou=Group, dc=ngle,dc=co,dc=kr"

이제 ldap 설정은 완료되었습니다.

우선 예제로 tongchun 계정을 등록해 보겠습니다.

역시나 ldif 파일을 만들고 설정에 업로드 합니다.

$ sudo vim tongchun.ldif

tongchun.ldif 파일에 아래와 같이 엔트리를 작성합니다.

dn: uid=tongchun,ou=People,dc=ngle,dc=co,dc=kr
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: tongchun
uid: tongchun
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/tongchun
loginShell: /bin/bash
gecos: tongchun [Admin (at) nGle]
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7

아래 명령으로 업데이트해 유저를 생성합니다.

ldapadd -x -W -D "cn=ldapadm,dc=ngle,dc=co,dc=kr" -f tongchun.ldif

$ sudo ldapadd -x -W -D "cn=ldapadm,dc=ngle,dc=co,dc=kr" -f tongchun.ldif
Enter LDAP Password: 
adding new entry "uid=tongchun,ou=People,dc=ngle,dc=co,dc=kr"

등록한 tongchun 계정에 아래 명령으로 비번을 설정합니다.

ldappasswd -s ngle1234 -W -D "cn=ldapadm,dc=ngle,dc=co,dc=kr" -x "uid=tongchun,ou=People,dc=ngle,dc=co,dc=kr"

-s 옵션은 설정하려는 비번

-D ldapadm 정보

-x 비번을 설정하려는 유저 정보

$ sudo ldappasswd -s ngle1234 -W -D "cn=ldapadm,dc=ngle,dc=co,dc=kr" -x "uid=tongchun,ou=People,dc=ngle,dc=co,dc=kr"
Enter LDAP Password: 

등록된 유저 정보를 검색하려면 ldapsearch 명령을 사용하면 됩니다.

ldapsearch -x cn=tongchun -b dc=ngle,dc=co,dc=kr

$ sudo ldapsearch -x cn=tongchun -b dc=ngle,dc=co,dc=kr
# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: cn=tongchun
# requesting: ALL
#

# tongchun, People, ngle.co.kr
dn: uid=tongchun,ou=People,dc=ngle,dc=co,dc=kr
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: tongchun
uid: tongchun
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/tongchun
loginShell: /bin/bash
gecos: tongchun [Admin (at) nGle]
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
userPassword:: e1NTSEF9UjlwQWVJbzN0T3VEaDM2MmgzTW9xeEtpbzd3dlp3dXk=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

여기까지 ldap server 설치와 유저 생성 예제였습니다.


추가로, ldap 서버에 방화벽이 실행되고 있다면 ldap 서비스를 허용할 수 있습니다.

ldap 포트는 TCP 389 입니다.

$ sudo firewall-cmd --permanent --add-service=ldap
$ sudo firewall-cmd --reload

추가로, ldap server의 로그를 찍고싶다면 rsyslog 설정 파일(/etc/rsyslog.conf)에 설정을 추가합니다.

$ sudo vim /etc/rsyslog.conf

ldap 로그 설정 항목을 추가합니다.

local4.* /var/log/ldap.log

설정파일을 저장하고 rsyslog를 재시작해줍니다.

$ sudo systemctl restart rsyslog


'Tools > LDAP & CAS' 카테고리의 다른 글

OpenLDAP + phpLDAPAdmin 설치 (on Ubuntu)  (1) 2019.03.26
LDAP Client 설치 (on CentOS)  (2) 2018.10.12
CAS 서버 설치 (on CentOS)  (0) 2018.10.11
Comments