ACL, SUDO, RBAC - WindyHana's Solanara

목차

ACL(Access Control List)

UFS에서의 ACL

※ 아래의 예제에서 windy 는 staff 그룹의 사용자이다. file1, file2에 대해서 접근 권한을 주고 안주고를 확인할 것이다.
root@wl ~/test # vi file1
FILE1
root@wl ~/test # ls -l 1)
-rw-r--r--   1 root     other          6  3월 19일  16:17 file1
root@wl ~/test # getfacl file1 2)
# file: file1
# owner: root
# group: other
user::rw-
group::r--              #effective:r--
mask:r--
other:r--
root@wl ~/test # chmod 440 file1 3)
root@wl ~/test # ls -l
-r--r-----   1 root     other          6  3월 19일  16:17 file1
root@wl ~/test # setfacl -m u:windy:r-- file1 4)
root@wl ~/test # ls -l 5)
-r--r-----+  1 root     other          6  3월 19일  16:17 file1
root@wl ~/test # getfacl file1 6)
# file: file1
# owner: root
# group: other
user::r--
user:windy:r--          #effective:r--
group::r--              #effective:r--
mask:r--
other:---
root@wl ~/test # setfacl -d u:windy:r-- file1 7)
root@wl ~/test # vi file2
FILE2
root@wl ~/test # getfacl file1 | setfacl -f - file2 8)
1) file1을 생성하고 권한을 확인한다. root:other/644 권한이다. 이 상태에서 windy사용자는 이 파일을 읽을 수 있다.
2) getfacl 명령을 이용해 파일 권한을 확인해본다. acl을 이용해 설정하지 않은 상태이다.
3) file1을 440권한으로 변경한후 확인한다. 이 상태에서는 windy사용자는 이 파일을 읽을 수 없다.
4) file1의 acl을 [u:windy:r--]으로 수정(-m)한다. [u:windy:r--]의 의미는 windy라는 유저(u)에게 [r--]권한(읽기권한)을 준다는 뜻이다. 읽기/쓰기/실행권한을 주고 싶다면 [rwx]을 사용하면 된다. 사용자(u)외에 그룹(g)을 지정할 수도 있다. [u:windy:r--]부분을 ACL Entry이라 하는데 자세한 사항은 MAN페이지를 참고한다. 이 상태에서 windy사용자는 이 파일을 읽을 수 있다.
5) 권한필드에 + 가 붙은것을 알 수 있다. ACL이 있다는 뜻이다.
6) 변경된 부분을 확인할 수 있다.
7) 아까준 권한을 삭제한다. 이 상태에서는 windy사용자는 이 파일을 읽을 수 없다.
8) file1의 접근 정보(permissions과 acl정보)을 file2으로 복사하는 일종의 팁이다

ZFS에서의 ACL

ZFS에서 getfacl 명령을 주면 아래와 유사한 메시지를 볼 수 있다.
root@wl ~/test # getfacl file1
File system doesn't support aclent_t style ACL's.
See acl(5) for more information on Solaris ACL support.
root@wl ~/test #
ZFS가 도입되면서 ACL이 변경되었다. 솔라리스의 ACL은 POSIX 기반이지만, ZFS에서의 ACL은 오히려 NFSv4의 ACL과 유사하다. NT와도 비슷한 방법이다. ZFS의 ACL은 chmod 명령을 이용해 설정한다. 자세한 내용은 Solaris ZFS Administration Guide - Chapter 8 Using ACLs to Protect ZFS Files을 참조한다.
root@wl ~ # cat file1
TEST
root@wl ~ # ls -v file1
-rw-r--r--   1 root     root           5  5월 18일  18:21 file1
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

										windy@wl ~ $ cat file1
										TEST

root@wl ~ # chmod 600 file1
root@wl ~ # ls -v file1
-rw-------   1 root     root           5  5월 18일  18:21 file1
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:read_data/write_data/append_data/execute:deny
     3:group@::allow
     4:everyone@:read_data/write_data/append_data/write_xattr/execute
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:read_xattr/read_attributes/read_acl/synchronize:allow

										windy@wl ~ $ cat file1
										cat: file1을(를) 열 수 없습니다

root@wl ~ # chmod A+user:windy:read_data/write_data/execute:allow file1
root@wl ~ # ls -v file1
-rw-------+  1 root     root           5  5월 18일  18:21 file1
     0:user:windy:read_data/write_data/execute:allow
     1:owner@:execute:deny
     2:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     3:group@:read_data/write_data/append_data/execute:deny
     4:group@::allow
     5:everyone@:read_data/write_data/append_data/write_xattr/execute
         /write_attributes/write_acl/write_owner:deny
     6:everyone@:read_xattr/read_attributes/read_acl/synchronize:allow

										windy@wl ~ $ cat file1
										TEST

root@wl ~ # chmod A0- file1
root@wl ~ # ls -v file1
-rw-------   1 root     root           5  5월 18일  18:21 file1
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:read_data/write_data/append_data/execute:deny
     3:group@::allow
     4:everyone@:read_data/write_data/append_data/write_xattr/execute
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:read_xattr/read_attributes/read_acl/synchronize:allow

										windy@wl ~ $ cat file1
										cat: file1을(를) 열 수 없습니다

RBAC(Role-Based Access Control)

sudo

솔라리스의 RBAC

root@wl ~ # vi /etc/security/exec_attr 1)
Apache Management:suser:cmd:::/usr/local/apache2/bin/apachectl:uid=0
root@wl ~ # vi /etc/security/prof_attr 2)
Apache Management:::Manage the Apache web server:
root@wl ~ # cat /etc/security/auth_attr 3)
root@wl ~ # roleadd -d /export/home/rapache -u 400 -m -P "Apache Management" rapache 4)
root@wl ~ # passwd rapache
새 암호:
새 암호를 다시 입력하십시오:
passwd: 암호(rapache용)가 성공적으로 변경되었습니다.
root@wl ~ # cat /etc/passwd
rapache:x:400:1::/export/home/rapache:/bin/pfsh
root@wl ~ # cat /etc/user_attr
rapache::::type=role;profiles=Apache Management
root@wl ~ # usermod -R rapache admin 5)
root@wl ~ # cat /etc/user_attr
admin::::type=normal;roles=rapache

root@wl ~ # su - rapache 6)
$ id
uid=400(rapache) gid=1(other)
# /usr/local/apache2/bin/apachectl start 7)
# exit

# su - admin 8)
$ id
uid=111(admin) gid=10(staff)
$ su - rapache
Password:
$ id
uid=400(rapache) gid=1(other)
$ /usr/local/apache2/bin/apachectl start

root@wl ~ # su - windy 9)
windy@wl ~ $ su - rapache
Password:
Roles can only be assumed by authorized users
su: 잘못되었습니다
windy@wl ~ $
1) exec_attr 파일을 수정한다. "Apache Management"라는 프로파일에 대한 실행커맨드/권한에 대한 내용이다.
2) prof_attr 파일을 수정한다. "Apache Management"라는 프로파일에 대한 설명이다. 이로써 프로파일 생성이 완료되었다.
3) auth_attr은 이번 작업에서 수정해야 할 필요 없다. 특별한 권한이 필요하지 않기 때문이다.
4) [롤계정]인 rapache를 추가한다. /etc/passwd, /etc/shadow, /etc/user_attr 파일이 수정된다. (직접 수정해도 된다) useradd대신 roleadd를 사용했고, -P옵션을 통해 위에서 생성한 프로파일을 지정한다. 셸이 /bin/pfsh 으로 되어있는데 이는 profile sh이라는 뜻이다. (불행이도 pfbash는 없는 듯 하다) 패스워드도 변경한다.
5) 롤계정 rapache 를 일반계정 admin 이사용할 수 있도록 지정해준다. /etc/user_attr 파일이 수정된다. (직접 수정해도 된다) 여기까지 설정이 모두 끝났다.
6) rapache 롤 계정으로 전환한다.
7) 아파치가 정상적으로 시작된다.
8) admin계정으로 전환한후 다시 rapache계정으로 전환해 아파치를 시작할 수 있다.
9) windy계정은 (rapache의 패스워드를 알아도) rapache계정으로 전환되지 않는다는 것을 알 수 있다.

롤 계정을 일반 계정으로

RSS ATOM XHTML 1.0 CSS3