Linux의 LDAP 인증
이 페이지에서
- 요구 사항\n
- 소개
- OpenLDAP 구성
- 디렉토리로 데이터 마이그레이션/추가
- 클라이언트 구성
- 아파치 mod_auth_ldap
- LDAP용 관리 도구
- 기타 LDAP 인식 애플리케이션\n
- 요약
이 하우투는 사용자를 LDAP에 저장하고 이에 대해 일부 서비스를 인증하는 방법을 보여줍니다. 배포판/시스템에 따라 다르므로 특정 패키지를 설치하는 방법은 보여주지 않겠습니다. LDAP 인증/사용자 저장에 필요한 모든 구성 요소의 "순수한" 구성에 중점을 둘 것입니다. 하우투는 어떻게든 일반 passwd/shadow 인증에서 마이그레이션한다고 가정하지만 처음부터 수행하는 사람들에게도 적합합니다.
요구 사항
- 오픈LDAP\n
- pam_ldap
- nss_ldap
- PADL 마이그레이션 도구
소개
우리가 달성하고자 하는 것은 사용자를 LDAP에 저장하고 LDAP(직접 또는 pam)에 대해 인증하고 사람이 이해할 수 있는 방식으로 이를 관리할 수 있는 도구를 갖는 것입니다.
이렇게 하면 LDAP를 지원하거나 PAM->LDAP 게이트웨이 역할을 하는 PAM LDAP 모듈로 폴백하는 모든 소프트웨어를 사용할 수 있습니다.
LDAP 아이디어에 대한 자세한 내용은 Wikipedia에서 찾을 수 있습니다. LDAP wikipedia
OpenLDAP 구성
OpenLDAP는 slapd 및 slurpd 데몬으로 구성됩니다. 이 하우투는 복제 없이 하나의 LDAP 서버를 다루므로 slapd에만 집중할 것입니다. 또한 OpenLDAP 설치를 설치하고 초기화했다고 가정합니다(시스템/배포에 따라 다름). 그렇다면 구성 부분으로 이동하겠습니다.
내 시스템(Gentoo)에서 OpenLDAP 구성은 /etc/openldap에 저장되며 /etc/openldap/slapd.conf 파일에 관심이 있습니다. 하지만 먼저 구성 파일에 입력하기 위해 LDAP 관리자용 비밀번호를 생성해야 합니다.
slappasswd -h {md5}
구성은 다음과 같습니다.
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema allow bind_v2
pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args
modulepath /usr/lib/openldap/openldap
access to attrs=userPassword by dn="uid=root,ou=People,dc=domain,dc=com" write by dn="cn=Manager,dc=domain,dc=com" write by anonymous auth by self write by * none access to dn.base="" by * read
access to * by dn="cn=Manager,dc=domain,dc=com" write by * read database bdb suffix "dc=domain,dc=com"
rootdn "cn=Manager,dc=domain,dc=com" rootpw {MD5}Tk1sMytv5ipjr+Vhcf03JQ==
directory /var/lib/openldap-data index objectClass eq
필요에 따라 접미사와 경로를 변경해야 합니다.
사용자가 암호를 변경하는 데 필요한 몇 가지 기본 ACL이 있는 기본 옵션입니다. 더 많은 기능을 원하시면 OpenLDAP 매뉴얼을 읽어보세요. 이제 slapd에 대한 적절한 구성이 있으면 데몬을 시작할 수 있습니다.
service slapd start
slapd에 전달되는 인수를 담당하는 구성 파일에 다음과 같은 내용이 있음을 기억하십시오(경로는 slapd.sock을 가리켜야 함).
OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"
이제 openldap이 제대로 실행되고 작동하는지 테스트할 수 있습니다. 아직 디렉토리에 데이터가 없지만 cn=Manager,dc=domain,dc=com으로 바인딩을 시도할 수 있습니다. 암호를 묻는 메시지가 표시되면 생성한 암호를 사용해야 합니다(물론 일반 텍스트 버전 :):
ldapsearch -D "cn=Manager,dc=domain,dc=com" -W
디렉터리로 데이터 마이그레이션/추가
이제 실행 중인 LDAP 서버가 있으면 항목을 만들거나 마이그레이션하여 데이터로 채워야 합니다. 일반 /etc/passwd, /etc/shadow , /etc/groups에서 기존 항목을 마이그레이션하는 방법을 보여 드리겠습니다.
첫 번째 단계는 필요에 따라 mogrationtools를 구성하는 것입니다. Gentoo의 구성 파일은 /usr/share/migrationtools/migrate_common.ph에 있습니다.
일반적으로 다음 항목만 변경하면 됩니다.
$DEFAULT_BASE = "dc=domain,dc=com"; $EXTENDED_SCHEMA = 1;
이제 데이터를 마이그레이션할 준비가 되었습니다(실제로 내보내기 명령 없이도 작동함).
export ETC_SHADOW=/etc/shadow
./migrate_base.pl > /tmp/base.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
이제 LDAP 서버가 이해하는 형식의 데이터가 있습니다. 구문에 익숙해지려면 텍스트 편집기로 파일 중 하나를 여십시오. 그런 다음 ldifs에서 데이터를 추가할 수 있습니다.
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldif
일부 데이터를 검색해 볼 수 있습니다.
ldapsearch uid=foouser
클라이언트 구성
클라이언트란 LDAP 서버에 연결하여 사용자를 얻고 권한을 부여하는 시스템을 의미합니다. LDAP 서버가 실행되는 시스템일 수도 있습니다. 두 경우 모두 /etc/ldap.conf, /etc/nsswitch.conf 및 /etc/pam.d/system-auth의 세 파일을 편집해야 합니다.
ldaps 클라이언트인 ldap.conf부터 시작하겠습니다.
BASE dc=domain, dc=com scope sub suffix "dc=domain,dc=com" ## when you want to change user's password by root rootbinddn cn=Manager,dc=domain,dc=com ## there are needed when your ldap dies timelimit 5 bind_timelimit 5 uri ldap://ldap.domain.com/ pam_password exop ldap_version 3 pam_filter objectclass=posixAccount pam_login_attribute uid pam_member_attribute memberuid
nss_base_passwd ou=Computers,dc=cognifide,dc=pl nss_base_passwd ou=People,dc=cognifide,dc=pl nss_base_shadow ou=People,dc=cognifide,dc=pl nss_base_group ou=Group,dc=cognifide,dc=pl nss_base_hosts ou=Hosts,dc=cognifide,dc=pl
이제 nsswitch.conf 및 pam을 위한 시간입니다.
다음을 nsswitch.conf에 추가하십시오.
passwd: files ldap shadow: files ldap group: files ldap
그리고 system-auth(또는 로그인, sshd 등과 같은 항목)를 다음과 같이 변경합니다.
auth required pam_env.so auth sufficient pam_unix.so likeauth nullok auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account sufficient pam_unix.so account sufficient pam_ldap.so account required pam_ldap.so password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 password sufficient pam_unix.so nullok md5 shadow use_authtok password sufficient pam_ldap.so use_first_pass password required pam_deny.so session required pam_limits.so session required pam_unix.so session optional pam_ldap.so
테스트할 시간입니다. 이를 위한 최고의 도구는 오래된 getent입니다. 시스템에서 사용자를 선택하고 다음을 발행하십시오.
getent passwd | grep foouser
결과를 두 번 가져와야 합니다. 그렇다면 nss_ldap이 제대로 작동합니다. pam 부분은 /etc/passwd에서 사용자를 삭제하고 ssh를 통해 로그인을 시도하여 테스트할 수 있습니다.
아파치 mod_auth_ldap
Apache에서 LDAP 인증을 받으려면 mod_auth_ldap 모듈을 로드해야 합니다.
LoadModule mm_auth_ldap_module modules/mod_auth_ldap.so
이제 .htaccess를 다음과 같이 만드는 것으로 충분합니다.
AuthName "Restricted" AuthType Basic AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid AuthLDAPBindDN "cn=Manager,dc=domain,dc=com" AuthLDAPBindPassword "your_secret_secret_password_to_ldap_admin" require valid-user
이 방법은 WebDAV 하위 버전 인증에도 사용할 수 있습니다.
LDAP용 관리 도구
OpenLDAP 서버를 관리하는 데 사용하도록 권장하는 도구는 거의 없습니다.
- phpldapadmin - 웹 기반 도구
- ldapvi - vim 브라우징
- PADL 마이그레이션 도구 - 마이그레이션 도구
- IDEALX sambaldap 도구 - samba LDAP 도구
기타 LDAP 인식 응용 프로그램
- 접미사
- 택배 IMAP
- 재버드
- e그룹웨어
요약
누군가 추가할 것이 있으면 추가하십시오. 구성이 완벽하지 않을 수 있음을 알고 있습니다.