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

보시다시피, 여러 가지 다양한 응용 시나리오가 있지만, 이 가이드에서는 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란 무엇인가?
LDAP는 Lightweight Directory Access Protocol의 약자로, 클라이언트가 네트워크를 통해 중앙에 저장된 정보(예: 로그인 쉘 디렉토리, 홈 디렉토리의 절대 경로 및 기타 일반적인 시스템 사용자 정보)에 액세스할 수 있게 하는 프로토콜 세트로, 이 정보는 다양한 위치에서 액세스할 수 있거나 대규모의 최종 사용자에게 이용 가능해야 합니다(다른 예로는 회사의 모든 직원의 집 주소 및 전화번호 디렉토리가 있을 수 있습니다).
이러한 정보(및 그 외)를 중앙에 보관하면 권한이 부여된 모든 사용자가 더 쉽게 유지하고 액세스할 수 있습니다.
다음 다이어그램은 LDAP의 간단한 다이어그램을 제공하며 아래에서 자세히 설명됩니다:

상기 다이어그램에 대한 자세한 설명.
- LDAP 디렉토리의 항목은 단일 단위 또는 정보를 나타내며 Distinguished Name이라고 불리는 것으로 고유하게 식별됩니다.
- 속성은 항목과 관련된 정보 조각(예: 주소, 사용 가능한 연락처 전화번호 및 이메일 주소)입니다.
- 각 속성은 공백으로 구분된 목록으로 구성된 하나 이상의 값이 할당됩니다. 항목당 고유한 값은 Relative Distinguished Name이라고 합니다.
그렇다면, 서버 및 클라이언트 설치를 진행해 봅시다.
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.
이 디렉터리의 소유권을 재귀적으로 변경하기 전에
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chown -R ldap:ldap /var/lib/ldap
4.OpenLDAP 관리 사용자를 설정하고 비밀번호를 할당하십시오:
# slappasswd
다음 이미지에서 보여지는 대로:

다음 내용을 포함하는 LDIF 파일(ldaprootpasswd.ldif)을 만드십시오:
dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD
여기서:
- PASSWORD은 이전에 얻은 해시된 문자열입니다.
- cn=config은 전역 구성 옵션을 나타냅니다.
- 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
출력은 다음과 유사해야 합니다:

그리고 /etc/openldap/schema
디렉터리에서 일부 기본 LDAP 정의를 가져옵니다:
# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

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

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

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

마찬가지로 방금 만든 사용자 항목을 삭제할 수 있습니다:
# 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 서버에 대한 기본 인증 설정 방법을 설명했습니다. 현재 가이드에 설명된 설정을 더 구성하려면 RHEL 7 시스템 관리자 가이드의 제 13장 – LDAP 구성을 참조하시고 TLS를 사용한 보안 설정에 특히 주의하시기 바랍니다.
댓글 양식을 사용하여 질문이 있으면 언제든지 남겨주세요.
Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/