RHEL 7에서 LDAP 기반 인증 설정하기 – RHCSA 시리즈: 제14부

이 글에서는 먼저 LDAP의 기본 사항(LDAP가 무엇인지, 어디에 사용되고 왜 사용되는지)을 간략하게 소개하고, Red Hat Enterprise Linux 7 시스템을 사용하여 LDAP 서버를 설정하고 클라이언트를 구성하여 인증하는 방법을 보여드리겠습니다.

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

보시다시피, 여러 가지 다양한 응용 시나리오가 있지만, 이 가이드에서는 LDAP 기반 인증에만 집중하겠습니다. 또한, 주제의 광범위함 때문에 여기서는 기본 사항만 다루겠지만, 요약에 있는 문서를 참조하시면 보다 심화된 세부 사항을 확인하실 수 있습니다.

같은 이유로, 간결성을 위해 LDAP 도구의 매뉴얼 페이지에 대한 참조를 생략했지만, 해당 설명은 쉽게 접근할 수 있습니다(man ldapadd, 예를 들어).

이제 시작하겠습니다.

테스트 환경

테스트 환경은 두 대의 RHEL 7 상자로 구성되어 있습니다:

Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com

원하시면 12부: RHEL 7 설치 자동화에서 Kickstart를 사용하여 설치한 기계를 클라이언트로 사용하실 수 있습니다.

LDAP란 무엇인가?

LDAPLightweight Directory Access Protocol의 약자로, 클라이언트가 네트워크를 통해 중앙에 저장된 정보(예: 로그인 쉘 디렉토리, 홈 디렉토리의 절대 경로 및 기타 일반적인 시스템 사용자 정보)에 액세스할 수 있게 하는 프로토콜 세트로, 이 정보는 다양한 위치에서 액세스할 수 있거나 대규모의 최종 사용자에게 이용 가능해야 합니다(다른 예로는 회사의 모든 직원의 집 주소 및 전화번호 디렉토리가 있을 수 있습니다).

이러한 정보(및 그 외)를 중앙에 보관하면 권한이 부여된 모든 사용자가 더 쉽게 유지하고 액세스할 수 있습니다.

다음 다이어그램은 LDAP의 간단한 다이어그램을 제공하며 아래에서 자세히 설명됩니다:

LDAP Diagram

상기 다이어그램에 대한 자세한 설명.

  1. LDAP 디렉토리의 항목은 단일 단위 또는 정보를 나타내며 Distinguished Name이라고 불리는 것으로 고유하게 식별됩니다.
  2. 속성은 항목과 관련된 정보 조각(예: 주소, 사용 가능한 연락처 전화번호 및 이메일 주소)입니다.
  3. 각 속성은 공백으로 구분된 목록으로 구성된 하나 이상의 이 할당됩니다. 항목당 고유한 값은 Relative Distinguished Name이라고 합니다.

그렇다면, 서버 및 클라이언트 설치를 진행해 봅시다.

LDAP 서버 및 클라이언트 설치 및 구성

에서는 LDAP이 으로 구현됩니다. 서버 및 클라이언트를 설치하려면 각각 다음 명령을 사용하십시오:

# yum update && yum install openldap openldap-clients openldap-servers
# yum update && yum install openldap openldap-clients nss-pam-ldapd

설치가 완료되면 몇 가지를 살펴보아야 합니다. 다음 단계는 명시적으로 언급되지 않는 한 서버에서만 수행해야 합니다:

1.다음 불리언을 영구적으로 활성화하여 방해하지 않는지 확인하십시오. 이는 서버와 클라이언트 모두에 대해 적용됩니다:

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

2.서비스를 활성화하고 시작하십시오:

# systemctl enable slapd.service
# systemctl start slapd.service

또한 을 사용하여 서비스를 비활성화, 재시작 또는 중지할 수도 있습니다:

# systemctl disable slapd.service
# systemctl restart slapd.service
# systemctl stop slapd.service

3. 서비스가 ldap 사용자로 실행되므로 (다음 명령으로 확인할 수 있음: ), 해당 사용자는 서버가 루트로만 실행할 수 있는 관리 도구에 의해 생성된 항목을 수정할 수 있도록 디렉터리를 소유해야 합니다 (이에 대한 자세한 내용은 잠시 후에 설명됨).

이 디렉터리의 소유권을 재귀적으로 변경하기 전에 의 샘플 데이터베이스 구성 파일을 복사하십시오:

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown -R ldap:ldap /var/lib/ldap

4.OpenLDAP 관리 사용자를 설정하고 비밀번호를 할당하십시오:

# slappasswd

다음 이미지에서 보여지는 대로:

Set LDAP Admin Password

다음 내용을 포함하는 LDIF 파일(ldaprootpasswd.ldif)을 만드십시오:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

여기서:

  1. PASSWORD은 이전에 얻은 해시된 문자열입니다.
  2. cn=config은 전역 구성 옵션을 나타냅니다.
  3. olcDatabase은 특정 데이터베이스 인스턴스 이름을 나타내며 일반적으로 /etc/openldap/slapd.d/cn=config 내부에서 찾을 수 있습니다.

이전에 제공된 이론적 배경을 참조하여 ldaprootpasswd.ldif 파일은 LDAP 디렉터리에 항목을 추가합니다. 그 항목에서 각 줄은 속성: 값 쌍을 나타냅니다(dn, changetype, add 및 olcRootPW는 속성이고 콜론 오른쪽의 문자열은 해당 값입니다).

나중에 진행될 때 이를 고려하십시오. 이 글의 나머지 부분에서는 동일한 공통 이름 (cn=)을 사용하며 각 단계는 이전 단계에 의존합니다.

5. 이제 ldap 서버를 참조하는 URI를 지정하여 해당 LDAP 항목을 추가합니다. 여기서 프로토콜/호스트/포트 필드만 허용됩니다.

# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif 

출력은 다음과 유사해야 합니다:

LDAP Configuration

그리고 /etc/openldap/schema 디렉터리에서 일부 기본 LDAP 정의를 가져옵니다:

# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
LDAP Definitions

6. LDAP에서 데이터베이스에 도메인을 사용하도록 설정합니다.

다른 LDIF 파일을 만들어 해당 파일을 ldapdomain.ldif로 지정하고, 적절한 도메인 (도메인 구성 요소 dc=) 및 암호를 사용하여 다음 내용으로 바꿉니다:

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=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

그럼 다음과 같이 로드하십시오:

# ldapmodify -H ldapi:/// -f ldapdomain.ldif
LDAP Domain Configuration

7. 이제 LDAP 디렉토리에 몇 가지 항목을 추가할 시간입니다. 속성과 값은 다음 파일에서 콜론 (:)으로 구분됩니다. 우리는 이 파일을 baseldapdomain.ldif로 지정할 것입니다:

dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

LDAP 디렉토리에 항목을 추가하십시오:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif
Add LDAP Domain Attributes and Values

8. ldapuser라는 LDAP 사용자를 만듭니다 (adduser ldapuser) 그런 다음 ldapgroup.ldif에 LDAP 그룹에 대한 정의를 만듭니다.

# adduser ldapuser
# vi ldapgroup.ldif

다음 내용을 추가하십시오.

dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004

gidNumber는 ldapuser의 GID (그룹 ID)입니다. 이는 /etc/group에서 확인할 수 있습니다. 그리고 로드하십시오:

# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif

9. 사용자 ldapuser에 대한 정의가 포함된 LDIF 파일을 추가하십시오 (ldapuser.ldif):

dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

그리고 로드하십시오:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif
LDAP User Configuration

마찬가지로 방금 만든 사용자 항목을 삭제할 수 있습니다:

# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. 방화벽을 통해 통신을 허용하십시오:

# firewall-cmd --add-service=ldap

11. 마지막으로 LDAP를 사용하여 클라이언트의 인증을 허용하십시오.

이 최종 단계에서 우리를 돕기 위해 우리는 시스템 인증 리소스를 구성하는 인터페이스 인 authconfig 유틸리티를 사용할 것입니다.

다음 명령을 사용하여 LDAP 서버에 대한 인증이 성공한 후 요청된 사용자의 홈 디렉토리가 없으면 만들어집니다:

# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
LDAP Client Configuration

요약

이 문서에서는 LDAP 서버에 대한 기본 인증 설정 방법을 설명했습니다. 현재 가이드에 설명된 설정을 더 구성하려면 RHEL 7 시스템 관리자 가이드의 제 13장 – LDAP 구성을 참조하시고 TLS를 사용한 보안 설정에 특히 주의하시기 바랍니다.

댓글 양식을 사용하여 질문이 있으면 언제든지 남겨주세요.

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/