LDAP 인증 · 4 min read · Dec 13, 2025

리눅스에서의 LDAP 인증

이 방법서는 LDAP에 사용자를 저장하고 일부 서비스를 LDAP에 대해 인증하는 방법을 보여줍니다. 특정 패키지를 설치하는 방법은 배포판/시스템에 따라 다르기 때문에 보여주지 않겠습니다. LDAP 인증/사용자 저장을 위해 필요한 모든 구성 요소의 “순수한” 구성에 집중하겠습니다. 이 방법서는 어느 정도 일반적인 passwd/shadow 인증에서 마이그레이션한다고 가정하지만, 처음부터 시작하는 사람들에게도 적합합니다.

요구 사항

  • OpenLDAP
  • pam_ldap
  • nss_ldap
  • PADL migrationtools

소개

우리가 달성하고자 하는 것은 LDAP에 사용자를 저장하고, LDAP(직접 또는 pam)에 대해 인증하며, 이를 인간이 이해할 수 있는 방식으로 관리할 수 있는 도구를 갖는 것입니다.

이렇게 하면 LDAP 지원이 있는 모든 소프트웨어를 사용할 수 있으며, PAM LDAP 모듈로 대체할 수 있습니다. PAM LDAP 모듈은 PAM->LDAP 게이트웨이 역할을 합니다.

LDAP 아이디어에 대한 더 많은 정보는 위키피디아에서 확인할 수 있습니다: 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  

suffix와 경로를 필요에 맞게 변경하는 것을 잊지 마세요.

이것들은 사용자가 비밀번호를 변경하는 데 필요한 기본 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에서 기존 항목을 마이그레이션하는 방법을 보여드리겠습니다.

첫 번째 단계는 migrationtools를 필요에 맞게 구성하는 것입니다. Gentoo의 구성 파일은 /usr/share/migrationtools/migrate_common.ph에 있습니다.

일반적으로 다음 두 가지만 변경하면 됩니다:

$DEFAULT_BASE = "dc=domain,dc=com";
$EXTENDED_SCHEMA = 1;

이제 데이터를 마이그레이션할 준비가 되었습니다(실제로 export 명령 없이도 작동합니다):

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 서버가 이해할 수 있는 형식으로 데이터가 있습니다. 구문에 익숙해지기 위해 텍스트 편집기로 파일 중 하나를 열어보세요. 그 후, ldif에서 데이터를 추가할 수 있습니다.

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

ldap.conf, LDAP 클라이언트부터 시작하겠습니다:

BASE    dc=domain, dc=com
scope sub
suffix          "dc=domain,dc=com"

## root가 사용자의 비밀번호를 변경하려고 할 때
rootbinddn cn=Manager,dc=domain,dc=com

## LDAP가 죽었을 때 필요합니다
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(또는 login, 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를 통해 로그인하려고 시도하여 테스트할 수 있습니다.

Apache 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 migrationtools - 마이그레이션 도구
  • IDEALX sambaldap 도구 - samba LDAP 도구

기타 LDAP 인식 애플리케이션

  • Postfix
  • Courier IMAP
  • jabberd
  • eGroupware

요약

추가할 내용이 있다면 말씀해 주세요. 구성은 완벽하지 않을 수 있습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.