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 // 잘 기록해두기.
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"
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
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
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
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 []:
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
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
-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
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
changetype: modify
replace: olcTLSCACertificatePath
olcTLSCACertificatePath: /etc/openldap/certs
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/server.crt
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/server.crt
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/server.key
===========================================================
#### 여기까지 도메인(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/nis.ldif
#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
( 에러 안나야 합니다. 이 작업이 안되면, 밑에 부서 추가도 당연히 에러납니다 )
# 이제 각 부서(디렉토리)를 구분하는 스키마 업데이트
===========================================
# vi directory.ldif
dn: dc=testldap,dc=co,dc=krdc: 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.ldifroot@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"
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
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"
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
# 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)
/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
root@TEST1:/etc/openldap/certs# systemctl restart nslcd
// ldap 클라이언트 재시작.
root@TEST1:/etc/openldap/certs# getent passwd ldapuser1
root@TEST1:/etc/openldap/certs# getent passwd ldapuser1
// ldap 서버에 생성한 ldapuser1 이라는 계정정보 불러오기.
ldapuser1:*:9999:100:ldapuser1 [Admin (at) testldap]:/home/guest/ldapuser1:/bin/bash // 서버에서 계정 정보 가져온 것 확인.
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 // 이 라인을 추가
/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 쪽은 저녁에 추가 하겠습니다. ( 오늘저녁이라고는 말 안했... )
'Linux ( Cent OS ) > RHCSA ' 카테고리의 다른 글
[RHCSA] CRON 설정 (0) | 2019.05.15 |
---|---|
[RHCSA] ACL 문제 (2) | 2019.05.13 |
[RHCSA] NFS Mount Configure as "Autofs" (2) | 2019.05.12 |
[RHCSA] (GUI) NTP Configuration (0) | 2019.05.12 |
[RHCSA] 시스템에 액세스하기 위해 부팅 프로세스 인터럽트 (0) | 2019.04.18 |