일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SpringBoot
- Mac
- Docker
- 레디스
- vue
- EMR
- 예제
- Jenkins
- 자동
- 머신러닝
- hive
- Zeppelin
- Cluster
- Redis
- config
- aws
- 설정
- redash
- ec2
- fastcampus
- java
- login
- gradle
- 간단
- 자바
- 로그인
- spring
- 클러스터
- Kafka
- 젠킨스
- Today
- Total
코알못
5분 안에 구축하는 LDAP 본문
Microsoft 에서 개발한 AD(Active Directory)는 디렉토리 서비스 공급자이며 윈도우OS 에서 디렉터리 안에 내용을 쉽게 검색 할 수 있도록 한다.
이런 공급자들이 쉽게 통신을 하기 위한 프로토콜이 LDAP(Lightweight Directory Access Protocol) 이다.
그렇다고 하면 AD 디렉터리에 원하는 데이터를 넣고 찾는 다는 점에서 데이터베이스를 사용하면 되는데 왜 AD를 사용할까? 라는 의문을 가질 수 있다.
사실상 아무 데이터나 넣고 찾는다고 하면 차이가 없을 지라도 AD는 '조직의 사용자나 주소록 정보를 관리' 에 특화 되어 만들어져 해당 데이터를 관리 하고자 한다면 AD 사용에 이점이 있다.
LDAP 은 비동기 프로토콜 이며 자체적으로 디렉토리 서비스를 제공 할 수 있으나 쓰기 작업이 많이 이뤄지면 AD 가 더 적합하며 윈도우 서버라면 AD, 그외 서버라면 LDAP 을 이용한다.
오픈 소스인 openldap 을 설치하여 실습을 진행해본다!
$ brew install openldap
우선 설정 파일을 생성해야 하며 샘플을 이용하여 복사하여 생성한다.
$ sudo cp /etc/openldap/slapd.conf.default /etc/openldap/slapd.conf
root 비밀번호를 수정해야 하며 string 으로 사용해도 되나 암호화된 값을 이용하는것이 더 안전하기에 slappasswd 명령어로 원하는 비밀번호를 입력하고 단방향 알고리즘 sha로 암호화한 패스워드를 가져온다.
$ slappasswd
New password:
Re-enter new password:
{SSHA}SV903h8h9mx4YGl8umVAjgefgNPMzyXz
slapd.conf 설정 파일을 열어 몇가지 수정한다.
$ sudo vi /etc/openldap/slapd.conf
용어 부터 우선 이해해야 한다.
- DN (Distinguished Name) : 고유 명칭 (도메인)
- CN (Canonical Name) : 정식 이름 (사용자 이름)
- OU (Organizational Unit) : 조직 단위 (부서 이름)
용어를 간단하게 익혔다면 아래 설정값별 의미 하는 정보를 확인한다.
- database : 데이터베이스 종류 (bdb)
- suffix : 최상위 dc
- rootdn : 관리용 DN, 사용자 추가 삭제 등 사용되는 DN
- rootpw : DN 인증을 위한 패스워드
- directory : 데이터베이스 위치
//기존
database bdb
suffix "dc=my-domain,dc=com"
rootdn "cn=Manager,dc=my-domain,dc=com"
rootpw secret
directory /private/var/db/openldap/openldap-data
기본 패스워드인 'secret' 을 새 암호화된 패스워드로 수정하고, dc 를 원하는 명칭으로 수정 한다.
데이터베이스 데이터의 경우에는 새 디렉토리 'corin.com' 을 만들어 저장 하도록 한다.
database bdb
suffix "dc=corin,dc=com"
rootdn "cn=Manager,dc=corin,dc=com"
rootpw {SSHA}SV903h8h9mx4YGl8umVAjgefgNPMzyXz
directory /private/var/db/openldap/corin.com
다음 ldap.conf 를 열어 몇가지 수정한다.
// 기존
#BASE dc=example,dc=com
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666
// 변경
BASE dc=corin,dc=com
BINDDN cn=Manager,dc=corin,dc=com
URI ldap://localhost
시작 해보자!
정상적으로 slapd starting 이라는 문구와 함께 기동 되었다.
$ sudo /usr/libexec/slapd -h ldap://localhost -d 50
623ff757 @(#) $OpenLDAP: slapd 2.4.28 (Jun 5 2020 21:19:19) $
root@osx400.sd.apple.com:/AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Binaries/OpenLDAP/install/TempContent/Objects/servers/slapd
623ff757 daemon: SLAP_SOCK_INIT: dtblsize=256
623ff758 main: Enabling TLS failed; continuing with TLS disabled.
623ff758 bdb_db_open: warning - no DB_CONFIG file found in directory /private/var/db/openldap/openldap-data: (2).
Expect poor performance for suffix "dc=corin,dc=com".
623ff758 bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
623ff758 slapd starting
623ff758 daemon: posting com.apple.slapd.startup notification
비어있던 corin.com 디렉토리에 DB 관련 파일이 생성되었다.
$ cd /private/var/db/openldap/corin.com
(base) hongyoolee@hateyou corin.com % ls
__db.001 __db.004 alock log.0000000001
__db.002 __db.005 dn2id.bdb
__db.003 __db.006 id2entry.bdb
$ ls -all
total 23384
drwxr-xr-x 12 root wheel 384 3 27 15:10 .
drwxr-xr-x 5 root wheel 160 3 27 15:07 ..
-rw------- 1 root wheel 24576 3 27 15:10 __db.001
-rw------- 1 root wheel 245760 3 27 15:10 __db.002
-rw------- 1 root wheel 270336 3 27 15:10 __db.003
-rw------- 1 root wheel 98304 3 27 15:10 __db.004
-rw------- 1 root wheel 761856 3 27 15:10 __db.005
-rw------- 1 root wheel 40960 3 27 15:10 __db.006
-rw-r--r-- 1 root wheel 2048 3 27 15:10 alock
-rw------- 1 root wheel 8192 3 27 15:10 dn2id.bdb
-rw------- 1 root wheel 32768 3 27 15:10 id2entry.bdb
-rw------- 1 root wheel 10485760 3 27 15:10 log.0000000001
ldap 은 정상적으로 띄웠으면 최상위 DN 을 생성해야 한다.
ldif 파일에 끝 부분에 공백, 탭이 있으면 syntex 오류 발생하니 주의한다.
// create-suffix-dn.ldif
dn: dc=corin,dc=com
ObjectClass: dcObject
ObjectClass: organization
dc: corin
o: Example
// create-suffix-dn.sh
sudo ldapadd -x -D "cn=Manager,dc=corin,dc=com" -W -f create-suffix-dn.ldif
위 만든 스크립트를 실행시켜 생성한다.
$ ./create-suffix-dn.sh
확인 하면 생성한 정보가 나온다.
$ ldapsearch -x -b dc=corin,dc=com
# extended LDIF
#
# LDAPv3
# base <dc=corin,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# corin.com
dn: dc=corin,dc=com
objectClass: dcObject
objectClass: organization
dc: corin
o: Example
# group-01, corin.com
dn: ou=group-01,dc=corin,dc=com
ou: group-01
objectClass: organizationalUnit
objectClass: top
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
이제 부서 생성 요청이나 계정 생성 요청시 어떻게 처리할지 알아본다!
console 창에서 계정을 관리하는것은 다소 운영하기 어렵기에 편리하게 툴을 사용하도록 하며 여러 툴중에 저자는 apache-directory-studio를 설치하도록 한다.
$ brew install apache-directory-studio
############ 100.0%
==> Installing Cask apache-directory-studio
==> Moving App 'ApacheDirectoryStudio.app' to '/Applications
🍺 apache-directory-studio was successfully installed!
설치가 완료 되어 application 디렉토리로 move 했다는 안내문구가 나오며 이동하여 확인 하도록 한다.
이제 그룹 group-01, group-02 를 추가한다.
top class 가 자동으로 추가됐다.
group-02도 위와 같이 추가한다.
이제 그룹에 유저를 넣는다.
- group-01 : hongyoolee, kimsasa
- group-02 : kimhaha
organizationalPerson 추가시 필요한 class 도 자동으로 추가된다.
mail 은 기본적으로 제공하는 속성이 아니기에 아래와 같은 오류 발생한다.
현재 꼭 필요한 속성은 아니므로 추후에 커스텀 속성 만드는 방법을 알아보도록 하고(하단 참고 부분 1번에 정리 완료) 우선 mail 속성을 제외 하고 생성한다.
모두 만들었으면 아래와 같이 볼 수 있다.
이제 검색 기능을 알아보도록한다.
툴의 search 부분에 오른쪽 클릭하여 생성한다.
적당한 검색 명칭과, 찾을 DN, 필터를 선택하고 생성한다.
저자의 경우 gorup-01 의 모든 데이터를 가져온다.
위 검색 조건대로 정상적으로 나온것을 볼 수 있다.
전체 그룹에서 kim 성을 가진 사용자를 찾는다고 하면 아래와 같이 필터를 만들 수 있다.
filter의 경우에는 문법을 알아야 사용가능하니 구글링하여 원하는 필터를 넣는다.
아래와 같이 정상적으로 검색되는것을 볼 수있다.
다음 시간에는 다른 서비스에서 ldap 을 연동하는 것을 실습해본다!
끝!
# 참고 사항
1. mail 옵션을 추가하고 싶다면 아래 표기한 클래스 추가
ldap_modify: Object class violation (65)
additional info: attribute 'mail' not allowed
1. apache directory studio 가이드 : https://nightlies.apache.org/directory/studio/2.0.0.v20210717-M17/userguide/ldap_browser/gettingstarted_create_connection.html
'ETC' 카테고리의 다른 글
[Shell] scp/ssh 명령어 no/yes 문구 비활성화 (배치 등록시 필요) (0) | 2022.07.16 |
---|---|
[Docker] 명령어 정리 (0) | 2022.07.16 |
[Docker] 로그 (0) | 2022.03.26 |
[Docker] 볼륨 (0) | 2022.03.26 |
[Docker] 네트워크 (0) | 2022.03.26 |