ACL, SUDO, RBAC - 윈디하나의 솔라나라
|
owner/group/other
으로 분류하고, 사용자가 가질 수 있는 권한을 read/write/execute
으로 구분해, 각각의 파일 및 디렉토리의 접근 권한을 지정했다. 이는 chmod(1), chown(1), chgrp(1) 명령등을 사용해 지정했다.○○에게 □□행위를 허가했다는 내용을 가진 신임장(Credential)을 발급하게 된다. 신임장은 보통 시스템의 메모리에 저장되고, 신임장을 재사용해야 할 경우 암호화해서 사용자에게 전달하곤 한다.
UFS에서의 ACL은 POSIX 사양에 기반한 ACL모델을 지원한다. 아래의 예제에서 windy
는 staff
그룹의 사용자이다. file1
, file2
에 대해서 접근 권한을 부여 여부를 확인할 것이다.
더 자세한 내용은 getfacl(1), setfacl(1), ls(1) 을 참고하자.
root@wl ~/test # vi file1 1) 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
사용자는 이 파일을 읽을 수 있다.file1
을 440
권한으로 변경한 후 ACL을 확인한다. 이 상태에서는 windy
사용자는 이 파일을 읽을 수 없다.file1
의 ACL을 u:windy:r--
으로 수정(-m)한다. u:windy:r--
의 의미는 windy
유저(u)에게 r--
권한(읽기권한)을 준다는 뜻이다. 읽기/쓰기/실행권한을 주고 싶다면 rwx
을 사용하면 된다. 사용자(u)외에 그룹(g)을 지정할 수도 있다. u:windy:r--
부분을 ACL Entry이라 하는데 자세한 사항은 MAN페이지를 참고한다. 이 상태에서 windy
사용자는 이 파일을 읽을 수 있다.+
가 붙은것을 알 수 있다. 이 파일에는 ACL이 있다는 뜻이다.windy
사용자는 이 파일을 읽을 수 없다.file1
의 접근 정보(권한과 ACL정보)을 file2
으로 복사한다.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이 변경되었다. ZFS에서의 ACL은 NFSv4의 ACL과 유사하다. NT와도 비슷한 방법이다. ZFS의 ACL은 chmod(1) 명령을 이용해 설정한다. 자세한 내용은 Oracle® Solaris 11.3의 ZFS 파일 시스템 관리 - 9장 ACL 및 속성을 사용하여 Oracle Solaris ZFS 파일 보호을 참조한다.
-v
파라메터를 사용해 ZFS에서 ACL 설정 상태를 볼 수 있다.
root@wl ~/test # ls -v file1 -rw-r--r-- 1 root root 6 8월 14일 10:46 file1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow출력 형식은 아래와 같다.
색인:ACL항목유형:액세스권한[:상속플래그]:권한제어
owner@
, group@
, everyone@
및 user:USERNAME
, group:GROUPNAME
형식을 따른다./으로 구분된 권한 항목을 의미한다.
add_*
, append_*
, delete*
, execute
, list_directory
, read_*
, synchronize
, write_*
가 있다. 자세한 내용은 매뉴얼을 참조하자.deny
, allow
중 하나를 지정한다.root@wl ~ # vi file1 1) TEST root@wl ~/test # ls -v file1 2) -rw-r--r-- 1 root root 6 8월 14일 10:46 file1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow windy@wl ~ $ cat file1 1) TEST root@wl ~ # chmod 600 file1 3) root@wl ~ # ls -v file1 3) -rw------- 1 root root 6 8월 14일 10:46 file1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_xattr/read_attributes/read_acl/synchronize:allow windy@wl ~ $ cat file1 3) cat: file1을(를) 열 수 없습니다 root@wl ~ # chmod A+user:windy:read_data/write_data/execute:allow file1 4) root@wl ~ # ls -v file1 4) -rw-------+ 1 root root 6 8월 14일 10:46 file1 0:user:windy:read_data/write_data/execute:allow 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_xattr/read_attributes/read_acl/synchronize:allow windy@wl ~ $ cat file1 4) TEST root@wl ~ # chmod A0- file1 5) root@wl ~ # ls -v file1 5) -rw------- 1 root root 6 8월 14일 10:46 file1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_xattr/read_attributes/read_acl/synchronize:allow windy@wl ~ $ cat file1 5) cat: file1을(를) 열 수 없습니다1)
file1
을 생성하고 권한을 확인한다. root:root/644
가지고 있다. 이 상태에서 windy
사용자는 이 파일을 읽을 수 있다. 특별히 ACL을 주지 않은 경우 이와같이 owner@
, group@
, everyone@
만 생성된다.-v
옵션을 붙여 ACL을 확인해본다. 출력된 내용은 -rw-r--r--
에 해당된다.-rw-------
으로 변경되고 group
과 everyone
에 read_data
이 빠져있는 것을 확인할 수 있으며, windy 사용자가 파일을 읽을 수 없다.windy
사용자에게 데이터를 읽고 쓸 권한을 준다. -rw-------+
으로 변경되고 0:user:windy:read_data/write_data/execute:allow
권한이 추가된것을 확인할 수 있다. windy 사용자가 파일을 읽을 수 있다.Attribute Operation항목을 참고하자.
root@wl ~/test # touch file1 1) root@wl ~/test # ll -rw-r--r-- 1 root root 0 8월 14일 11:33 file1 root@wl ~/test # chmod S+ci file1 2) root@wl ~/test # ll 3) -rw-r--r-- 1 root root 0 8월 14일 11:33 file1 root@wl ~/test # echo add >> file1 3) -bash: file1: Not owner root@wl ~/test # rm file1 3) rm: file1: override protection 644 (y/n)? y rm: file1 not removed: Not owner root@wl ~/test # ls -l/c file1 4) -rw-r--r-- 1 root root 0 8월 14일 11:33 file1 {A-----im-----} root@wl ~/test # ls -v file1 5) -rw-r--r-- 1 root root 4 8월 14일 11:37 file1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow root@wl ~/test # ls -V file1 5) -rw-r--r-- 1 root root 4 8월 14일 11:37 file1 owner@:rw-p--aARWcCos:-------:allow group@:r-----a-R-c--s:-------:allow everyone@:r-----a-R-c--s:-------:allow1) file1 을 생성한다.
immutable 가 추가되어있다.
아래와 같이 속성을 삭제해 파일을 수정할 수 있다.
root@wl ~/test # chmod S-ci file1 1)
root@wl ~/test # ls -l/c file1
-rw-r--r-- 1 root root 0 8월 14일 11:33 file1
{A------m-----}
root@wl ~/test # echo add >> file1
1) 기존에 준 ZFS 속성을 삭제한다. 권한 종류에 상관없이 모든 ZFS 속성을 삭제하려면 chmod S-a FILENAME
구문을 사용한다.su 'do'라는 의미를 지닌다. su는
superuser라는 의미로, sudo 의 의미는 슈퍼유저가 하는 일을 (일반 사용자가) 한다는 뜻이다. 리눅스를 포함한 많은 운영체제에서 표준적인 RBAC를 제공해준다.
Sudo before 1.9.5p2 has a Heap-based Buffer Overflow, allowing privilege escalation to root via "sudoedit -s" and a command-line argument that ends with a single backslash character.2021.01. 에 1.9.5p2, 1.8.32 이전 버전의 sudo 에서 상당히 심각한 수준의 보안 버그가 발견되었다. 신속히 업그레이드 해야 한다. 솔라리스에 번들된 sudo 도 영향 받는다. 반드시 최신버전으로 패치하자. 버그는 아래와 같이 감지할 수 있다고 한다. 출처는 Detecting the Sudo Baron Samedit Vulnerability and Attack이다. Segmentation Fault 가 나면 버그가 있는 것이다.
windy@wl ~ $ sudoedit -s '\' `perl -e 'print "A" x 65536'` Segmentation Fault패치 된경우 아래와 같이 나온다.
windy@wl ~ $ sudoedit -s '\' `perl -e 'print "A" x 65536'` usage: sudoedit [-AknS] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] file ...
sudo(8)은 솔라리스 11부터 기본 제공되기 떄문에 최신 기능이 필요하지 않다면 소스를 이용해 빌드할 필요 없다. sudo(8)에 버그가 있는 경우 시스템 보안에 치명적일 수 있다. (파일 소유자가 root
이며, setuid(2)가 설정되어있는 프로그램이다) 따라서 패치가 나왔으면 즉시 적용해주는 것이 좋다.
windy@wl ~/src # wget https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz windy@wl ~/src # tar xvfz sudo-1.9.5p2.tar.gz windy@wl ~/src # cd sudo-1.9.5p2 windy@wl ~/src/sudo-1.9.5p2 # ./configure CFLAGS="-m64" LDFLAGS="-m64" --enable-zlib --with-ldap --with-pam --with-nsswitch --with-solaris-audit --with-project --with-man windy@wl ~/src/sudo-1.9.5p2 # make windy@wl ~/src/sudo-1.9.5p2 # sudo make install windy@wl ~/src/sudo-1.9.5p2 # /usr/local/bin/sudo -V sudo 버전 1.9.5p2 Sudoers 정책 플러그인 버전 1.9.5p2 Sudoers 파일 문법 버전 48 Sudoers I/O plugin version 1.9.5p2 Sudoers audit plugin version 1.9.5p2
/etc/sudoers
파일에 있다. sudoers(4) 파일의 기본적인 문법은 아래와 같다.
사용자명 호스트명=[(사용자)]명령어[, 명령어 ...]
호스트명과
사용자,
명령어에
ALL
을 써 주면 모든 호스트/모든 사용자/모든 실행파일이라는 뜻이다. 즉 admin ALL=(ALL)/usr/local/apache2/bin/apachectl
은 admin
사용자는 (현재 호스트를 포함한) 모든 호스트에서 /usr/local/apache2/bin/apachectl
을 모든 사용자(루트 사용자 포함)으로 실행시킬 수 있다는 의미이다. 호스트명을 써주는 필드가 있다는건 하나의 설정 파일을 그대로 복사해 여러 호스트에 적용하기 위함이다. 한개의 파일에 모든 설정을 하는 것은 sudo 의 장점이자 단점일 것이다. 또한 솔라리스뿐만 아니라, 리눅스, BSD용도 있으니, 여러 OS를 사용해야 하는 서버 관리자에겐 sudo 만한 툴이 없다./var/adm/messages
에 쌓인다. 성공한 로그는 notice
로 전송되는데 솔라리스에서는 기본적으로 이는 저장하지 않는다. 이 내용은 sudoers 에서 수정할 수 있다.windy
사용자에게 root
로 /usr/bin/id
을 실행시킬 권한을 줄 것이다.
root@wl ~ # vi /etc/sudoers 1) root ALL=(ALL) ALL windy ALL=/usr/bin/id root@wl ~ # su - windy 2) Oracle Corporation SunOS 5.10 Generic Patch January 2005 windy@wl ~ $ sudo -l 3) We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. 암호: 패스워드 User windy may run the following commands on this host: (root) /usr/bin/id windy@wl ~ $ sudo /usr/bin/id 4) uid=0(root) gid=0(root)1)
sudoers
파일을 수정한다.windy
계정으로 로그인 한다.windy
계정이 가지고 있는 sudo의 권한을 볼 수 있다. 패스워드는
windy
계정의 패스워드를 입력한다.windy
계정에서 sudo(1m) 를 사용해 id(1)를 실행해본다. root
권한으로 실행되었음을 알 수 있다.아래에 몇가지 sudoers
예제가 있다.
User_Alias SUDO_SYSADM = windy User_Alias SUDO_PART = alba1, alba2 Runas_Alias SUDO_RDBA = oracle, dba Host_Alias SUDO_WAS = was1, was2 :\ SUDO_WEB = web1, web2 :\ SUDO_DB = oracle, mysql Host_Alias SUDO_CN = 192.168.0.0/24 Cmnd_Alias SUDO_DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\ /usr/sbin/restore, /usr/sbin/rrestore %staff ALL = (ALL) ALL SUDO_PART ALL = NOPASSWD: ALL windy ALL = /usr/bin/passwd [A-Za-z0-9]*, !/usr/bin/passwd root john SUDO_CN = /usr/bin/su admin alice SUDO_WAS = SUDO_DUMPS
windy@wl ~ $ sudo vi /etc/pam.conf su auth sufficient pam_tty_tickets.so.1 sudo-compat timeout=10이 설정을 사용해 만들어진 티켓은
/system/volatile/tty_tickets/PAM_AUSER/PAM_USER/PAM_TTY
나, /system/volatile/sudo/PAM_AUSER/PAM_TTY
에 생성된다. 자세한 사항은 pam_tty_tickets(7)을 읽어보자. Authenticated Rights Profiles in Oracle Solaris 11.4도 읽어보자.
admin
사용자에게 root
로 /usr/local/apache2/bin/apachectl
을 실행시킬 권한을 줄 것이다. 위의 sudo(1)와 비교하면서 읽어보자.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"라는 프로파일에 대한 실행커맨드/권한에 대한 내용이다.
# rolemod -K type=normal root솔라나라에서는 기본값을 그대로 사용하는 것을 원칙으로 삼기 때문에, 일반 계정으로 전환하는 것을 권장하지 않지만, root 계정의 타입이 롤이던 일반이던 솔라리스 관리에 보안적으로 큰 차이는 없다고 본다.
RSS ATOM XHTML 5 CSS3 |
Copyright © 2004-2024 Jo HoSeok. All rights reserved. |