목차 1. 기본 설정 2. sudo entry 추가 3. LDAP client 설정 및 확인
이번 장은 SUDO를 LDAP을 이용하여 연동하는 방법을 기술 합니다.
ldap_auth_init를 이용하여 LDAP을 초기화 하였다면, 이미 Openldap에서 sudo를 연동하기 위한 준비는 마친 상태 입니다. 혹시 이 과정에 관심이 있다면 ldap-auth-utils package의 ldap_auth_init script를 분석해 보든지 또는 문서를 참고 하십시오.
1. 기본 설정
sudo를 연동하기 위한 준비는 마친 상태라고 위에서 기술 하였지만, 현재 ldap database에는 sudo에 대한 아무런 data가 존재하지 않는 상태 입니다. 그러므로 여기서는 기본 data를 입력하는 과정을 기술 합니다.
위의 예제를 참고하면 짐작할 수 있듯이, /etc/sudoers 파일을 직접 sudoers2ldif 필터로 LDIF로 변환할 수도 있습니다. 여기서 주의해야 하는 것이, Defaults의 값에서 env_keep이나 secure_path의 값 처럼 "=" 또는 "+=" 앞뒤로 공백이 있을 경우 "sudo: unknown defaults entry 'env_keep '"와 같은 에러가 발생하니 주의해야 합니다.
변환한 LDIF 파일을 이용하여 ldap database에 입력을 합니다.
[root@ldap1 ~]$ ldapadd -Y EXTERNAL -H ldapi:/// < sudo-ldap.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "ou=sudo,dc=oops,dc=org"
adding new entry "cn=defaults,ou=sudo,dc=oops,dc=org"
adding new entry "cn=root,ou=sudo,dc=oops,dc=org"
adding new entry "cn=%wheel,ou=sudo,dc=oops,dc=org"
[root@ldap1 ~]$
잘 입력이 되었는지 확인을 해 봅니다.
[root@ldap1 ~]$ ldapsearch -Y EXTERNAL -H ldapi:/// -b ou=sudo,dc=oops,dc=org
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <ou=sudo,dc=oops,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# sudo, oops.org
dn: ou=sudo,dc=oops,dc=org
objectClass: top
objectClass: organizationalUnit
description: sudo
ou: sudo
# defaults, sudo, oops.org
dn: cn=defaults,ou=sudo,dc=oops,dc=org
objectClass: top
objectClass: sudoRole
cn: defaults
description: Default sudoOption''s go here
sudoOption: requiretty
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: env_reset
sudoOption: env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
sudoOption: env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
sudoOption: env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
sudoOption: env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
sudoOption: env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
sudoOption: secure_path=/sbin:/bin:/usr/sbin:/usr/bin
sudoOrder: 1
# root, sudo, oops.org
dn: cn=root,ou=sudo,dc=oops,dc=org
objectClass: top
objectClass: sudoRole
cn: root
sudoUser: root
sudoHost: ALL
sudoRunAsUser: ALL
sudoCommand: ALL
sudoOrder: 2
# %wheel, sudo, oops.org
dn: cn=%wheel,ou=sudo,dc=oops,dc=org
objectClass: top
objectClass: sudoRole
cn: %wheel
sudoUser: %wheel
sudoHost: ALL
sudoRunAsUser: ALL
sudoCommand: ALL
sudoOption: !authenticate
sudoOrder: 3
# search result
search: 2
result: 0 Success
# numResponses: 5
# numEntries: 4
[root@ldap1 ~]$
2. sudo entry 추가 및 삭제
추가 삭제는 GUI tool을 사용하는 것이 좀 더 편할 수 있습니다. entry 추가시에 sudoRole objectClass를 이용하여 추가를 하면 됩니다.
다음은 CLI(command line interface)에서의 방법 입니다.
sudo entry에서 사용하는 attribute는 다음과 같습니다.
sudoUser: root
sudoHost: ALL
sudoRunAsUser: ALL
sudoCommand: ALL
sudoOption: authenticate
sudoOrder: 3
여기서는 sudotest 라는 account가 an3.oops.org 에서 sudo를 이용하여 an3.oops.org에서 인증없이 ls 명령을 실행하는 권한을 예제로 합니다.
먼저, ldap_useradd 명령을 이용하여, sudotest ldap account를 생성합니다.