OpenLDAP sudo 권한 설정 가이드

1. OpenLDAP sudo 권한의 주요 속성

명령: 사용자가 실행할 수 있는 명령어 (예: useradd, userdel, mount, umount 등).
호스트: sudo 명령을 실행할 수 있는 호스트.
시작시간: sudo 규칙이 적용되기 시작하는 시간.
종료시간: sudo 규칙이 적용되지 않는 시간.
옵션: 현재 사용자의 권한을 초과하거나 다른 사용자로 전환 시 필요한 비밀번호 입력 여부를 정의.
순서: sudo 규칙의 실행 순서를 정의하며 정수 값으로 표현.
역할: 정의된 sudo 규칙.
실행사용자: 특정 사용자로 전환하여 명령을 실행할 수 있도록 함.
실행그룹: 특정 그룹으로 전환하여 해당 그룹의 권한을 갖도록 함.
대상사용자: 명령을 실행할 수 있는 대상 사용자를 정의.
사용자: sudo 관련 규칙을 가진 사용자 또는 그룹 내 멤버를 제한.

2. OpenLDAP 서버에서 사용자 권한 관리

1. sudo 스키마 임포트

[root@ldap01 ~]# rpm -ql sudo | grep schema.OpenLDAP
/usr/share/doc/sudo-1.8.23/schema.OpenLDAP
[root@ldap01 ~]# cp /usr/share/doc/sudo-1.8.23/schema.OpenLDAP /etc/openldap/schema/sudo.schema
[root@ldap01 ~]# cd /etc/openldap/schema/
[root@ldap01 schema]# restorecon sudo.schema 
[root@ldap01 schema]# mkdir ~/sudo_conf
[root@ldap01 schema]# echo 'include /etc/openldap/schema/sudo.schema' > ~/sudo_conf/sudoSchema.conf 
[root@ldap01 schema]# slapcat -f ~/sudo_conf/sudoSchema.conf -F /tmp/ -n0 -s "cn={0}sudo,cn=schema,cn=config" > ~/sudo_conf/sudo.ldif
[root@ldap01 schema]# sed -i "s/{0}sudo/{14}sudo/g" ~/sudo_conf/sudo.ldif
[root@ldap01 schema]# head -n -8 ~/sudo_conf/sudo.ldif > ~/sudo_conf/sudo-config.ldif  
[root@ldap01 schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f ~/sudo_conf/sudo-config.ldif
[root@ldap01 schema]# ls /etc/openldap/slapd.d/cn\=config
[root@ldap01 schema]# ldapsearch -LLLY EXTERNAL -H ldapi:/// -b "cn={14}sudo,cn=schema,cn=config" | grep NAME | awk '{print $4,$5}' | sort

2. sudo 규칙 및 그룹 정의

[root@ldap01 ~]# vim ~/sudo_conf/sudo_perm.ldif
dn: ou=sudoers,dc=ldap01,dc=pwb,dc=com
objectClass: organizationalUnit
ou: sudoers

dn: cn=default,ou=sudoers,dc=ldap01,dc=pwb,dc=com
objectClass: sudoRole
cn: default
description: 기본 sudoOption 설정
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

dn: cn=%dba,ou=sudoers,dc=ldap01,dc=pwb,dc=com
objectClass: sudoRole
cn: %dba
sudoUser: %dba
sudoHost: ALL
sudoRunAsUser: oracle
sudoRunAsUser: grid
sudoOption: !authenticate
sudoCommand: /bin/bash

dn: cn=%app,ou=sudoers,dc=ldap01,dc=pwb,dc=com
objectClass: sudoRole
cn: %app
sudoUser: %app
sudoHost: ALL
sudoRunAsUser: appman
sudoOption: !authenticate
sudoCommand: /bin/bash

dn: cn=%admin,ou=sudoers,dc=ldap01,dc=pwb,dc=com
objectClass: sudoRole
cn: %admin
sudoUser: %admin
sudoHost: ALL
sudoOption: authenticate
sudoCommand: /bin/rm
sudoCommand: /bin/rmdir
sudoCommand: /bin/chmod
sudoCommand: /bin/chown
sudoCommand: /bin/dd
sudoCommand: /bin/mv
sudoCommand: /bin/cp
sudoCommand: /sbin/fsck*
sudoCommand: /sbin/*remove
sudoCommand: /usr/bin/chattr
sudoCommand: /sbin/mkfs*
sudoCommand: !/usr/bin/passwd
sudoOrder: 0

[root@ldap01 ~]# ldapadd -x -D cn=admin,dc=ldap01,dc=pwb,dc=com -W -f ~/sudo_conf/sudo_perm.ldif

3. 사용자를 sudo 그룹에 추가하고 권한 상속

[root@ldap01 ~]# vim ~/sudo_conf/add_sudo_user.ldif
dn: cn=app,ou=Groups,dc=ldap01,dc=pwb,dc=com
objectClass: posixGroup
cn: app
gidNumber: 10005

dn: cn=manager,ou=Groups,dc=ldap01,dc=pwb,dc=com
objectClass: posixGroup
cn: manager
gidNumber: 10006

dn: uid=jboss,ou=Users,dc=ldap01,dc=pwb,dc=com
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: jboss
uid: jboss
uidNumber: 20006
gidNumber: 10005
userPassword: jboss
homeDirectory: /home/jboss
loginShell: /bin/bash

dn: uid=manager01,ou=Users,dc=ldap01,dc=pwb,dc=com
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: manager01
uid: manager01
uidNumber: 20007
gidNumber: 10006
userPassword: manager01
homeDirectory: /home/manager01
loginShell: /bin/bash
[root@ldap01 ~]# ldapadd -x -D cn=admin,dc=ldap01,dc=pwb,dc=com -W -f ~/sudo_conf/add_sudo_user.ldif 

3. 클라이언트에서 OpenLDAP sudo 설정 구성

1. 의존 패키지 설치

[root@client01 ~]# yum install openldap-clients nss-pam-ldapd openssh-ldap fprintd-pam -y 
[root@client01 ~]# rpm -qi sudo | grep -i version
Version     : 1.8.23

2. 클라이언트를 OpenLDAP 서버에 연결

[root@client01 log]# echo '192.168.1.131 ldap01.pwb.com ldap01' >> /etc/hosts
[root@client01 ~]# authconfig --savebackup=openldap.bak
[root@client01 ~]# authconfig --enableldap --enableldapauth --enablemkhomedir --disableldaptls --enablelocauthorize --ldapserver=ldap01.pwb.com --ldapbasedn="dc=ldap01,dc=pwb,dc=com" --enableshadow --update

3. nsswitch.conf 파일 수정 및 sudo 검색 순서 추가

[root@client01 ~]# cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
[root@client01 ~]# cat >> /etc/nsswitch.conf << EOF
> sudoers:    ldap files
> EOF

4. sudo-ldap.conf 파일 수정 및 OpenLDAP 인증 지원 추가

[root@client01 ~]# cat >> /etc/sudo-ldap.conf << EOF  
> SUDOERS_BASE ou=sudoers,dc=ldap01,dc=pwb,dc=com
> uri ldap://ldap01.pwb.com
> EOF

5. OpenLDAP 계정을 통해 sudo 명령 실행 테스트

[root@client01 log]# ssh manager01@192.168.1.132
manager01@192.168.1.132's password: 
Creating directory '/home/manager01'.
[manager01@client01 ~]$ sudo -l
...
[manager01@client01 ~]$ sudo cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

태그: openldap sudo

7월 8일 18:19에 게시됨