목차 1. package 설치 2. Openldap 초기화 1. OLC 및 ldap data 초기화 목표 2. LDAP 설정(olc) 및 LDAP data 초기화 3. LDAP client 설정 4. 초기화 확인 3. account 암호 설정 1. LDAP 관리자 암호 변경 2. Account 암호 변경
참고!
이 문서는 RHEL >=6, CentOS >=6, AnNyung >=2 에서의 설정을 테스트 하였습니다.
이 문서는 모든 ldap data를 초기화 시킨 상태에서 설정하는 것을 기준으로 합니다.
1. package 설치
RHEL/CentOS 참고!
이 문서에서 설명하는 LDAP 관리도구인 ldap-auth-utils 와 ldap-auth-utils-passwd, genpasswd 패키지는 안녕 리눅스에서만 제공을 합니다. 그러므로 RHEL/CentOS 에서는 안녕 리눅스의 core package repository를 yum에 등록해 주십시오. 아래와 같이 repository를 추가를 하면, 기존의 RHEL/CentOS package를 변경 시키지 않고, 안녕 리눅스에서만 제공하는 패키지를 사용/관리 할 수 있습니다.
repository 준비가 다 되었다면, ldap-auth-utils 와 ldap-auth-utils-passwd 패키지를 설치 합니다. 이 패키지들을 설치를 하면, genpasswd, openldap-servers, openldap-clients 패키지가 의존성 설정으로 같이 설치가 됩니다.
초기화는 서버의 LDAP 설정및 데이터를 초기화 한 상태에서 진행을 하는 것을 가정 하에 진행을 합니다. 만약 다른 LDAP database를 구동하고 있다면, 이 문서를 참고하는 것을 포기 하십시오!
초기화 시에 모든 ldap database를 초기화 시켜 버립니다. 매우 주의 하십시오!!!
openldap은 splapd daemon을 이용하여 구동이 됩니다. 또한, 2.4.23 버전 부터는 slapd.conf 대신에 OLC(OnLineConfiguration, cn=config 구조)로 변경이 되었습니다.
물론 기존의 slapd.conf를 migration 해 주는 방법을 제공하고 있기는 하나, 여기서는 그냥 OLC를 이용하는 방법으로 설명을 합니다. AnNyung 2 에서도 동일하게 OLC 방식으로 설정을 해야 합니다. (RHEL 6 부터 OLC방식으로 변경이 되었습니다.)
2.1 OLC 및 ldap data 초기화 목표
ldap 초기화는 다음의 목표를 가지고 진행을 합니다.
ldap 관리자로 cn=Manager,${BASEND} 설정
ldap 관리자 암호 설정
UID 0 권한으로 ldap 설정 변경 시에 암호 없이 접근 가능 (-Y EXTERNAL -H ldapi:/// 권한 이용)
ldap log를 /var/log/slapd.log 에 남기도록 설정
ADMIN, People, Group OU(Organization Unit) 생성
Admin OU : Poeple, Group OU를 관리하기 위한 user 및 group account
People OU : ldap 에서 서비스 할 user account
Group OU : ldap 에서 서비스 할 group account
host 제한 연동
sudo 권한 연동
ldap access policy
ldapadmins group의 member는 dc=oops,dc=org database에 대한 모든 권한을 가진다.
ldapROusers group의 member는 dc=oops,dc=org database에 대한 모든 읽기 권한을 가진다.
일반 account는 password entry만 제외하고 읽기 권한을 가진다.
일반 account는 자신의 password entry를 변경할 수 있다.
anonymous account는 접근을 불허 한다.
Ldap server의 system root(UID 0)는 cn=manager 와 동일한 권한을 가진다.
설치 후, 미리 등록되는 사용자 및 group은 다음과 같습니다.
Manager Group
ldapadmins : ldap 관리를 할 수 있는 group
ldapROusers : ldap 전체 data에 접근할 수 있는 readonly gruop
ldapmanagers : ldap을 관리하기 위한 account들의 default group
ldap 관리를 위해서는 사용자를 위의 세 그룹에 권한에 맞게 등록해 주면 자동으로 권한을 획득하게 됩니다.
Manager User
ssoadmin
ldap 관리를 할 수 있는 account
ldapadmins gruop member
DN: uid=ssoadmin,ou=Admin,dc=oops,dc=org
ssomanager
tree 전체의 데이터에 접근 가능한 readonly account
ldapROusers group member
인증 통합시에, 각 client 서버에서 ldap에 연결하기 위한 account
replica
replication에 사용하기 위한 account (readonly account)
ldapROusers group member
System Group
ldapusers
생성할 LDAP account들의 default Group
2.2 LDAP 설정(olc) 및 LDAP data 초기화
초기화는 ldap-auth-utils의 ldap_auth_init 명령을 이용합니다.
다시 강조하지만, 이 작업은 기존의 ldap data를 제거하니, 주의 하시기 바랍니다.
먼저, ldap_auth_init를 동작 시키기 위하여, slapd 서비스를 정지 시킨 후 기존의 설정을 제거합니다.
[root@an3 ~]$ service slapd stop
Redirecting to /bin/systemctl stop slapd.service
[root@an3 ~]$ rm -rf /etc/openldap/{slapd*.conf,slapd.d}
설정 제거 후, ldap_auth_init를 실행 시키고 다음의 과정을 진행 하십시오.
[root@an3 ~]$ ldap_auth_init
1. ldap 패키지 설치
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.premi.st
* epel: ftp.riken.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: mirror.premi.st
Package openldap-servers-2.4.40-9.el7_2.x86_64 already installed and latest version
Package openldap-clients-2.4.40-9.el7_2.x86_64 already installed and latest version
Nothing to do
2. syslog 설정
. /etc/rsyslog.d/slapd.conf ... Done
Redirecting to /bin/systemctl restart rsyslog.service
. /etc/logrotate.d/openldap ... Done
3. SLAPD 설정 및 구동
. /etc/logrotate.d/openldap ... Done
Redirecting to /bin/systemctl restart slapd.service
4.기본 정보 설정
BASE DN 입력 : DC=oops,DC=org
LDAP 관리자 암호 입력 : ****
LDAP 관리자 암호 재입력 : ****
결과:
BASE => oops
BASE DN => DC=oops,DC=org
ADMIN Password => asdf
ADMIN Password => {SSHA}pct+aDwN4y4BR3ujyxgWjUBGVqo7fg1/
5. BASE DN 설정
. /etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif ... Done
. /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif ... Done
. /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif ... Done
. /etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif ... Done
6. 어드민 암호 설정
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
modifying entry "olcDatabase={2}bdb,cn=config"
Redirecting to /bin/systemctl restart slapd.service
7. 기본 트리 구조 초기화
adding new entry "DC=oops,DC=org"
adding new entry "ou=Admin,DC=oops,DC=org"
adding new entry "ou=People,DC=oops,DC=org"
adding new entry "ou=Group,DC=oops,DC=org"
Done
8. 기본 그룹 생성
adding new entry "cn=ldapadmins,ou=Admin,DC=oops,DC=org"
adding new entry "cn=ldapROusers,ou=Admin,DC=oops,DC=org"
adding new entry "cn=ldapmanagers,ou=Admin,DC=oops,DC=org"
adding new entry "cn=ldapusers,ou=Group,DC=oops,DC=org"
adding new entry "uid=ssoadmin,ou=Admin,DC=oops,DC=org"
adding new entry "uid=ssomanager,ou=Admin,DC=oops,DC=org"
adding new entry "uid=replica,ou=Admin,DC=oops,DC=org"
Done
9. LDAP 기본 설정
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={-1}frontend,cn=config"
Done
[root@an3 ~]$
2.3 LDAP client 설정
초기화를 한 LDAP database 를 관리하기 위한 client 설정은 /etc/openldap/ldap.conf 와 /etc/openldap/ldap-auth-utils.conf 에서 합니다.
먼저 /etc/openldap/ldap.conf에 ldap_auth_init에서 설정한 BASE DN과 LDAP 서버 URI를 설정 합니다.
[root@an3 ~]$ cat <<EOF >> /etc/openldap/ldap.conf
URI ldapi:///
BASE DC=oops,DC=org
EOF
[root@an3 ~]$
다음, /etc/openldap/ldap-auth-utils.conf를 설정 합니다. ldap-auth-utils.conf 에서는 ldap_auth_init로 초기화를 한 경우에는 별로 건드릴 것이 없습니다만, 몇몇 튜닝이 가능한 옵션에 대해서만 여기서 설명을 합니다. 자세한 사항은 "man ldap-auth-utils.conf" 명령으로 man page를 참조 하십시오.
ldap-auth-utils.conf는 ldap account를 관리하기 위한 기본 값을 지정 합니다.
ldap-auth-utils 패키지에서 관리할 최소 UID/GID, 기본 Group ID, 기본 shell, home directory prefix, 암호 알고리즘, 암호 만기, 암호 복잡도 등의 설정을 가지고 있습니다.
일단, ldap_auth_init를 이용하여 초기화를 한 경우, 일단 고려를 한 것은 암호 알고리즘에 대해서 고민을 해야 합니다. ldap-auth-utils.conf에서 암호 알고리즘은 다음의 옵션값으로 지정 합니다.
ldap-auth-utils의 기본 암호화 알고리즘은 sha512를 사용합니다. 그리고 RHEL/CentOS 6 이나 AnNyung 2 부터는는 PAM에서 기본으로 sha512를 지원합니다. 만약 인증 통합을 할 서버들 중에 sha512 암호화를 지원하지 않는 배포본들이 있다면 PASSWD_MECH의 값을 md5로 변경을 하십시오.
또한, ISMS 심사에 대비하여, 암호 만기 설정이 90일로 되어 있으니, 이 기간이 너무 짧다고 생각이 되면 PASS_MAX_DAYS 값을 늘려 주십시오.
암호 복잡도 설정은 PASS_MINLEN 와 PASS_CLASSES 에서 할 수 있습니다.
주의!
이 설정은 ldap account를 위한 설정입니다. 즉, ldap_adduser 명령을 이용할 경우 적용이 되는 것들로, system의 adduser와는 별개 입니다.
[root@an3 ~]$ cat /etc/openldap/ldap-auth-utils.conf
.. 상략..
#
# Password configuration
#
# Specify the encryption method.
# support: md5, sha256, sha512
# default: sha512
#
# If there is a host that does not support sha512, please specify the md5
# for compatibility.
PASSWD_MECH = sha512
#
# Pasword expire configuration
#
# If the value is not specified, the value that is set to
# /etc/login.defs will be used.
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS = 90
PASS_MIN_DAYS = 0
PASS_WARN_AGE = 7
#
# Strength of password
#
# minimum length of password
PASS_MINLEN = 9
# Password complexity configuration [ 0 - 4 ]
#
# vSetting of the complexity of the password. Number of the character classes.
# Character class is upper case and lower case letters, numbers and special
# characters.
PASS_CLASSES = 3
[root@an3 ~]#
2.4 초기화 확인
ldap_auth_init을 이용하여 초기화를 한 후에, 다음과 같이 ldap 관리 account와 gruop, 그리고 ldap account의 default group이 잘 등록이 되었는지 확인을 합니다.
ldap_auth_init으로 LDAP database를 초기화를 하면, 기본적으로 ssoadmin, ssomanager, replica account가 암호 없이 생성이 됩니다. 특히 ssoadmin의 경우에는 BASE DN의 데이터를 변경할 수 있는 권한을 가지고 있고, ssomanager 와 replica account는 인증 통합시에 사용하는 권한이기 때문에 데이터베이스 전반에 대한 read 권한을 가지고 있습니다.
그러므로, ldap_auth_init으로 데이터베이스를 초기화 했을 경우, 꼭 이 3 계정의 암호를 지정해 주어야 합니다.
암호 변경은 ldap_passwd 명령을 이용합니다. openldap의 ldappasswd와 비슷하니 주의 하십시오. ldap_passwd는 root 권한으로 실행을 해야 하며, 보안 상 localhost의 ldap database만 관리할 수 있습니다.
ldap_passwd를 사용할 경우, account는 "ACCOUNT@DOMAIN"의 형식을 사용합니다. 즉, BASE DN이 DC=oops,DC=org 라면, DOMAIN은 oops.org가 됩니다.
ssoadmin, ssomanager, replica account의 OU는 People이 아니라 Admin 이기 때문에 -u 옵션으로 OU를 변경해 줘야 합니다. -u 옵션을 주지 않으면 기본으로 People OU를 사용하게 됩니다.