Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / /

OpenLDAP와 함께 자체 관리형 SASL 및 LDAP 를 사용하여 인증

이 페이지의 내용

  • 고려 사항
  • 구성 saslauthd
  • MongoDB 구성

MongoDB Enterprise는 사용자의 프록시 인증을 지원합니다. 이를 통해 관리자는 인증 요청을 지정된 LDAP(경량 디렉토리 액세스 프로토콜) 서비스로 프록시하여 사용자를 인증하도록 MongoDB 클러스터를 구성할 수 있습니다.

참고

libldap에 연결된 MongoDB 4.2 엔터프라이즈 바이너리의 경우(예: RHEL에서 실행하는 경우), libldap에 대한 액세스가 동기화되어 일부 성능/지연 비용이 발생합니다.

0}에 연결된 MongoDB 4.2 Enterprise 바이너리의 libldap_r 경우 이전 MongoDB 버전과 동작이 변경되지 않습니다.

경고

Windows용 MongoDB Enterprise는 saslauthd를 통한 바인딩을 지원하지 않습니다.

  • Linux MongoDB 서버는 saslauthd 데몬을 통해 LDAP 서버에 대한 바인딩을 지원합니다.

  • 클라이언트와 서버, saslauthd 서버와 LDAP 서버 간에는 암호화되거나 신뢰할 수 있는 보안 연결을 사용하세요. LDAP 서버는 SASL PLAIN 메커니즘을 사용하여 일반 텍스트로 데이터를 보내고 받습니다. VPN과 같은 신뢰할 수 있는 채널, TLS/SSL로 암호화된 연결 또는 신뢰할 수 있는 유선 네트워크만 사용해야 합니다.

사용자 인증을 위한 LDAP 지원을 위해서는 saslauthd 데몬 프로세스와 MongoDB 서버의 적절한 구성이 필요합니다.

1

/etc/sysconfig/saslauthd 파일로 saslauthd를 구성하는 시스템(예: Red Hat Enterprise Linux, Fedora, CentOS 및 Amazon Linux AMI)에서는 메커니즘 MECHldap로 설정합니다:

MECH=ldap

Ubuntu와 같이 /etc/default/saslauthd 파일로 saslauthd를 구성하는 시스템에서는 MECHANISMS 옵션을 ldap로 설정합니다:

MECHANISMS="ldap"
2

특정 Linux 배포판에서는 인증 자격 증명 캐싱이 활성화된 상태에서 saslauthd가 시작됩니다. 다시 시작되거나 캐시가 만료될 때까지 saslauthd는 LDAP 서버에 접속하여 인증 캐시에 있는 사용자를 재인증하지 않습니다. 이렇게 하면 LDAP 서버가 다운되었거나 캐시된 사용자의 자격 증명이 해지된 경우에도 saslauthd가 캐시에 있는 사용자를 성공적으로 인증할 수 있습니다.

인증 캐시의 만료 시간(초)을 설정하려면 -t 옵션saslauthd 참조하세요. .

3

saslauthd.conf 파일이 없는 경우 파일을 만듭니다. saslauthd.conf 파일은 일반적으로 /etc 폴더에 있습니다. 다른 파일 경로를 지정하는 경우 -O 옵션saslauthd 참조하세요. .

OpenLDAP 서버에 연결하려면 다음 구성 옵션으로 saslauthd.conf 파일을 업데이트하세요.

ldap_servers: <ldap uri>
ldap_search_base: <search base>
ldap_filter: <filter>

ldap_servers는 인증에 사용되는 LDAP 서버의 URI를 지정합니다. 일반적으로 로컬 시스템에 설치된 OpenLDAP의 경우 ldap://localhost:389 값을 지정하거나, TLS/SSL을 통한 LDAP를 사용하는 경우 ldaps://localhost:636 값을 지정할 수 있습니다.

ldap_search_base는 검색의 기준이 되는 고유 이름을 지정합니다. 검색에는 아래의 기준 또는 객체가 포함됩니다.

ldap_filter는 검색 필터를 지정합니다.

이러한 구성 옵션의 값은 테스트에 특정한 값과 일치해야 합니다. 예를 들어 이메일을 필터링하려면 ldap_filter: (mail=%n)을 대신 지정합니다.

OpenLDAP용 샘플 saslauthd.conf 파일에는 다음 내용이 포함되어 있습니다:

ldap_servers: ldaps://ad.example.net
ldap_search_base: ou=Users,dc=example,dc=com
ldap_filter: (uid=%u)

이 샘플 OpenLDAP 구성을 사용하려면 uid 속성(로그인 이름)으로 사용자를 생성하고 도메인 구성 요소(dc) examplecom 아래의 Users 조직 단위(ou) 아래에 배치합니다.

구성에 대한 자세한 내용은 saslauthd http://www.openldap.org/doc/admin24/guide.html#Configuringsaslauthd 를 참조하세요. .

4

testsaslauthd 유틸리티를 사용하여 saslauthd 구성을 테스트합니다. 예시:

testsaslauthd -u testuser -p testpassword -f /var/run/saslauthd/mux
  • 0: OK "Success" : 인증에 성공했음을 나타냅니다.

  • 0: NO "authentication failed" : 사용자 이름, 비밀번호 또는 구성 오류를 나타냅니다.

호스트 운영 체제의 saslauthd 디렉토리 위치를 기준으로 파일 경로를 수정합니다.

중요

security.sasl.saslauthdSocketPath 또는 --setParameter saslauthdPath로 지정된 saslauthd Unix 도메인 소켓 파일의 상위 디렉토리는 다음 대상에 대해 읽기 및 실행(r-x) 권한을 부여해야 합니다.

  • mongod 또는 mongos를 시작하는 사용자 또는

  • 해당 사용자가 속한 그룹.

mongod 또는 mongossaslauthd 디렉토리 및 해당 콘텐츠에 대해 지정된 권한이 없으면 saslauthd를 통해 인증할 수 없습니다.

1

MongoDB의 $external 데이터베이스에 사용자를 추가합니다. 사용자의 권한을 지정하려면 사용자에게 역할을 할당합니다.

$external 인증 사용자(Kerberos, LDAP 또는 x.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장 을 사용하려면 사용자 이름이 10k 바이트를 초과할 수 없습니다.

예를 들어 다음은 records 데이터베이스에 대한 읽기 전용 액세스 권한이 있는 사용자를 추가합니다.

db.getSiblingDB("$external").createUser(
{
user : <username>,
roles: [ { role: "read", db: "records" } ]
}
)

필요에 따라 주체(principals)를 추가합니다. 사용자 생성 및 관리에 대한 자세한 내용은 사용자 관리 명령을 참조하세요.

2

프록시 인증에 saslauthd 인스턴스를 사용하도록 MongoDB 서버를 구성하려면 mongod를 시작할 때 다음 옵션을 포함하세요:

authorization 옵션을 사용하여 인증을 적용하는 경우 사용자를 만들려면 권한이 필요합니다.

소켓 경로가 /<some>/<path>/saslauthd인 경우 다음 명령줄 예시에서와 같이 saslauthdPath/<some>/<path>/saslauthd/mux로 설정합니다:

mongod --auth --setParameter saslauthdPath=/<some>/<path>/saslauthd/mux --setParameter authenticationMechanisms=PLAIN

구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 구성원이 다른 호스트에서 실행되도록 하려면 --bind_ip 를 지정합니다.

또는 YAML 형식의 구성 파일을 사용하는 경우 파일에 다음 설정을 지정합니다:

security:
authorization: enabled
setParameter:
saslauthdPath: /<some>/<path>/saslauthd/mux
authenticationMechanisms: PLAIN

또는 이전 구성 파일 형식을 사용하는 경우:

auth=true
setParameter=saslauthdPath=/<some>/<path>/saslauthd/mux
setParameter=authenticationMechanisms=PLAIN

기본 Unix 도메인 소켓 경로를 사용하려면 다음 명령줄 예제에서와 같이 saslauthdPath를 빈 문자열 ""으로 설정합니다:

mongod --auth --setParameter saslauthdPath="" --setParameter authenticationMechanisms=PLAIN

구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 구성원이 다른 호스트에서 실행되도록 하려면 --bind_ip 를 지정합니다.

또는 YAML 형식의 구성 파일을 사용하는 경우 파일에 다음 설정을 지정합니다:

security:
authorization: enabled
setParameter:
saslauthdPath: ""
authenticationMechanisms: PLAIN

또는 이전 구성 파일 형식을 사용하는 경우:

auth=true
setParameter=saslauthdPath=""
setParameter=authenticationMechanisms=PLAIN

구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트가 배포에 연결하거나 배포 멤버가 다른 호스트에서 실행되도록 하려면 net.bindIp 설정을 지정하세요.

3

연결 중 명령줄에서 인증하거나 먼저 연결한 다음 db.auth() 메서드를 사용하여 인증할 수 있습니다.

mongosh 으로 연결할 때 인증하려면 다음 명령줄 옵션으로 <host><user> 을(를) 대체하여 mongosh 를 실행하고 메시지가 표시되면 비밀번호를 입력합니다.

mongosh --host <host> --authenticationMechanism PLAIN --authenticationDatabase '$external' -u <user> -p

또는 자격 증명을 제공하지 않고 연결한 다음 $external 데이터베이스에서 db.auth() 메서드를 호출합니다. mechanism 필드에 "PLAIN" 값을 지정하고, userpwd 필드에 각각 사용자 및 비밀번호를 지정합니다. 다음 예와 같이 서버가 saslauthd 로 전달하려면 다이제스트되지 않은 비밀번호를 수신해야 하므로 기본값 digestPassword 값(false)을 사용합니다.

메서드/명령 호출에 비밀번호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 비밀번호를 입력하라는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo shell 에서와 마찬가지로 비밀번호를 직접 지정할 수 있습니다.

db.getSiblingDB("$external").auth(
{
mechanism: "PLAIN",
user: <username>,
pwd: passwordPrompt() // or cleartext password
}
)

메시지가 표시되면 비밀번호를 입력합니다.

서버는 일반 텍스트로 비밀번호를 전달합니다. 일반적으로 신뢰할 수 있는 채널(VPN, TLS/SSL, 신뢰할 수 있는 유선 네트워크)에서만 사용하세요. 고려 사항을 참조하세요.

돌아가기

ActiveDirectory 사용