웹사이트 검색

OpenLDAP 유틸리티로 LDAP 서버를 관리 및 사용하는 방법


소개

사용 가능한 도구와 LDAP에 필요한 정보 및 방법을 제대로 이해하지 못하는 경우 LDAP 시스템을 관리하기 어려울 수 있습니다. 이 가이드에서는 OpenLDAP 팀에서 개발한 LDAP 도구를 사용하여 LDAP 디렉토리 서버와 상호 작용하는 방법을 시연합니다.

전제 조건

시작하려면 OpenLDAP가 설치 및 구성된 시스템에 액세스할 수 있어야 합니다. OpenLDAP 서버를 설정하는 방법을 배울 수 있습니다. 이 가이드는 이러한 항목에 더 익숙해지는 데 사용할 수 있습니다.

도구 설치

위의 전제 조건은 이미 LDAP 시스템에 대한 액세스 권한이 있다고 가정하지만 이 가이드에서 설명하는 OpenLDAP 도구가 설치되어 있지 않을 수 있습니다.

Ubuntu 또는 Debian 시스템에서는 apt 리포지토리를 통해 이러한 도구를 설치할 수 있습니다. 로컬 패키지 색인을 업데이트하고 다음을 입력하여 설치합니다.

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

CentOS 또는 Fedora에서는 yum을 사용하여 적절한 파일을 가져올 수 있습니다. 다음을 입력하여 설치하십시오.

  1. sudo yum install openldap-clients

올바른 패키지를 설치했으면 아래를 계속하십시오.

LDAP 인스턴스에 연결

대부분의 OpenLDAP 도구는 매우 유연하여 여러 가지 역할로 시스템과 상호 작용할 수 있는 기능을 위해 간결한 명령 구조를 희생합니다. 이 때문에 사용자는 LDAP 서버에 연결하는 데 필요한 최소한의 것을 표현하기 위해 다양한 인수를 선택해야 합니다.

이 섹션에서는 수행하려는 작업 유형에 따라 서버에 연결하는 데 필요한 인수 구성에 중점을 둘 것입니다. 여기에서 설명하는 인수는 다양한 도구에서 사용되지만 데모 목적으로 ldapsearch를 사용합니다.

서버 지정

OpenLDAP 도구를 사용하려면 각 작업에 대해 인증 방법과 서버 위치를 지정해야 합니다. 서버를 지정하려면 -H 플래그 다음에 해당 서버의 프로토콜 및 네트워크 위치를 사용하십시오.

암호화되지 않은 기본 통신의 경우 프로토콜 체계는 다음과 같이 ldap://입니다.

  1. ldapsearch -H ldap://server_domain_or_IP . . .

로컬 서버와 통신하는 경우 서버 도메인 이름 또는 IP 주소를 생략할 수 있습니다(여전히 체계를 지정해야 함).

LDAP over SSL을 사용하여 LDAP 서버에 연결하는 경우 대신 ldaps:// 체계를 사용하는 것이 좋습니다(이 방법은 더 이상 사용되지 않음에 유의하세요. OpenLDAP 프로젝트는 STARTTLS 업그레이드 사용을 권장합니다. 대신 일반 LDAP 포트에서 설정하는 방법을 알아보세요.)

  1. ldapsearch -H ldaps://server_domain_or_IP . . .

이러한 프로토콜은 기본 포트(일반 LDAP의 경우 389, SSL을 통한 LDAP의 경우 636)를 가정합니다. 비표준 포트를 사용하는 경우 끝에 콜론과 포트 번호를 추가해야 합니다.

Linux IPC(프로세스 간 통신)를 통해 쿼리하는 서버의 LDAP 디렉터리에 연결하려면 ldapi:// 프로토콜을 사용할 수 있습니다. 이는 일부 관리 작업에 더 안전하고 필요합니다.

  1. ldapsearch -H ldapi:// . . .

ldapi 체계에는 로컬 연결이 필요하므로 여기에서 서버 이름을 지정할 필요가 없습니다. 그러나 LDAP 서버 구성 내에서 소켓 파일 위치를 변경한 경우 주소의 일부로 새 소켓 위치를 지정해야 합니다.

익명의 바인드

LDAP에서는 서버가 요청을 승인하기 위한 액세스 수준을 결정할 수 있도록 클라이언트가 자신을 식별해야 합니다. 이것은 "바인딩\이라는 LDAP 메커니즘을 사용하여 작동합니다. 기본적으로 요청을 알려진 보안 엔터티와 연결하기 위한 용어입니다. LDAP가 이해하는 세 가지 별도의 인증 유형이 있습니다.

클라이언트가 사용할 수 있는 가장 일반적인 유형의 인증은 "익명\ 바인드입니다. 이것은 거의 인증이 없는 것과 같습니다. LDAP 서버는 특정 작업을 누구나 액세스할 수 있는 것으로 분류할 수 있습니다(일반적으로 기본적으로 공용 DIT는 익명 사용자에 대해 읽기 전용으로 구성됨) 익명 바인드를 사용하는 경우 이러한 작업을 사용할 수 있습니다.

OpenLDAP 도구는 기본적으로 SASL 인증(잠시 논의할 것임)을 가정하므로 익명 바인드를 허용하려면 -x 인수를 지정해야 합니다. 서버 사양과 결합하면 다음과 같이 표시됩니다.

  1. ldapsearch -H ldap://server_domain_or_IP -x

추가 인수를 제공하지 않고 입력하면 다음과 같이 표시됩니다.

# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

이것은 도구가 우리가 검색한 것을 찾지 못했다는 것을 의미합니다. 쿼리 매개변수를 제공하지 않았기 때문에 이는 예상되는 일이지만 서버에서 익명 바인드를 수락했음을 보여줍니다.

단순 인증

LDAP 서버에 인증하는 두 번째 방법은 단순 바인드를 사용하는 것입니다. 단순 바인드는 LDAP 서버 내의 항목을 사용하여 요청을 인증합니다. 항목의 DN(식별 이름)은 인증을 위한 사용자 이름 역할을 합니다. 항목 내에서 속성은 요청 중에 제공해야 하는 비밀번호를 정의합니다.

DIT 루트 항목 및 RootDN 바인드 찾기

단순 인증을 사용하여 인증하려면 다른 모든 항목이 배치되는 루트, 기본 또는 접미사 항목이라고 하는 DIT 계층 구조의 맨 위에 있는 부모 요소를 알아야 합니다. 바인딩할 DN도 알아야 합니다.

일반적으로 LDAP 서버를 설치하는 동안 rootDN이라는 관리 항목과 암호를 사용하여 초기 DIT를 설정하고 구성합니다. 시작할 때 바인드용으로 구성된 유일한 DN이 됩니다.

연결하려는 LDAP 서버의 루트 항목을 모르는 경우 일반 LDAP DIT 외부의 특수 "메타\ 항목을 쿼리하여 알고 있는 DIT 루트 항목(루트 DSE라고 함)에 대한 정보를 얻을 수 있습니다. ). 다음을 입력하여 DIT 이름에 대해 이 항목을 쿼리할 수 있습니다.

  1. ldapsearch -H ldap://server_domain_or_IP -x -LLL -s base -b "" namingContexts

LDAP 서버는 다음과 같이 알고 있는 루트 항목을 반환해야 합니다.

dn:
namingContexts: dc=example,dc=com

강조 표시된 영역은 DIT의 루트입니다. 이것을 사용하여 바인드할 항목을 검색할 수 있습니다. admin 항목은 일반적으로 simpleSecurityObject objectClass를 사용하여 항목에 암호를 설정하는 기능을 얻습니다. 이것을 사용하여 이 클래스의 항목을 검색할 수 있습니다.

  1. ldapsearch -H ldap://server_domain_or_IP -x -LLL -b "dc=example,dc=com" "(objectClass=simpleSecurityObject)" dn

그러면 이 클래스를 사용하는 항목 목록이 표시됩니다. 일반적으로 하나만 있습니다.

dn: cn=admin,dc=example,dc=com

바인딩할 수 있는 rootDN 계정입니다. 서버 설치 중에 이 계정에 대한 암호를 구성했어야 합니다. 비밀번호를 모르실 경우 이 가이드에 따라 비밀번호를 재설정하실 수 있습니다.

바인드 수행

항목과 암호가 있으면 LDAP 서버에 자신을 인증하기 위해 요청하는 동안 간단한 바인드를 수행할 수 있습니다.

다시 말하지만 LDAP 서버 위치를 지정하고 -x 플래그를 제공하여 SASL 인증을 사용하지 않으려는 것을 나타내야 합니다. 실제 바인드를 수행하려면 -D 플래그를 사용하여 바인드할 DN을 지정하고 -w 또는 -를 사용하여 암호를 제공해야 합니다. W 명령. -w 옵션을 사용하면 명령의 일부로 암호를 제공할 수 있으며 -W 옵션은 암호를 묻는 메시지를 표시합니다.

rootDN에 대한 예제 요청 바인딩은 다음과 같습니다.

  1. ldapsearch -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W

자격 증명이 수락되었음을 나타내는 익명 바인드와 동일한 결과를 얻어야 합니다. 항목에 바인딩하면 익명 바인딩을 통해 사용할 수 없는 추가 권한이 제공되는 경우가 많습니다. rootDN에 바인딩하면 액세스 제어에 관계없이 전체 DIT에 대한 읽기/쓰기 액세스 권한이 부여됩니다.

SASL 인증

SASL은 단순 인증 및 보안 계층을 나타냅니다. 특정 구현에 얽매이지 않는 유연한 인증 시스템을 제공하기 위해 인증 방법을 프로토콜과 연결하기 위한 프레임워크입니다. 사용 가능한 다양한 방법에 대해 알아보려면 wikipedia 페이지를 확인하십시오.

LDAP 서버는 아마도 가능한 SASL 메커니즘의 하위 집합만 지원할 것입니다. 허용하는 메커니즘을 찾으려면 다음을 입력하십시오.

  1. ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms

표시되는 결과는 연결하는 데 사용한 체계에 따라 다릅니다. 암호화되지 않은 ldap:// 체계의 경우 대부분의 시스템은 기본적으로 다음을 허용합니다.

dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5

보안 프로세스 간 통신을 사용하는 ldapi:// 체계를 사용하는 경우 다음과 같이 확장된 선택 목록이 있을 수 있습니다.

  1. ldapsearch -H ldapi:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN

대부분의 SASL 인증 방법을 구성하는 데 시간이 걸릴 수 있으므로 여기서는 자세한 내용을 다루지 않습니다. SASL 인증은 일반적으로 이 문서의 범위를 벗어나지만 ldapi:// 체계와 함께 사용할 수 있는 EXTERNAL 메서드에 대해 이야기해야 합니다.

EXTERNAL 메커니즘은 인증 및 보안이 연결과 관련된 다른 수단에 의해 처리됨을 나타냅니다. 예를 들어 SSL과 함께 사용하여 암호화 및 인증을 제공할 수 있습니다.

가장 일반적으로 루트 또는 sudo 사용자와 함께 ldapi:// 인터페이스와 함께 사용되는 것을 볼 수 있습니다. ldapi://는 Unix 소켓을 사용하므로 요청을 시작한 사용자를 확보하고 특정 작업을 인증하는 데 사용할 수 있습니다. LDAP가 구성에 사용하는 DIT는 이 메커니즘을 사용하여 루트 사용자가 LDAP를 읽고 변경할 수 있도록 인증합니다. 이러한 요청은 다음과 같습니다.

  1. sudo ldapsearch -H ldapi:// -Y EXTERNAL . . .

이는 일반적으로 cn=config 루트 항목으로 시작하는 DIT에 보관되는 LDAP 구성을 수정하는 데 사용됩니다.

.ldaprc 파일 설정

우리는 지금까지 주로 명령줄에서 연결 정보를 지정해 왔습니다. 그러나 일부 공통 연결 값을 구성 파일에 입력하면 일부 입력을 줄일 수 있습니다.

전역 클라이언트 구성 파일은 /etc/ldap/ldap.conf에 있지만 주로 ~/의 홈 디렉토리에 있는 사용자 구성 파일에 변경 사항을 추가하려고 합니다. ldaprc. 텍스트 편집기에서 이 이름으로 파일을 만들고 엽니다.

  1. nano ~/.ldaprc

내부에서 구성하려는 기본 설정은 BASE, URIBINDDN입니다.

  • BASE: 검색을 시작해야 하는 항목을 지정하는 데 사용되는 기본 기본 DN입니다. 명령줄에 다른 검색 기준이 제공되면 재정의됩니다(다음 섹션에서 이에 대해 자세히 살펴보겠습니다).
  • URI: LDAP 서버에 도달할 수 있는 주소입니다. 여기에는 스키마(일반 LDAP용 ldap, SSL을 통한 LDAP용 ldaps, IPC 소켓을 통한 LDAP용 ldapi)가 포함되어야 합니다. 서버의 이름과 포트. 서버가 동일한 시스템에 있는 경우 이름을 생략할 수 있으며 서버가 선택한 구성표의 기본 포트에서 실행 중인 경우 포트를 생략할 수 있습니다.
  • BINDDN: 바인딩할 기본 LDAP 항목을 지정합니다. 이것은 사용하려는 액세스에 대한 "계정\ 정보를 제공하는 데 사용됩니다. 여전히 명령줄에서 암호를 지정해야 합니다.

이것은 간단한 인증 정보를 처리합니다. SASL 인증을 사용하는 경우 man ldap.conf를 확인하여 SASL 자격 증명 구성 옵션을 확인하십시오.

LDAP의 기본 항목이 dc=example,dc=com인 경우 서버는 로컬 컴퓨터에 있으며 cn=admin,dc=example,dc=com에 바인딩하려면 다음과 같은 ~/.ldaprc 파일이 있을 수 있습니다.

BASE    dc=example,dc=com
URI     ldap://
BINDDN  cn=admin,dc=example,dc=com

이를 사용하여 비 SASL 인증을 지정하고 관리자 항목과 연결된 암호를 제공하여 기본 검색을 수행할 수 있습니다. 이렇게 하면 지정한 기본 기본 DN의 전체 하위 트리 검색이 제공됩니다.

  1. ldapsearch -x -w password

이렇게 하면 LDAP 유틸리티를 사용할 때 "보일러플레이트\ 연결 옵션을 줄이는 데 도움이 될 수 있습니다. 이 가이드 전체에서 명확하게 하기 위해 명령에 연결 정보를 포함하지만 명령을 실행할 때 모든 부분을 제거할 수 있습니다. 구성 파일에 지정한

ldapsearch를 사용하여 DIT 및 조회 항목 쿼리

이제 LDAP 서버를 인증하고 지정하는 방법을 잘 다루었으므로 마음대로 사용할 수 있는 실제 도구에 대해 조금 더 이야기할 수 있습니다. 대부분의 예제에서는 LDAP 서버를 호스팅하는 동일한 서버에서 이러한 작업을 수행한다고 가정합니다. 즉, 구성표 후에 호스트 사양이 비어 있음을 의미합니다. 또한 서버가 관리하는 DIT의 기본 항목이 dc=example,dc=com용이라고 가정합니다. rootDN은 cn=admin,dc=example,dc=com입니다. 시작하자.

지금까지 예제에서 사용했기 때문에 ldapsearch부터 시작하겠습니다. LDAP 시스템은 검색, 읽기 및 조회 작업에 최적화되어 있습니다. LDAP 디렉토리를 사용하는 경우 대부분의 작업은 검색 또는 조회일 것입니다. ldapsearch 도구는 LDAP DIT에서 정보를 쿼리하고 표시하는 데 사용됩니다.

우리는 다음과 같이 이름을 지정하고 서버에 연결하는 구문의 일부를 다루었습니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W

이렇게 하면 서버에서 실행되는 LDAP 인스턴스에 연결하고 인증하는 데 필요한 최소한의 정보만 얻을 수 있지만 실제로는 아무것도 검색하지 않습니다. 자세히 알아보려면 검색 기반 및 검색 범위의 개념에 대해 논의해야 합니다.

검색 기준 및 범위

LDAP에서는 검색이 시작되는 위치를 검색 기반이라고 합니다. 이것은 작업이 시작되고 앵커 역할을 하는 DIT 내의 항목입니다. -b 플래그와 함께 항목 이름을 전달하여 검색 기반을 지정합니다.

예를 들어 dc=example,dc=com DIT의 루트에서 시작하려면 다음과 같이 이를 검색 기반으로 사용할 수 있습니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com"

이 명령은 바인딩한 사용자가 액세스할 수 있는 dc=example,dc=com 항목 아래의 모든 항목을 생성해야 합니다. 다른 항목을 사용하면 트리의 다른 섹션을 얻게 됩니다. 예를 들어 admin 항목에서 시작하면 admin 항목 자체만 가져올 수 있습니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "cn=admin,dc=example,dc=com"
# extended LDIF
#
# LDAPv3
# base <cn=admin,dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# admin, example.com
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ejN2UmHoRjdha09tQY96TC9IN0kxYUVCSjhLeXBsc3A=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

이 예제에서는 기본을 지정했지만 검색 범위를 지정하여 도구가 결과를 찾는 방식을 추가로 형성할 수 있습니다. 이 옵션은 -s 옵션으로 설정되며 다음 중 하나일 수 있습니다.

  • sub: 다른 항목이 지정되지 않은 경우 기본 검색 범위입니다. 이렇게 하면 기본 항목 자체와 트리 아래의 모든 하위 항목이 검색됩니다. 이것은 가장 큰 범위입니다.
  • base: 검색 기반 자체만 검색합니다. 검색 기준에 지정된 항목을 반환하는 데 사용되며 검색보다 조회로 더 잘 정의됩니다.
  • one: 이것은 검색 기준(검색 기준 아래의 단일 계층 수준)의 직계 자손/자식만 검색합니다. 여기에는 검색 기반 자체가 포함되지 않으며 이러한 항목 아래의 하위 트리도 포함되지 않습니다.
  • children: 이것은 sub 범위와 동일하게 작동하지만 결과에 검색 기반 자체를 포함하지 않습니다(아래의 모든 항목을 검색하지만 검색 기반).

-s 플래그와 -b 플래그를 사용하여 도구가 살펴보기를 원하는 DIT 영역을 형성하기 시작할 수 있습니다. 예를 들어 다음을 볼 수 있습니다. 다음과 같이 one 범위를 사용하여 기본 항목의 모든 첫 번째 수준 자식입니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -s one -LLL dn

출력을 약간 필터링하기 위해 끝에 -LLL dn을 추가했습니다. 이 기사의 뒷부분에서 이에 대해 자세히 설명하겠습니다. 트리에 항목을 몇 개 더 추가했다면 다음과 같은 결과가 반환되었을 수 있습니다.

dn: cn=admin,dc=example,dc=com

dn: ou=groups,dc=example,dc=com

dn: ou=people,dc=example,dc=com

ou=people 항목 아래의 모든 항목을 보려면 검색 기반으로 설정하고 children 범위를 사용할 수 있습니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "ou=people,dc=example,dc=com" -s children -LLL dn

검색 기반 및 검색 범위를 조정하여 관심 있는 DIT 부분에서만 작업을 수행할 수 있습니다. 이렇게 하면 트리의 한 섹션만 검색하여 쿼리 성능이 향상되고 관심 있는 항목만 반환됩니다. 안에.

불필요한 출력 제거

계속 진행하기 전에 ldapsearch가 생성하는 추가 출력을 제거하는 방법에 대해 알아보겠습니다.

추가 출력의 대부분은 -L 플래그로 제어됩니다. 보려는 출력 수준에 따라 0~3개의 -L 플래그를 사용할 수 있습니다. 더 많은 -L 플래그를 추가할수록 더 많은 정보가 표시되지 않습니다. 학습하거나 문제를 해결할 때 출력을 억제하지 않는 것이 좋을 수 있지만 정상적인 작동 중에는 세 가지 레벨을 모두 사용하는 것이 더 나은 경험으로 이어질 것입니다.

SASL 인증을 사용하는 경우 예를 들어 cn=config DIT를 수정할 때 -Q 플래그를 추가로 사용할 수 있습니다. 그러면 SASL 자동 모드가 활성화되어 SASL 관련 출력이 제거됩니다. -Y EXTERNAL 방법을 사용할 때는 괜찮지만 자격 증명을 요구하는 메커니즘을 사용하는 경우 이 방법도 억제되므로(인증 실패로 이어짐) 주의해야 합니다.

검색 필터 및 출력 속성 필터

단순히 전체 검색 범위를 출력하는 것이 아니라 실제로 검색을 수행하려면 검색 필터를 지정해야 합니다.

이들은 행의 끝에 배치될 수 있으며 속성 유형, 비교 연산자 및 값의 형식을 취합니다. 종종 쉘에 의한 해석을 방지하기 위해 인용 부호 안에 지정됩니다. 괄호는 한 필터와 다른 필터의 범위를 나타내는 데 사용됩니다. 단순한 단일 속성 검색에서는 선택 사항이지만 더 복잡한 복합 필터에서는 필수입니다. 검색 필터가 있는 위치를 더 잘 나타내기 위해 여기에서 사용합니다.

예를 들어 dc=example,dc=com DIT 내에 사용자 이름(uid) 속성이 "jsmith\로 설정된 항목이 있는지 확인할 수 있습니다. 이것은 해당 값으로 설정된 속성에 대한 검색 범위 내의 각 항목을 검색합니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=jsmith)"

위의 예에서 속성 값의 정확한 일치를 테스트하는 등호 연산자를 사용했습니다. 예상대로 작동하는 다양한 다른 연산자도 있습니다. 예를 들어 속성을 포함하는 항목을 검색하려면 값 세트에 관계없이 "presence\ 연산자를 사용할 수 있습니다. 다음을 입력하여 비밀번호가 포함된 항목을 검색할 수 있습니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(userPassword=*)"

유용한 일부 검색 필터는 다음과 같습니다.

  • 같음: = 연산자를 사용하여 정확한 속성 값을 일치시킵니다.
  • 존재: =*를 사용하여 해당 값에 관계없이 속성의 존재를 확인합니다.
  • 크거나 같음: >= 연산자를 사용하여 주어진 값보다 크거나 같은 값을 확인합니다.
  • 작거나 같음: <= 연산자를 사용하여 주어진 값보다 작거나 같은 값을 확인합니다.
  • 하위 문자열: =를 문자열과 함께 사용하고 * 와일드카드 문자를 문자열의 일부로 사용합니다. 찾고 있는 값의 일부를 지정하는 데 사용됩니다.
  • 근접성: ~= 연산자를 사용하여 오른쪽에 있는 것과 대략 일치시킵니다. 이는 LDAP 서버에서 항상 지원되는 것은 아닙니다(이 경우 등식 또는 하위 문자열 검색이 대신 수행됨).

또한 "!” 접두사가 붙은 추가 괄호 세트로 검색 필터를 래핑하여 대부분의 검색을 무효화할 수 있습니다. 부정 기호 예를 들어 모든 조직 단위 항목을 검색하려면 다음 필터를 사용할 수 있습니다.

"(ou=*)"

조직 단위 항목이 아닌 모든 항목을 검색하려면 다음 필터를 사용할 수 있습니다.

"(!(ou=*)"

부정 수정자는 뒤따르는 검색 필터의 의미를 뒤집습니다.

필터 사양에 따라 특성 출력 필터를 추가할 수도 있습니다. 이는 일치하는 각 항목에서 표시하려는 속성 목록일 뿐입니다. 기본적으로 자격 증명에 읽기 액세스 권한이 있는 모든 속성이 일치하는 각 항목에 대해 표시됩니다. 속성 출력 필터를 설정하면 보려는 출력 유형을 정확하게 지정할 수 있습니다.

예를 들어 사용자 ID가 있는 모든 항목을 검색할 수 있지만 다음을 입력하면 각 항목의 연결된 일반 이름만 표시됩니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn

그러면 다음과 같은 목록이 생성될 수 있습니다.

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown

항목 설명도 보려면 속성 목록에 추가하여 표시할 수 있습니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn description

대신 다음과 같이 표시됩니다.

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright
description: Brian Wright from Marketing.  Brian takes care of marketing, pres
 s, and community.  Ask him for help if you need any help with outreach.

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith
description: Johnny Smith from Accounting.  Johnny is in charge of the company
  books and hiring within the Accounting department.

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown
description: Sally Brown from engineering.  Sally is responsible for designing
  the blue prints and testing the structural integrity of the design.

속성 필터가 제공되지 않으면 모든 속성이 반환됩니다. 이는 "*” 문자를 사용하여 명시적으로 만들 수 있습니다. 작동 속성(각 항목에 대해 백그라운드에서 관리되는 특수 메타데이터 속성)을 반환하려면 특수 "+” 기호를 사용할 수 있습니다. 예를 들어, rootDN의 작동 속성을 보려면 다음을 입력할 수 있습니다.

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -b "dc=example,dc=com" -LLL "(cn=admin)" "+"

결과는 다음과 같습니다.

dn: cn=admin,dc=example,dc=com
structuralObjectClass: organizationalRole
entryUUID: cdc718a0-8c3c-1034-8646-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150514191233.782384Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150514191233Z
entryDN: cn=admin,dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

복합 검색

복합 검색에는 두 개 이상의 개별 검색 필터를 결합하여 더 정확한 결과를 얻는 작업이 포함됩니다. 검색 필터는 관계 연산자를 첫 번째 항목으로 사용하여 다른 괄호 세트로 묶음으로써 결합됩니다. 이것은 설명하는 것보다 쉽게 설명할 수 있습니다.

관계 연산자는 논리 AND로 작동하는 "&\ 문자와 "|\ 논리 OR을 나타내는 문자입니다. 이들은 외부 괄호 세트 내에서 관계를 정의하는 필터 앞에 옵니다.

따라서 도메인에 설명과 이메일 주소가 모두 있는 항목을 검색하려면 다음과 같은 필터를 구성할 수 있습니다.

"(&(description=*)(mail=*@example.com))"

항목이 반환되려면 해당 속성이 모두 정의되어 있어야 합니다.

하위 필터 중 하나가 참이면 OR 기호가 결과를 반환합니다. 연락처 정보가 있는 항목을 출력하려면 다음과 같은 필터를 시도할 수 있습니다.

"(|(telephoneNumber=*)(mail=*)(street=*))"

여기에서 연산자가 세 개 이상의 하위 필터에 적용할 수 있음을 알 수 있습니다. 필요에 따라 이러한 논리적 구성을 중첩하여 매우 복잡한 패턴을 생성할 수도 있습니다.

ldapmodify 및 변형을 사용하여 LDAP 항목 변경 또는 생성

지금까지 우리는 LDAP DIT 내의 항목 및 항목 세그먼트를 조회, 검색 및 표시하는 데 유용한 ldapsearch 명령에만 집중했습니다. 이것은 대부분의 사용자의 읽기 전용 요구 사항을 충족하지만 DIT에서 개체를 변경하려면 다른 도구가 필요합니다.

ldapmodify 명령은 LDIF 파일을 사용하여 DIT를 조작합니다. 이 안내서를 보면 LDIF 파일에 대한 자세한 내용과 이를 사용하여 항목을 수정하거나 추가하는 방법에 대해 자세히 알아볼 수 있습니다.

ldapmodify의 기본 형식은 이 가이드 전체에서 사용한 ldapsearch 구문과 거의 일치합니다. 예를 들어 -H 플래그로 서버를 지정하고 SASL 인증을 위해 -Y 플래그 또는 -x 를 사용하여 인증해야 합니다. , -D-[W|w] 플래그는 단순 인증용입니다.

LDIF 파일에서 변경 사항 적용

이러한 상용구 옵션을 제공한 후 가장 일반적인 작업은 LDIF 파일을 읽고 DIT에 적용하는 것입니다. 이것은 -f 옵션을 사용하여 수행할 수 있습니다(-f 옵션을 사용하지 않는 경우 명령줄에서 LDIF 형식을 사용하여 변경 사항을 입력해야 합니다. ). 위에 링크된 가이드에 설명된 구문을 사용하여 LDIF 파일을 직접 만들어야 합니다.

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

이것은 LDIF 파일을 읽고 지정된 변경 사항을 적용합니다. ldapmodify 명령의 경우 각 LDIF 변경에는 changetype이 지정되어야 합니다. ldapmodify 명령은 DIT 조작 명령의 가장 일반적인 형식입니다.

LDIF 파일이 새 항목을 추가하고 있고 각 항목에 대한 changetype: add를 포함하지 않는 경우 -a 플래그를 ldapmodify를 사용하거나 기본적으로 이 동작의 별칭을 지정하는 ldapadd 명령을 사용하십시오. 예를 들어, changetype포함하는 LDIF 파일은 다음과 같습니다.

dn: ou=newgroup,dc=example,dc=com
changetype: add
objectClass: organizationalUnit
ou: newgroup

이 파일을 처리하려면 ldapmodify를 사용하면 됩니다.

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

그러나 파일은 다음과 같이 changetype 없이 구성할 수도 있습니다.

dn: ou=newgroup,dc=example,dc=com
objectClass: organizationalUnit
ou: newgroup

이 경우 이 항목을 DIT에 추가하려면 ldapmodify와 함께 -a 플래그를 사용하거나 ldapadd 명령. 어느 하나:

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -a -f /path/to/file.ldif

아니면 이거:

  1. ldapadd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

유사한 명령을 항목 삭제(ldapdelete) 및 이동 LDAP 항목(ldapmodrdn)에 사용할 수 있습니다. 이러한 명령을 사용하면 파일에서 각각 명시적으로 changetype: deletechangetype: modrdn을 지정할 필요가 없습니다. 이들 각각에 대해 어떤 형식을 사용할지는 사용자가 결정합니다(LDIF 파일 또는 명령줄에서 변경 사항을 지정할지 여부).

변경 테스트 및 오류 처리

LDIF 파일의 모의 실행을 수행하려는 경우 -n-v 플래그를 사용할 수 있습니다. 실제 DIT를 수정하지 않고 어떤 변경이 수행되는지 알려줍니다.

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -n -v -f /path/to/file.ldif

일반적으로 LDIF 파일을 처리하는 동안 오류가 발생하면 작업이 즉시 중단됩니다. 이전 변경 사항이 올바르게 적용되었다는 가정 하에 파일의 뒷부분에 있는 변경 요청이 DIT를 수정하는 경우가 많기 때문에 이것은 일반적으로 가장 안전한 방법입니다.

그러나 오류를 유발하는 변경 사항을 건너뛰고 파일 전체에서 명령을 계속하려면 -c 플래그를 사용할 수 있습니다. 잘못된 요청을 수정하고 다시 실행할 수 있도록 -S 플래그를 사용하여 오류를 작성할 수 있는 파일을 가리키고 싶을 수도 있습니다.

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -c -S /path/to/error_file -f /path/to/file.ldif

이렇게 하면 작업 후 평가할 로그(문제가 되는 항목을 나타내는 주석이 포함된 완료)를 갖게 됩니다.

다양한 기타 LDAP 명령

이미 다룬 명령은 일상적으로 사용하게 될 가장 일반적인 LDAP 작업을 수행합니다. 알아두면 유용한 몇 가지 명령이 더 있습니다.

ldappasswd

일부 LDAP 항목에 비밀번호가 있는 경우 ldapppasswd 명령을 사용하여 항목을 수정할 수 있습니다. 이는 문제의 계정 또는 관리 계정을 사용하여 인증한 다음 새 암호(및 선택적으로 이전 암호)를 제공하여 작동합니다.

이전 암호는 -a 플래그(이전 암호는 인라인에서 다음 항목으로 제공됨), -A 플래그(이전 암호는 메시지가 표시됨) 또는 -t 플래그(이전 암호는 다음 항목으로 지정된 파일에서 읽음)입니다. 이는 일부 LDAP 구현에서는 선택사항이지만 다른 구현에서는 필수이므로 포함하는 것이 가장 좋습니다.

새 암호는 -s 플래그(새 암호는 인라인에서 다음 항목으로 제공됨), -S 플래그(새 암호는 프롬프트됨) 또는 -T 플래그(새 암호는 다음 항목으로 지정된 파일에서 읽음)입니다.

따라서 일반적인 변경 사항은 다음과 같습니다.

  1. ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w oldpassword -a oldpassword -s newpassword

항목이 제공되지 않으면 바인딩에 사용 중인 항목이 변경됩니다. 관리 항목에 바인딩하는 경우 명령 뒤에 제공하여 쓰기 액세스 권한이 있는 다른 항목을 변경할 수 있습니다.

  1. ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w adminpassword -a oldpassword -s newpassword "uid=user,dc=example,dc=com"

암호 변경 및 재설정에 대해 자세히 알아보려면 이 가이드를 확인하세요.

ldapwhoami

ldapwhoami 명령은 인증 후 LDAP 서버가 사용자를 보는 방법을 알려줄 수 있습니다.

익명 또는 단순 인증을 사용하는 경우 결과가 그다지 유용하지 않을 수 있습니다(각각 "익명\ 또는 정확히 바인딩할 항목). 그러나 SASL 인증의 경우 인증 메커니즘이 어떻게 작동하는지에 대한 통찰력을 제공할 수 있습니다. 보고있다.

예를 들어 sudo와 함께 -Y EXTERNAL SASL 메커니즘을 사용하여 cn=config DIT에서 작업을 수행하는 경우 < 인증 DN을 보려면ldapwhoami:

  1. sudo ldapwhoami -H ldapi:// -Y EXTERNAL -Q
dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

이것은 DIT의 실제 항목이 아니라 SASL 인증이 LDAP가 이해할 수 있는 형식으로 변환되는 방식입니다. 인증 DN을 확인하면 매핑 및 액세스 제한을 만드는 데 사용할 수 있으므로 이 정보를 얻는 방법을 아는 것이 좋습니다.

ldaurl

ldapurl 도구를 사용하면 쿼리와 관련된 다양한 구성 요소를 지정하여 LDAP URL을 구성할 수 있습니다. LDAP URL은 표준화된 URL을 통해 LDAP 서버에서 리소스를 요청할 수 있는 방법입니다. 이는 인증되지 않은 연결이며 읽기 전용입니다. 많은 LDAP 솔루션이 더 이상 리소스 요청을 위한 LDAP URL을 지원하지 않으므로 사용 중인 소프트웨어에 따라 사용이 제한될 수 있습니다.

표준 LDAP URL은 다음 구문을 사용하여 형식이 지정됩니다.

ldap://host:port/base_dn?attr_to_return?search_scope?filter?extension

구성 요소는 다음과 같습니다.

  • base_dn: 검색을 시작할 기본 DN입니다.
  • attr_to_return: 관심 있는 일치 엔티티의 속성입니다. 쉼표로 구분되어야 합니다.
  • search_scope: 검색 범위입니다. base, sub, one 또는 children.
  • filter: 반환되어야 하는 항목을 선택하는 데 사용되는 검색 필터입니다.
  • extension: 지정하려는 LDAP 확장자입니다. 여기서는 다루지 않습니다.

각 항목은 URL에서 물음표로 구분됩니다. 사용하지 않는 항목을 제공할 필요는 없지만 항목 유형은 문자열의 위치로 식별되므로 해당 항목에 대해 "슬롯\을 비워 두어야 합니다. 그러면 여러 개의 물음표가 표시됩니다. 정보를 추가하자마자 URL을 중지할 수 있습니다(사용하지 않는 "슬롯\을 나타내기 위해 끝에 물음표가 필요하지 않음).

예를 들어 URL은 다음과 같습니다.

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

이것을 ldapurl 도구에 공급하려면 -H 플래그를 사용하고 URL을 따옴표로 묶습니다.

  1. ldapurl -H "ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)"

명령은 다음과 같이 분리합니다.

scheme: ldap
host: localhost
port: 389
dn: dc=chilidonuts,dc=tk
selector: dn
selector: ou
scope: sub
filter: (ou=*)

또한 이러한 플래그를 사용하여 프로세스를 역전시키고 LDAP URL을 함께 엮을 수 있습니다. 이들은 LDAP URL의 다양한 구성 요소를 미러링합니다.

  • -S: URL 스키마(ldap, ldaps 또는 ldapi). ldap 체계가 기본값입니다.
  • -h: LDAP 서버 이름 또는 주소
  • -p: LDAP 서버 포트입니다. 기본값은 체계에 따라 다릅니다.
  • -b: 쿼리를 시작할 기본 DN
  • -a: 반환할 속성의 쉼표로 구분된 목록
  • -s: 사용할 검색 범위(base, sub, children 또는 one)
  • -f: 반환할 항목을 선택하기 위한 LDAP 필터
  • -e: 지정할 LDAP 확장자

이를 사용하여 다음과 같이 입력할 수 있습니다.

  1. ldapurl -h localhost -b "dc=example,dc=com" -a dn,ou -s sub -f "(ou=*)"

이 명령은 다음과 같이 구성된 URL을 반환합니다.

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

이를 사용하여 이 형식을 사용하여 통신할 수 있는 LDAP 클라이언트와 함께 사용할 수 있는 URL을 구성할 수 있습니다.

ldapcompare

ldapcompare 도구는 항목의 속성을 값과 비교하는 데 사용할 수 있습니다. 이는 데이터의 유효성을 검사하기 위해 간단한 어설션 검사를 수행하는 데 사용됩니다.

이 프로세스에는 쿼리되는 데이터에 따라 평소와 같이 바인딩이 포함되어 항목 DN 및 확인할 어설션을 제공합니다. 어설션은 하나 또는 두 개의 콜론으로 구분된 속성과 값을 지정하여 제공됩니다. 단순 문자열 값의 경우 단일 콜론을 사용해야 합니다. 이중 콜론은 base64로 인코딩된 값이 지정되었음을 나타냅니다.

따라서 다음과 같이 John이 "powerusers\ 그룹의 구성원이라고 주장할 수 있습니다.

  1. ldapcompare -H ldap:// -x "ou=powerusers,ou=groups,dc=example,dc=com" "member:uid=john,ou=people,dc=example,dc=com"

그가 그룹에 있으면 TRUE를 반환합니다. 그렇지 않은 경우 명령은 FALSE를 반환합니다. 바인드에 사용되는 DN에 해당 속성을 읽을 수 있는 충분한 권한이 없는 경우 UNDEFINED를 반환합니다.

이는 요청된 작업을 수행하기 전에 그룹 구성원을 확인하여 인증 시스템의 기반으로 사용할 수 있습니다.

결론

이제 일부 LDAP 유틸리티를 사용하여 LDAP 서버에 연결, 관리 및 사용하는 방법에 대해 잘 알고 있을 것입니다. 다른 클라이언트는 일상적인 관리를 위해 LDAP 시스템에 더 유용한 인터페이스를 제공할 수 있지만 이러한 도구는 요령을 익히고 DIT의 데이터 및 구조에 대한 좋은 하위 수준 액세스를 제공하는 데 도움이 될 수 있습니다.