웹사이트 검색

Ubuntu 16.04에서 OpenLDAP 및 phpLDAPadmin을 설치 및 구성하는 방법


소개

LDAP(Lightweight Directory Access Protocol)는 네트워크를 통해 계층적 디렉토리 정보를 관리하고 액세스하도록 설계된 표준 프로토콜입니다. 모든 종류의 정보를 저장하는 데 사용할 수 있지만 중앙 집중식 인증 시스템이나 회사 이메일 및 전화 번호부로 가장 자주 사용됩니다.

이 가이드에서는 Ubuntu 16.04에서 OpenLDAP 서버를 설치하고 구성하는 방법에 대해 설명합니다. 그런 다음 LDAP 정보를 보고 조작하기 위한 웹 인터페이스인 phpLDAPadmin을 설치합니다. 무료 자동 인증서 제공업체인 Let’s Encrypt의 SSL 인증서로 웹 인터페이스와 LDAP 서비스를 보호합니다.

전제 조건

이 튜토리얼을 시작하기 전에 Apache 및 PHP로 설정된 Ubuntu 16.04 서버가 있어야 합니다. MySQL 데이터베이스 서버가 필요하지 않으므로 Ubuntu 16.04에 Linux, Apache, MySQL, PHP(LAMP) 스택을 설치하는 방법 자습서를 따라 2단계를 건너뛸 수 있습니다.

또한 웹 인터페이스에 비밀번호를 입력할 것이므로 SSL 암호화로 Apache를 보호해야 합니다. Ubuntu 16.04에서 Let’s Encrypt로 Apache를 보호하는 방법을 읽고 무료 SSL 인증서를 다운로드하고 구성하십시오. 이 단계를 완료하려면 도메인 이름이 필요합니다. 이와 동일한 인증서를 사용하여 보안 LDAP 연결도 제공합니다.

참고: Let's Encrypt 자습서에서는 서버가 공용 인터넷에 액세스할 수 있다고 가정합니다. 그렇지 않은 경우 다른 인증서 공급자나 조직의 자체 인증 기관을 사용해야 합니다. 어느 쪽이든 대부분 인증서의 경로 또는 파일 이름과 관련된 최소한의 변경으로 자습서를 완료할 수 있어야 합니다.

1단계 - LDAP 서버 설치 및 구성

첫 번째 단계는 LDAP 서버와 일부 관련 유틸리티를 설치하는 것입니다. 운 좋게도 필요한 패키지는 모두 우분투의 기본 리포지토리에서 사용할 수 있습니다.

서버에 로그인하십시오. 이 세션에서 apt-get을 처음 사용하므로 로컬 패키지 인덱스를 새로 고친 다음 원하는 패키지를 설치합니다.

  1. sudo apt-get update
  2. sudo apt-get install slapd ldap-utils

설치하는 동안 LDAP에 대한 관리자 암호를 선택하고 확인하라는 메시지가 표시됩니다. 잠시 후에 업데이트할 수 있으므로 여기에 무엇이든 입력할 수 있습니다.

방금 패키지를 설치했지만 바로 진행하여 재구성하겠습니다. slapd 패키지에는 많은 중요한 구성 질문을 할 수 있는 기능이 있지만 기본적으로 설치 프로세스에서 건너뜁니다. 패키지를 재구성하도록 시스템에 지시하여 모든 프롬프트에 액세스할 수 있습니다.

  1. sudo dpkg-reconfigure slapd

이 과정에서 대답해야 할 몇 가지 새로운 질문이 있습니다. 대부분의 기본값을 수락합니다. 다음 질문을 살펴보겠습니다.

  • OpenLDAP 서버 구성을 생략하시겠습니까? 아니요
  • DNS 도메인 이름?
    • 이 옵션은 디렉토리 경로의 기본 구조를 결정합니다. 이것이 구현되는 방법을 정확히 이해하려면 메시지를 읽으십시오. 실제 도메인을 소유하지 않은 경우에도 실제로 원하는 값을 선택할 수 있습니다. 그러나 이 자습서에서는 서버에 대한 적절한 도메인 이름이 있다고 가정하므로 해당 이름을 사용해야 합니다. 자습서 전체에서 example.com을 사용합니다.

    • 이 가이드에서는 조직의 이름으로 example을 사용합니다. 적절하다고 생각되는 것을 선택할 수 있습니다.

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

    1. sudo ufw allow ldap

    연결된 사용자 이름을 반환해야 하는 ldapwhoami로 LDAP 연결을 테스트해 보겠습니다.

    1. ldapwhoami -H ldap:// -x
    Output
    anonymous

    anonymous는 LDAP 서버에 로그인하지 않고 ldapwhoami를 실행했기 때문에 예상한 결과입니다. 이는 서버가 실행 중이고 쿼리에 응답하고 있음을 의미합니다. 다음으로 LDAP 데이터를 관리하기 위한 웹 인터페이스를 설정합니다.

    2단계 - phpLDAPadmin 웹 인터페이스 설치 및 구성

    명령줄을 통해 LDAP를 관리하는 것이 매우 가능하지만 대부분의 사용자는 웹 인터페이스를 사용하는 것이 더 쉽다는 것을 알게 될 것입니다. 이 기능을 제공하는 PHP 애플리케이션인 phpLDAPadmin을 설치하겠습니다.

    Ubuntu 리포지토리에는 phpLDAPadmin 패키지가 포함되어 있습니다. apt-get으로 설치할 수 있습니다.

    1. sudo apt-get install phpldapadmin

    이렇게 하면 애플리케이션이 설치되고 필요한 Apache 구성이 활성화되며 Apache가 다시 로드됩니다.

    이제 웹 서버가 애플리케이션을 제공하도록 구성되었지만 몇 가지 추가 변경이 필요합니다. 도메인을 사용하고 LDAP 로그인 정보를 자동 입력하지 않도록 phpLDAPadmin을 구성해야 합니다.

    텍스트 편집기에서 루트 권한으로 기본 구성 파일을 열어 시작합니다.

    1. sudo nano /etc/phpldapadmin/config.php

    $servers->setValue(server,name로 시작하는 라인을 찾으십시오. nano에서 CTRL-W 를 입력하여 문자열을 검색할 수 있습니다. , 문자열, ENTER. 커서가 올바른 줄에 놓입니다.

    이 행은 웹 인터페이스가 서버에 대한 헤더 및 메시지에 사용하는 LDAP 서버의 표시 이름입니다. 여기에서 적절한 것을 선택하십시오.

    $servers->setValue('server','name','Example LDAP');
    

    다음으로 $servers->setValue(server,base 줄로 이동합니다. 이 구성은 phpLDAPadmin에게 LDAP 계층의 루트가 무엇인지 알려줍니다. 이것은 <slapd 패키지. 이 예에서는 example.com을 선택했으며 각 도메인 구성 요소(점이 아닌 모든 것)를 dc에 넣어 이를 LDAP 구문으로 변환해야 합니다. = 표기:

    $servers->setValue('server','base', array('dc=example,dc=com'));
    

    이제 로그인 bind_id 구성 줄을 찾아 줄 시작 부분에 #로 주석 처리합니다.

    #$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
    

    이 옵션은 웹 인터페이스에서 관리자 로그인 세부 정보를 미리 채웁니다. phpLDAPadmin 페이지에 공개적으로 액세스할 수 있는 경우 공유해서는 안 되는 정보입니다.

    마지막으로 조정해야 할 것은 일부 phpLDAPadmin 경고 메시지의 가시성을 제어하는 설정입니다. 기본적으로 응용 프로그램은 템플릿 파일에 대한 몇 가지 경고 메시지를 표시합니다. 이들은 현재 소프트웨어 사용에 영향을 미치지 않습니다. hide_template_warning 매개변수를 검색하고 이를 포함하는 줄의 주석을 제거하고 true로 설정하여 숨길 수 있습니다.

    $config->custom->appearance['hide_template_warning'] = true;
    

    이것이 우리가 조정해야 할 마지막 것입니다. 완료하려면 파일을 저장하고 닫습니다. 변경 사항을 적용하기 위해 아무것도 다시 시작할 필요가 없습니다.

    다음으로 phpLDAPadmin에 로그인합니다.

    3단계 - phpLDAPadmin 웹 인터페이스에 로그인

    phpLDAPadmin에 필요한 구성을 변경했으므로 이제 사용을 시작할 수 있습니다. 웹 브라우저에서 애플리케이션으로 이동합니다. 아래 강조 표시된 영역을 도메인으로 대체해야 합니다.

    https://example.com/phpldapadmin
    

    phpLDAPadmin 랜딩 페이지가 로드됩니다. 페이지의 왼쪽 메뉴에서 로그인 링크를 클릭합니다. 로그인 양식이 표시됩니다.

    로그인 DN은 사용할 사용자 이름입니다. 여기에는 cn= 섹션의 계정 이름과 이전 단계에서 설명한 대로 dc= 섹션으로 구분된 서버에 대해 선택한 도메인 이름이 포함됩니다. 설치 중에 설정한 기본 관리자 계정은 admin이므로 이 예에서는 다음을 입력합니다.

    cn=admin,dc=example,dc=com
    

    도메인에 적합한 문자열을 입력한 후 구성 중에 생성한 관리자 비밀번호를 입력한 다음 인증 버튼을 클릭합니다.

    기본 인터페이스로 이동합니다.

    이 시점에서 phpLDAPadmin 인터페이스에 로그인됩니다. 사용자, 조직 단위, 그룹 및 관계를 추가할 수 있습니다.

    LDAP는 데이터 및 디렉토리 계층 구조를 구성하는 방법에 있어서 유연합니다. 원하는 모든 종류의 구조를 만들고 상호 작용 방식에 대한 규칙을 만들 수도 있습니다.

    이 프로세스는 Ubuntu 16.04에서 이전 버전과 동일하므로 Ubuntu 12.04에 대한 LDAP 설치 문서의 조직 단위, 그룹 및 사용자 추가 섹션에 설명된 단계를 따를 수 있습니다.

    이러한 단계는 이 phpLDAPadmin 설치에서 잘 작동하므로 인터페이스 작업을 연습하고 데이터를 구조화하는 방법을 배우려면 다음을 따르십시오.

    이제 로그인하고 웹 인터페이스에 익숙해졌으므로 잠시 시간을 내어 LDAP 서버에 더 많은 보안을 제공하겠습니다.

    4단계 – StartTLS LDAP 암호화 구성

    웹 인터페이스를 암호화했지만 외부 LDAP 클라이언트는 여전히 서버에 연결하고 일반 텍스트로 정보를 전달합니다. Let's Encrypt SSL 인증서를 사용하여 LDAP 서버에 암호화를 추가해 보겠습니다.

    Let’s Encrypt 인증서 복사

    slapd 데몬이 사용자 openldap으로 실행되고 Let's Encrypt 인증서는 루트 사용자만 읽을 수 있기 때문에 slapd가 다음에 액세스할 수 있도록 몇 가지 조정이 필요합니다. 인증서. 인증서를 SSL 인증서 및 키의 표준 시스템 디렉토리인 /etc/ssl/에 복사하는 짧은 스크립트를 생성합니다. 명령을 수동으로 입력하는 대신 스크립트를 만드는 이유는 Let’s Encrypt 인증서가 갱신될 때마다 이 프로세스를 자동으로 반복해야 하기 때문입니다. 이를 활성화하기 위해 나중에 certbot 크론 작업을 업데이트할 것입니다.

    먼저 셸 스크립트용 새 텍스트 파일을 엽니다.

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

    그러면 빈 텍스트 파일이 열립니다. 다음 스크립트를 붙여넣습니다. Let’s Encrypt 인증서가 저장된 위치를 반영하도록 SITE=example.com 부분을 업데이트해야 합니다. sudo ls /etc/letsencrypt/live로 인증서 디렉토리를 나열하여 올바른 값을 찾을 수 있습니다.

    #!/bin/sh
    
    SITE=example.com
    
    # move to the correct let's encrypt directory
    cd /etc/letsencrypt/live/$SITE
    
    # copy the files
    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
    
    # adjust permissions of the private key
    chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem
    chmod 640 /etc/ssl/private/$SITE.privkey.pem
    
    # restart slapd to load new certificates
    systemctl restart slapd
    

    이 스크립트는 Let’s Encrypt 인증서 디렉터리로 이동하고 파일을 /etc/ssl로 복사한 다음 시스템의 ssl-cert 그룹에서 읽을 수 있도록 개인 키의 권한을 업데이트합니다. 또한 slapd를 다시 시작하여 이 스크립트가 certbot 갱신 cron 작업에서 실행될 때 새 인증서가 로드되도록 합니다.

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

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

    그런 다음 sudo로 스크립트를 실행합니다.

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

    /etc/ssl에 새 파일을 나열하여 스크립트가 작동하는지 확인합니다.

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

    위의 sudo 명령은 일반 명령과 약간 다릅니다. <코드>su -c . . . 부분은 전체 ls 명령을 실행하기 전에 루트 셸에서 래핑합니다. 이렇게 하지 않으면 * 와일드카드 파일 이름 확장이 sudo가 아닌 사용자의 권한으로 실행되며 /etc/ssl/private가 사용자가 읽을 수 있습니다.

    ls는 세 파일에 대한 세부 정보를 인쇄합니다. 소유권과 권한이 올바른지 확인합니다.

    Output
    -rw-r--r-- 1 root root 1793 May 31 13:58 /etc/ssl/certs/example.com.cert.pem -rw-r--r-- 1 root root 3440 May 31 13:58 /etc/ssl/certs/example.com.fullchain.pem -rw-r----- 1 root ssl-cert 1704 May 31 13:58 /etc/ssl/private/example.com.privkey.pem

    다음으로 certbot을 사용하여 이를 자동화합니다.

    Certbot 갱신 Cron 작업 업데이트

    인증서가 업데이트될 때마다 이 스크립트를 실행하려면 certbot cron 작업을 업데이트해야 합니다.

    1. sudo crontab -e

    이미 certbot renew 줄이 있어야 합니다. 아래 강조 표시된 부분을 추가하십시오.

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

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

    보안 연결을 제공하도록 slapd 구성

    slapd가 개인 키를 읽을 수 있도록 openldap 사용자를 ssl-cert 그룹에 추가해야 합니다.

    1. sudo usermod -aG ssl-cert openldap

    새 그룹을 선택하도록 slapd를 다시 시작합니다.

    1. sudo systemctl restart slapd

    마지막으로 이러한 인증서와 키를 실제로 사용하려면 slapd를 구성해야 합니다. 이를 위해 모든 구성 변경 사항을 LDAP 데이터 교환 형식을 나타내는 LDIF 파일에 넣은 다음 ldapmodify 명령을 사용하여 LDAP 서버에 변경 사항을 로드합니다. .

    새 LDIF 파일을 엽니다.

    1. cd ~
    2. 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를 사용하여 변경 사항을 적용합니다.

    1. sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
    Output
    SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"

    새 인증서를 로드하기 위해 slapd를 다시 로드할 필요가 없습니다. 이는 ldapmodify로 구성을 업데이트할 때 자동으로 발생했습니다. ldapwhoami 명령을 한 번 더 실행하여 확인합니다. 이번에는 적절한 호스트 이름을 사용하고 -ZZ 옵션을 추가하여 보안 연결을 강제해야 합니다.

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

    클라이언트가 호스트 이름이 인증서의 호스트 이름과 일치하는지 확인하기 때문에 보안 연결을 사용할 때 전체 호스트 이름이 필요합니다. 이렇게 하면 공격자가 연결을 가로채고 서버를 가장할 수 있는 중간자 공격을 방지할 수 있습니다.

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

    결론

    이 자습서에서는 OpenLDAP slapd 서버와 LDAP 웹 인터페이스 phpLDAPadmin을 설치하고 구성했습니다. 또한 두 서버 모두에 암호화를 설정하고 slapd의 Let’s Encrypt 인증서 갱신 프로세스를 자동으로 처리하도록 certbot을 업데이트했습니다.

    우리가 설정한 시스템은 매우 유연하며 필요에 따라 조직 스키마를 설계하고 리소스 그룹을 관리할 수 있습니다. 추가 명령줄 도구 및 기술을 포함하여 LDAP 관리에 대한 자세한 내용은 자습서 STARTTLS를 사용하여 OpenLDAP 연결을 암호화하는 방법을 참조하십시오.