본문 바로가기
서버구축 (WEB,DB)

OpenLDAP 및 phpLDAPadmin 설치와 구성 단계별 가이드

by 날으는물고기 2023. 10. 21.

OpenLDAP 및 phpLDAPadmin 설치와 구성 단계별 가이드

Ubuntu 16.04에서 OpenLDAP 및 phpLDAPadmin을 설치하고 구성하는 단계별 가이드입니다. 이 가이드에서는 Let's Encrypt에서 제공하는 무료 SSL 인증서를 사용하여 웹 인터페이스 및 LDAP 서비스를 보호하는 방법도 다룹니다.

참고: 이 가이드는 Ubuntu 16.04 서버에 Apache 및 PHP가 이미 설치되어 있다고 가정합니다. 또한, Apache를 SSL 암호화로 보호해야 합니다. 이를 위해 Let's Encrypt를 사용할 것이므로 도메인 이름이 필요합니다.

 

준비 사항:

  • Ubuntu 16.04 서버가 설치되어 있어야 합니다.
  • Apache 및 PHP가 설치되어 있어야 합니다.
  • SSL 암호화를 적용하려면 도메인 이름이 필요합니다.

 

단계 1: LDAP 서버 설치 및 구성
먼저 OpenLDAP 서버와 관련 도구를 설치합니다. 이러한 패키지는 Ubuntu의 기본 저장소에서 사용할 수 있습니다.

sudo apt-get update
sudo apt-get install slapd ldap-utils

설치 중에 LDAP 관리자의 비밀번호를 설정하라는 메시지가 나타납니다. 여기에는 아무 비밀번호나 입력해도 되며 나중에 변경할 수 있습니다.

 

패키지를 설치한 후, slapd 패키지를 다시 구성해야 합니다.

sudo dpkg-reconfigure slapd

구성 과정에서 여러 질문이 나타납니다. 대부분의 기본값을 수락하겠습니다.

  • OpenLDAP 서버 구성을 빠뜨리겠습니까? No
  • DNS 도메인 이름: 서버의 기본 디렉토리 경로를 결정합니다. 예를 들어, example.com을 사용합니다.
  • 조직 이름: 조직 이름으로 "example"을 사용합니다.
  • 관리자 비밀번호: 안전한 비밀번호를 두 번 입력합니다.
  • 데이터베이스 백엔드: MDB
  • slapd가 제거될 때 데이터베이스를 제거합니까? No
  • 이전 데이터베이스를 이동합니까? Yes
  • LDAPv2 프로토콜 허용? No

LDAP 서버가 이제 구성되어 실행 중입니다. 외부 클라이언트가 연결할 수 있도록 방화벽에서 LDAP 포트를 엽니다.

sudo ufw allow ldap

LDAP 연결을 테스트하려면 다음 명령을 사용하여 ldapwhoami를 실행합니다.

ldapwhoami -H ldap:// -x

예상 결과는 "anonymous"입니다. 이것은 서버가 실행되고 쿼리에 응답하는 것을 나타냅니다.

 

단계 2: phpLDAPadmin 웹 인터페이스 설치 및 구성
phpLDAPadmin을 설치하여 LDAP 데이터를 관리하는 웹 인터페이스를 설정합니다. 먼저 패키지를 설치합니다.

sudo apt-get install phpldapadmin

패키지 설치가 완료되면 필요한 Apache 구성을 활성화하고 Apache를 다시로드합니다.

 

phpLDAPadmin을 구성하기 위해 설정 파일을 엽니다.

sudo nano /etc/phpldapadmin/config.php

아래와 같이 설정 파일에서 변경해야 할 부분을 수정합니다.

  • LDAP 서버 이름 설정
$servers->setValue('server','name','Example LDAP');
  • LDAP 계층 구조 설정
$servers->setValue('server','base', array('dc=example,dc=com'));
  • 로그인 바인딩 설정 주석 처리
#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
  • 경고 메시지 숨기기
$config->custom->appearance['hide_template_warning'] = true;

설정을 마쳤으면 파일을 저장하고 종료합니다.

 

이제 phpLDAPadmin 웹 인터페이스에 로그인할 수 있습니다.

웹 브라우저에서 https://example.com/phpldapadmin로 접속합니다.

로그인 페이지에서 다음과 같이 로그인합니다.

  • Login DN: cn=admin,dc=example,dc=com (설정한 도메인에 맞게 변경)
  • 비밀번호: 설정한 비밀번호

로그인하면 phpLDAPadmin 인터페이스에 액세스할 수 있습니다.

 

이제 사용자, 조직 단위, 그룹 및 관계를 추가할 수 있습니다.

StartTLS LDAP 암호화 구성

이제 웹 인터페이스는 암호화되어 있지만 외부 LDAP 클라이언트는 여전히 평문으로 서버에 연결합니다. Let's Encrypt SSL 인증서를 사용하여 LDAP 서버에 암호화를 추가합니다.

 

Let's Encrypt 인증서 복사
slapd 데몬은 openldap 사용자로 실행되므로 Let's Encrypt 인증서에 액세스하려면 몇 가지 조치를 취해야 합니다. 먼저 인증서를 /etc/ssl/로 복사하는 스크립트를 만듭니다. 스크립트를 사용하는 이유는 Let's Encrypt 인증서가 갱신될 때마다 이 작업을 자동으로 반복해야 하기 때문입니다.

 

새로운 쉘 스크립트 파일을 엽니다.

sudo nano /usr/local/bin/renew.sh

다음 스크립트를 붙여넣으세요. SITE=example.com 부분을 여러분의 인증서가 저장된 위치에 맞게 수정하세요.

#!/bin/sh

SITE=example.com

# Let's Encrypt 디렉토리로 이동
cd /etc/letsencrypt/live/$SITE

# 파일 복사
cp cert.pem /etc/ssl/certs/$SITE.cert.pem
cp fullchain.pem /etc/ssl/certs/$SITE.fullchain.pem
cp privkey.pem /etc/ssl/private/$SITE.privkey.pem

# 개인 키의 권한 조정
chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem
chmod 640 /etc/ssl/private/$SITE.privkey.pem

# 새 인증서를 로드하려면 slapd를 다시 시작
systemctl restart slapd

파일을 저장하고 닫은 다음 실행 가능하도록 만듭니다.

sudo chmod u+x /usr/local/bin/renew.sh

스크립트를 다음과 같이 실행하여 작동 여부를 확인할 수 있습니다.

sudo /usr/local/bin/renew.sh

다음 명령을 사용하여 /etc/ssl에서 새 파일을 나열하여 소유권과 권한이 올바른지 확인할 수 있습니다.

sudo su -c 'ls -al /etc/ssl/{certs,private}/example.com*'

Certbot 갱신 크론 작업 업데이트
Let's Encrypt 인증서가 갱신될 때 스크립트를 실행하려면 certbot 크론 작업을 업데이트해야 합니다.

 

크론 편집기를 엽니다.

sudo crontab -e

이미 certbot 갱신 라인이 있을 것입니다. 아래와 같이 강조된 부분을 추가합니다.

15 3 * * * /usr/bin/certbot renew --quiet --renew-hook /usr/local/bin/renew.sh

크론 작업을 저장하고 닫습니다. 이제 certbot가 인증서를 갱신할 때마다 스크립트가 실행되어 파일을 복사하고 권한을 조정하며 slapd 서버를 다시 시작합니다.

 

slapd를 안전한 연결 제공하도록 구성
openldap 사용자를 ssl-cert 그룹에 추가하여 slapd가 개인 키를 읽을 수 있도록 만듭니다.

sudo usermod -aG ssl-cert openldap

그런 다음 slapd를 다시 시작하여 새 그룹을 사용하도록 만듭니다.

sudo systemctl restart slapd

마지막으로 slapd가 실제로 이 인증서 및 키를 사용하도록 slapd를 구성해야 합니다. 이를 위해 모든 설정 변경 사항을 LDIF 파일(LDAP 데이터 교환 형식)에 넣은 다음 ldapmodify 명령을 사용하여 변경 사항을 LDAP 서버에 적용합니다.

 

새로운 LDIF 파일을 만듭니다.

cd ~
nano ssl.ldif

다음 내용을 파일에 붙여넣고 도메인에 맞게 파일 이름을 수정합니다.

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/example.com.fullchain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/example.com.cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/example.com.privkey.pem

파일을 저장하고 닫은 다음 ldapmodify를 사용하여 변경 사항을 적용합니다.

sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif

변경 내용이 적용되는 동안 slapd를 다시로드할 필요가 없습니다. 변경 내용이 자동으로 적용되므로 ldapwhoami 명령을 다시 실행하여 확인합니다.

 

이번에는 안전한 연결을 강제하려면 올바른 호스트 이름을 사용하고 -ZZ 옵션을 추가해야 합니다.

ldapwhoami -H ldap://example.com -x -ZZ

ldapwhoami 명령은 오류 없이 "anonymous"를 반환해야 합니다. 이로써 LDAP 연결을 성공적으로 암호화했습니다.

이제 OpenLDAP 및 phpLDAPadmin을 설치하고 구성하는 완전한 가이드를 제공했습니다. 필요한 경우 추가 설정 및 구성을 수행하여 LDAP 서버를 사용자 정의하실 수 있습니다.

728x90

댓글