Openldap Server : 192.168.0.5    /etc/hosts : testldap.co.kr 
Openldap Client : 192.168.0.3     /etc/hosts : test1   
Openldap User : Client 는 Server 에서 생성된 ldapuser1 란 계정에 접속할 수 있어야 함. 
                             접속시 autofs 로 /home/guest/계정명  으로 홈디렉토리 생성

CentOS 7.6 Lastest 

※ 서버 구축은 RHCSA 안 나옵니다. 실제로 되는지 확인차 해본겁니다. 
LDAP 서버가 에러도 많이 나고 복잡합니다. 


# OpenLdap Server 구축 ( 192.168.0.5 ) 

#  yum install -y openldap-servers openldap-clients   nss-pam-ldapd                // 기본 패키지 인스톨
# systemctl start slapd               // 데몬 시작 ( 389 포트 )
# systemctl enable slapd          // 자동시작 등록
# netstat -atunp | grep LISTEN 

# /etc/hosts 에서 hosts설정  ( 사설이니 Serverf & Client 둘다 해두면 좋음 )
192.168.0.5 testldap testldap.co.kr

#ping testldap.co.kr
PING testldap (192.168.0.5) 56(84) bytes of data.
64 bytes from testldap (192.168.0.5): icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from testldap (192.168.0.5): icmp_seq=2 ttl=64 time=0.030 ms
.
.


openldap의 환경 설정은 /etc/openldap/slapd.d/cn\=config/olcDatabase=~.ldif 를 읽어오는데,
해당 파일을 수동 편집하는게 아니라 Config 양식을 생성 후,  ldapmodify 명령어로 업데이트를 하는 방식입니다.
위에 /usr/share/openldap-server/slapd.ldif 복사해온 템플렛을 적당히 잘라서 수정 후 사용하면 좋습니다. 

# cp /usr/share/openldap-servers/slapd.ldif /etc/openldap/slapd.conf                    // 환경설정 템플릿을 복사

# slappasswd                                   // ldap 관리자 패스워드 설정
New password:
Re-enter new password:
{SSHA}gsZV8FomyBMr7k82Cp7M1RntnCq0/I1B                    // 잘 기록해두기.


# vi /etc/openldap/domain.ldif                     // 서버 도메인 구성 관련 환경설정 파일 생성

================================================
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=testldap,dc=co,dc=kr               // dc 설정 ( testldap.co.kr ) 

dn: olcDatabase={2}hdb,cn=config               
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=gitcluster,dc=co,dc=kr          // dc 설정 ( Manager 계정 = root ) 

dn: olcDatabase={2}hdb,cn=config
changetype: modify               // 원본 설정 수정 선언
replace: olcRootPW               // RootPW 설정 선언
olcRootPW: {SSHA}gsZV8FomyBMr7k82Cp7M1RntnCq0/I1B             // slappassword 에서 만든 패스워드 값 그대로 기입. 
================================================


# ldapmodify -H ldapi:/// -f domain.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"



# vi /etc/openldap/monitor.ldif               // ldap 모니터링을 관리자 계정만 볼 수 있도록 환경 설정 
================================================
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=Manager,dc=testldap,dc=co,dc=kr" read by * none
================================================


#ldapmodify -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"


# Ldapserver 에 TLS 인증서 적용하기

# 프라이빗키 생성
# cd /etc/pki/tls/certs
# make server.key                        // 우선 Private Key 자동으로 만들어줍니다. 
openssl rsa -in server.key -out server.key                 
Enter pass phrase for server.key:                    // 프라이빗키 패스워드 입력하세요.
writing RSA key


#root@ldap-server:/etc/pki/tls/certs# make server.csr                         // Pravate Key 을 사용하여 CSR ( TLS ) 인증서 파일 분리하는 MAKE 입니다. 
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:kr
State or Province Name (full name) []:seoul
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:kt
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:               // 이 부분들은 브라우저에서 인증서 정보 표기되는건데.. 알아서..
Email Address []:moo

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:                    // 인증서 패스워드 지정안해도 됩니다. ( 지정하면 아파치 등등 기동할때 패스워드 물어봄 ) 
An optional company name []:

#openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650               //  만들어진 두 파일을 BASE 로 하는 CRT 파일 분리하기. 
Signature ok
subject=/C=kr/ST=seoul/L=Default City/O=kt/emailAddress=moo
Getting Private key

/etc/openldap/certs                    // ldap 인증서 저장 경로로 위 파일들을 복사
# cp server.* /etc/openldap/certs 
# cd /etc/openldap/certs
# chown -R ldap:ldap server*                    //  해당 파일들 소유 및 그룹 설정.
=========================================
root@ldap-server:/etc/openldap/certs# ll
합계 92

-rw-r--r--. 1 root root 65536 5월 14 13:18 cert8.db
-rw-r--r--. 1 root root 16384 5월 14 13:18 key3.db
-r--r-----. 1 root ldap 45 5월 14 10:26 password
-rw-r--r--. 1 root root 16384 5월 14 10:26 secmod.db
-rw-r--r--. 1 ldap ldap 1151 5월 14 23:05 server.crt
-rw-------. 1 ldap ldap 980 5월 14 23:01 server.csr
-rw-------. 1 ldap ldap 1679 5월 14 23:01 server.key
=========================================

## 인증서 관련 환경 설정파일을 만들어서 ldapmodify 로 업데이트 
csr 인증서는 클라이언트 다운로드용도로 쓰려고 했는데, 다시 보니 .pem 포맷 요구 하네요... 일단 이대로 해도 되기는 하니까 진행하겠습니다. 

===========================================================
# vi certs.ldif
dn: cn=config
objectClass: olcGlobal
cn: config          // 이 첫 부분 정의를 안해주면 알수없는 오류로 업데이트가 안됩니다. ( 해당 내용은 /usr/src/share 에 있던 TLS 부분 템플릿 내용 입니다 )
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid     

dn: cn=config
changetype: modify
replace: olcTLSCACertificatePath
olcTLSCACertificatePath: /etc/openldap/certs

dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/server.crt

dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/server.key
===========================================================

#ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif                    // 인증서 업데이트


#### 여기까지 도메인(DN,DC 설정) , LDAP 관리자 (모니터링 ) , 서버 인증서 업로드 작업까지 완료 되었습니다
#### 이제 유저 계정 관련 스키마와 계정생성을 할 차례.

# 유저 DB ( ldap 디렉토리 설정 및 Account 추가 ) 설정
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG               // ldapuser 디렉토리 설정 컨피그 템플릿을 복사
# chown -R ldap:ldap /var/lib/ldap                    // 해당 폴더 전체 ldap 소유로 설정.

# 기본 디렉토리 DB 구조를 추가
#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldifSASL/EXTERNAL authentication started
#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
( 에러 안나야 합니다. 이 작업이 안되면, 밑에 부서 추가도 당연히 에러납니다 ) 

# 이제 각 부서(디렉토리)를 구분하는 스키마 업데이트
===========================================
# vi directory.ldif
dn: dc=testldap,dc=co,dc=kr
dc: testldap
objectClass: top
objectClass: domain

dn: cn=Manager ,dc=testldap,dc=co,dc=kr               // testldap.co.kr 도메인의 LDAP 서버에 Manager 정의
objectClass: organizationalRole
cn: Manager
description: LDAP Manager

dn: ou=People,dc=testldap,dc=co,dc=kr                    // People 구조 정의
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=testldap,dc=co,dc=kr                    // Group 구조 정의
objectClass: organizationalUnit
ou: Group
===========================================

# 환경설정에 구조 추가하기 ( add관련 설정은 초기 설정했던 관리자의 Password 를 물어 봅니다. ) 
# ldapadd -x -W -D "cn=Manager,dc=testldap,dc=co,dc=kr" -f directory.ldif


root@ldap-server:/etc/openldap# ldapadd -x -W -D "cn=Manager,dc=testldap,dc=co,dc=kr" -f directory.ldif            // 구조 업데이트 실행
Enter LDAP Password:
adding new entry "dc=testldap,dc=co,dc=kr"
adding new entry "cn=Manager ,dc=testldap,dc=co,dc=kr"
adding new entry "ou=People,dc=testldap,dc=co,dc=kr"
adding new entry "ou=Group,dc=testldap,dc=co,dc=kr"


##디렉토리 구조 완료.
##이제 LDAP 유저만 추가하면 됩니다.

ldapuser1 라는 계정을 만들어 보겠습니다

vi ldapuser1.ldif
===============================================
dn: uid=ldapuser1,ou=People,dc=testldap,dc=co,dc=kr                    // testldap.co.kr 도메인의 People ou(그룹 조직)에 ldapuser1 이라는 dn(여기서는 계정) 을 선언.
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser1
uid: ldapuser1
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/guest/ldapuser1        // 이 부분을 나중에 autofs
loginShell: /bin/bash
gecos: ldapuser1 [Admin (at) testldap]
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
==============================================


ldapadd -x -W -D "cn=Manager,dc=testldap,dc=co,dc=kr" -f ldapuser1.ldif               // 계정 생성. Manager ( 관리자 ) 패스워드 물어봄. 
Enter LDAP Password:
adding new entry "uid=ldapuser1,ou=People,dc=testldap,dc=co,dc=kr"



## 서버에 ldapuser1 이라는 계정이 생성 됌. 
## 확인하기
#  ldapsearch -x cn=ldapuser1 -b dc=testldap,dc=co,dc=kr
# extended LDIF
#
# LDAPv3
# base <dc=testldap,dc=co,dc=kr> with scope subtree
# filter: cn=ldapuser1
# requesting: ALL
#

# ldapuser1, People, testldap.co.kr                    // 계정이 존재하면 해당 내용들이 출력 됩니다. ( 계정이 없으면 단순 result 출력만 나옵니다 ) 
dn: uid=ldapuser1,ou=People,dc=testldap,dc=co,dc=kr
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser1
uid: ldapuser1
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/guest/ldapuser1
loginShell: /bin/bash
gecos: ldapuser1 [Admin (at) testldap]
userPassword:: e2NyeXB0fXg=
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


서버 구성 및 사용자 계정 추가까지 완료.

마지막으로 LDAP 계정의 Homedirectory Mount를 위해 NFS 구성해야 합니다

# yum -y install nfs-utils
# systemctl start nfs
# systemctl enable nfs
# mkdir -p /home/guest/ldapuser1
# chmod -R 777 /home/guest/ldapuser1
# vi /etc/exports
/home/guest/ldapuser1 -rw *(rw,no_root_squash)

# showmount -e
/home/guest/ldapuser1 *

# exportfs -v
/home/guest/ldapuser1
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

#마운트 테스트
#mount localhost://home/guest/ldapuser1 /mnt
#df -Th 
localhost:/home/guest/ldapuser1 8.0G 1.6G 6.5G 20% /mnt

#umount /mnt




이제 클라이언트에서 해당 계정을 확인해야 합니다.



LDAP Client ( 192.168.0.3 ) 

#/etc/hosts 에 server hostname 설정 
( 설정 안 하면 하단의 ldapserver에 ip직접 입력해도 됩니다 ) 

#yum install -y ldap-clients nss-pam-ldapd                     // 클라이언트와 로컬인증관련 모듈 패키지 설치.

root@TEST1:/etc/openldap/certs# authconfig --enableldap --enableldapauth --ldapserver=testldap.co.kr --ldapbasedn="dc=testldap","dc=co","dc=kr" --update                              
// 서버에 CLI 로 직접 연결. 아무 말 안 나오면 접속

root@TEST1:/etc/openldap/certs# systemctl restart nslcd                    
// ldap 클라이언트 재시작. 

root@TEST1:/etc/openldap/certs# getent passwd ldapuser1                    
// ldap 서버에 생성한 ldapuser1 이라는 계정정보 불러오기.
ldapuser1:*:9999:100:ldapuser1 [Admin (at) testldap]:/home/guest/ldapuser1:/bin/bash                    // 서버에서 계정 정보 가져온 것 확인.


#su ldapuser1                     // ldapuser1 로 로그인 성공 확인. 다만 설정된 /home/guest/ldapuser1 경로가 없다고 뜸.

해당 문제를 위해 LDAP 서버에 있는 NFS Homedir의 autofs 가 필요해짐.

#### autofs 작업
#yum install -y autofs
#systemctl start autofs
#systemctl enable autofs
#vi /etc/auto.master

/misc /etc/auto.misc
/home/guest /etc/auto.guest              // 이 라인을 추가

#vi /etc/auto.guest 파일 생성
ldapuser1 -rw,vers=3 testldap.co.kr:/home/guest/ldapuser1        // 마운트 정보.

* & 로 해도 잘 되는 부분 확인 했습니다.


#systemctl restart autofs            // 재시작

#su - ldapuser1            // 환경설정 유지하면서 유저 변경
마지막 로그인: 수 5월 15 17:30:55 KST 2019 일시 pts/1

-bash-4.2$ pwd                    // 마운트된 홈 경로 확인
/home/guest/ldapuser1

-bash-4.2$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.7G 5.4G 1.3G 81% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 45M 451M 10% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/sda1 297M 146M 152M 49% /boot
tmpfs 100M 0 100M 0% /run/user/1000
/dev/mapper/redhat-fedora 772M 828K 734M 1% /lvm1
tmpfs 100M 32K 100M 1% /run/user/0
testldap.co.kr:/home/guest/ldapuser1 8.0G 1.6G 6.5G 20% /home/guest/ldapuser1                // 자동마운트된 부분 확인


클라이언트에서 LDAP 유저로 로그인 시, 자동 HOME 디렉토리 마운트되는 부분 확인 되었습니다.


필요한 부분

1. 클라이언트의 인증서 사용 옵션 ( Cli 로 하려면 conf 파일 수정해야 함 ) 
2. 시험에선 root 라서 상관이 없으나(위랑 똑같이 될겁니다)
로컬에서 일반유저가 LDAP 유저로 SU Password 로그인 하려면 nss_pam 연동한 /etc/security의 PAM 설정이 필요할 것으로 보임. 
3. authconfig-tui / gtk 쪽은 저녁에 추가 하겠습니다. ( 오늘저녁이라고는 말 안했... ) 







블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,