저자: Dru Lavigne / 한동훈 역
원문: http://www.onlamp.com/pub/a/bsd/2005/09/22/FreeBSD_Basics.html
•
FreeBSD에서 ACL 사용하기(1)
GUI 유틸리티 설치
구글에서 “FreeBSD acl”을 입력하면 관련 하우투 문서를 찾아볼 수 있다. 이 들 각각은 ACL 명령줄 유틸리티, getfacl, setfacl등을 사용하는 예제를 제공한다. 이들 기사 중에 참고할만한 것은 Greg Czaplinsk의 “
FreeBSD 5.x에서 ACL 사용하기”가 있다.
getfacl은 직관적인 반면에, setfacl 구문은 이해하기 어려워서 대다수의 사용자가 질려버릴 것이다. 때문에 누가 무슨 권한을 사용할지 쉽게 제어하고 결정할 수 있게 해주는 GUI를 사용하는 것이다.
eiciel은 FreeBSD 패키지나 포트로 이용할 수 있는 직관적인 GUI를 제공한다. eiciel은 리눅스 시스템에서도 동작하며,
노틸러스 파일 관리자에서도 사용된다.
바이너리 패키지를 추가하기 위해 다음 명령을 사용한다.
# pkg_add -r eiciel
패키지를 설치한 후에, 슈퍼유저 계정을 종료하고 일반 사용자로 X 세션을 시작한다.
GUI 사용하기
새로 설치된 ACL GUI를 사용하기 위한 두 가지 방법이 있다. 하나는 노틸러스를 시작하는 것이다.(그림1). 사용자 dru는 홈 디렉터리에 test, file1, myfile이라는 디렉터리를 갖고 있다. 그림2는 사용자가 test에서 마우스 오른쪽 버튼을 클릭하고 메뉴에서 “Properties”를 선택했을 때를 나타나는 화면이다.
[그림1] 노틸러스에서 파일 보기
[그림2] 노틸러스에서 파일 속성창
eiciel을 설치하면 노틸러스에서 Access Control List 탭이 추가된다. 그림에서 볼 수 있는 것처럼 다음과 같은 권한설정을 GUI로 보여준다.
% ls -l test
-rw-r--r-- 1 dru dru 0 Jul 27 09:09 test
eiciel을 사용하는 다른 방법은 직접 실행하는 것이다.(그림3). Open 버튼을 클릭해서 test 파일을 선택한다.(그림4) 파일을 선택하면 ACL 창이 나타난다(그림5)
[그림3] eiciel을 직접 실행한 화면
[그림4] eiciel에서 파일을 열기
[그림5] eiciel에서 ACL 편집하기
개인적으로는 노틸러스를 사용하는 방법을 선호한다. 이 방법은 Permissions 탭을 제공하며, 다음과 같은 기능을 보거나 변경할 수 있다.
· 파일 소유자
· 파일 그룹, dru 그룹 사용자를 스크롤할 수 있는 탭을 제공한다. chgrp와 유사
· SUID, SGID, 스티키 비트와 같은 특수 플래그를 제어할 수 있는 기능
· ls –l과 비슷한 텍스트 조회 화면
· 숫자 보기 화면, 여기서는 644
ACL 마스크 이해하기
그림2의 아래부분을 보면 시스템에 있는 사용자와 그룹을 볼 수 있다. 사용자 rob을 더블 클릭해서 위쪽 프레임(Access Control List)에 추가할 수 있다.(그림6)
[그림6] 사용자 ACL 추가하기
참고: eiciel의 나중 버전에서는 목록에서 시스템 계정을 제외할 수 있는 체크 박스가 포함될 것이다.
그림을 보면 rob과 mask에게 모든 권한(rwx)를 부여했음을 알 수 있다. 이는 파일의 소유자 dru의 권한(rw) 보다 더 많은 권한을 갖고 있는 것이다. 여기서 무슨 일이 일어난걸까? rob을 더블클릭하는 것으로 ACL에 rob을 추가했다. 이는 홈 디렉터리에서 –l 옵션을 통해 확인할 수 있다.
% ls -l
drwx------ 2 dru dru 512 Jul 26 10:35 Desktop
-rw-r--r-- 1 dru dru 0 Jul 27 9:22 file1
-rw-r--r-- 1 dru dru 0 Jul 27 9:22 myfile
-rw-r--r--+ 1 dru dru 0 Jul 27 10:03 test
test에 대한 권한의 끝에 + 표시가 보이는가? 이 표시는 파일에 ACL이 설정되어 있다는 것을 의기한다. getfacl을 사용해서 ACL을 볼 수 있다.
% getfacl test
#file:test
#owner:1001
#group:1001
user::rw-
user:rob:rwx
group::r--
mask::rwx
other::r--
이 결과는 그림6과 같은 결과를 텍스트로 보여준 것이다.
왜 rob은 rwx를 갖고 있으며, 이 마스크 항목의 의미는 무엇일까? 정의에 따르면 ACL 마스크(mask)는 최대한 허용될 수 있는 권한을 결정한다. 이를 이해하기 위해서는 두 가지를 알 필요가 있다.
첫번째는 rob 항목에서 실행 권한을 제거한다. rob에게 읽기, 쓰기, 실행 권한을 원하는 대로 줄 수 있다. GUI를 사용하는 사용자 관점에서는 사용자를 클릭하고 원하지 않는 권한을 제거하면 된다.
마스크 항목을 변경하면 무슨일이 일어날까? rob에게 다시 rwx를 주고, 마스크에서 실행 권한을 제거해보자. 여러분이 작업을 하자마자 rob의 실행 권한 옆에 빨간 느낌표가 나타난다. GUI에서는 빨간 느낌표가 “비유효 권한(ineffective permission)”을 의미한다는 메시지를 보여준다.
ACL 마스크 정의를 살펴보면 이것이 맞다는 것을 알 수 있다. 이제, 최대 허용 권한은 rw이며, 이는 실행 권한을 가진 사용자가 실제로는 실행할 수 없다는 것을 의미한다. GUI는 시각적으로 보여주지만, getfacl도 유효 권한(effective permission)을 보여준다.
% getfacl test
#file:test
#owner:1001
#group:1001
user::rw-
user:rob:rwx # effective: rw-
group::r--
mask::rw-
other::r--
* 역주: 파일 소유주의 권한이 UID이며 프로그램을 실행했을 때 프로세스가 갖는 UID를 유효 UID(Effective UID)라 한다. 일반적인 경우엔 UID = effective UID이며, setuid가 설정된 경우에 UID != effective UID가 되며, 설정된 setuid로 권한 상승이 발생한다.