저자: Dru Lavigne / 한동훈 역
원문: http://www.onlamp.com/pub/a/bsd/2005/09/22/FreeBSD_Basics.html
•
FreeBSD에서 ACL 사용하기(1)
•
FreeBSD에서 ACL 사용하기(2)
디렉터리 ACL 이해하기
파일은 “access ACL” 하나만 가질 수 있다. 대부분의 사용자는 이전 절에서 설명한 것처럼 생성할 수 있는 파일에 대한 권한을 세세하게 제어할 수 있다.
디렉터리는 세 가지 ACL을 가질 수 있기 때문에 보다 복잡할 수 있다.
• access ACL은 디렉터리 자체에 대한 접근에 적용된다
• 기본 디렉터리 ACL는 디렉터리가 생성된 하위 디렉터리의 기본 권한을 정한다.
• 기본 액세스 ACL은 디렉터리안에 생성된 파일의 기본 권한을 정한다. 기본 디렉터리 ACL이 설정되어 있지 않으면 하위 디렉터리는 현재 디렉터리의 ACL을 상속받는다. 그러나, 기본 디렉터리 ACL이 설정되어 있으면 현재 디렉터리의 ACL 값을 무시한다.
현재 FreeBSD 구현은 ACL을 포함한 디렉터리에서 생성한 파일에 대한 유효 권한을 두번 검사(double-check)하기 때문에 첫번째와 두번째 디렉터리 ACL만 지원한다.
어떻게 동작하는지 알기 위해 folder라는 이름으로 디렉터리를 만들어보자.
참고: 디렉터리에 ACL을 설정할 생각이면, 해당 디렉터리에 파일이나 하위 디렉터리를 추가하기 전에 해야한다. ACL이 생성된 이후에 추가된 객체들만 ACL을 상속받기 때문이다. 이미 파일이나 하위 디렉터리를 갖고 있는 디렉터리에 ACL을 추가한다면 항상 원하는 ACL이 있는지 확인하기 위해 이중 검사를 하게된다.
folder의 ACL 속성을 보자(그림7). Default ACL 버튼을 사용할 수 있게 된 점과 Participants List에 Default 체크 박스를 제외하면 파일 속성창과 비슷하다.
[그림7] folder 디렉터리의 ACL 속성
User, Group, Other 권한이 디렉터리 권한에 적용되기 때문에 첫번째 유형의 ACL(access ACL)이 표시된다.
[그림8] 기본 ACL 속성 추가
Default ACL 버튼을 클릭한다. 그림 8에서 볼 수 있는 것처럼 4가지 기본 항목이 표시된다. 이들은 두번째 유형의 ACL(default directory ACL)을 표시하며, 이는 하위 디렉터리에만 영향을 미친다. 하위 폴더와 파일을 만들어서 이를 확인해보자.
% getfacl folder
#file:folder
#owner:1001
#group:1001
user::rwx
group::r-x
other::r-x
% mkdir folder/subfolder
% touch folder/testfile
% ls -l folder
drwxr-xr-x+ 2 dru dru 512 Jul 27 12:23 subfolder
-rw-r--r--+ 1 dru dru 0 Jul 27 12:23 testfile
subfolder는 디렉터리 권한을 상속받았지만 testfile은 그렇지 않다는 것을 알 수 있다
디렉터리 ACL에 사용자 추가하기
folder 속성창으로 돌아가서 rob을 추가하면 folder/subfolder/와 folder/testfile에 대해 쓰기 권한을 가질 수 있을까? 아니오라고 대답했다면 정답이다. 디렉터리 ACL에 대한 변경사항은 변경이 일어난 후에 생성된 파일이나 하위 디렉터리에만 적용된다.
rob을 추가할 때 선택할 수도 있다. 내가 rob을 단순히 더블 클릭하면 디렉터리에 rob을 추가하기만 하는 것이다. 즉, 첫번째 유형의 ACL만 변경하는 것이다. 그러나 Default 상자를 선택하고 rob을 더블 클릭하면 두번째 유형의 ACL을 변경하는 것이고, 내가 생성하는 하위 디렉터리에 대한 rob의 권한도 적용된다. 실제로, 두가지 방법으로 rob을 추가할 수 있다. 아이콘위에 D가 있다면, 하위 디렉터리에도 영향을 미친다. 그렇지 않다면 현재 디렉터리의 액세스에만 적용된다.
예로 살펴보기 위해 두 가지 버전의 rob을 추가하고, 기본 권한을 rwx로 하자. 결과를 알아보기 위해 다른 테스트 하위 디렉터리와 파일을 생성한다.
% mkdir folder/subfolder2
% touch folder/testfile2
그림9는 유효 ACL을 보여준다. 예상한 것처럼 D가 있는 rob 아이콘에 표시된 default directory ACL은 부모 디렉터리에서 rwx 권한을 상속받았다. D가 없는 rob 아이콘으로 표시된 access ACL은 w가 비유효 권한임을 표시하고 있다. 다시 말해서, 부도 디렉터리에서의 접근 권한만 보여주고, 현재 디렉터리에서 권한을 상속하지 않았음을 보여준다. 따라서, rob은 다른 사용자에 대한 권한은 현재 하위 디렉터리에서만 적용될 것이다. 그러나, 마스크에서 write 박스를 선택해서 이런 설정을 무시할 수 있다.
[그림9] 유효 ACL
folder/subfolder2의 권한에 대한 설명을 이해했다면, 그림 10에의 testfile2의 ACL을 살펴보자. 여기서는 rob 아이콘에 D가 없다. 즉, 파일은 기본 디렉터리 ACL을 상속받지 않기 때문이다. 기본 접근 ACL에 대한 기본 지원이 없으며, rob은 디렉터리나 하위 디렉터리에서 권한을 상속받지 않으며, 다른 사용자와 동일한 권한을 갖는다. 즉, 이렇게 수정하는 방법은 마스크를 수정하는 것이며, 새로운 마스크 값이 다른 사용자 보다 많은 권한을 주지 않았는지 검사한다.
[그림10] 파일과 기본 디렉터리 ACL
ACL 백업하기
ACL을 사용하기 위해 알아야 할 것은 대부분의 백업 프로그램은 ACL을 포함한 파일을 백업하고 복원할때 ACL은 복원하지 못한다는 점이다. 이를 해결하는 좋은 방법은 포트 컬렉션에서 /usr/ports/archivers/star를 설치하는 것이다. tar를 사용하고 있다면 ACL을 지원하기 위한 몇 가지 스위치를 추가하는 것이 어렵지 않을 것이다.
# mkdir -p /usr/backups/dru
# chmod dru:dru /usr/backups/dru
# exit
다음으로 dru는 ACL이 포함된 홈 디렉터리를 백업한다.
% whoami
dru
% cd
% star -cv -Hexustar -acl -f /usr/backups/dru/home.tgz .
홈 디렉터리의 임시 디렉터리에서 테스트로 복원을 해본다.
% mkdir ~/tmp
% cd ~/tmp
% star -xv -Hexustar -acl -f home.tgz
참고: ACL을 지원하지 않는 파일 시스템에서 복원을 하게되면 star에서 경고는 하지만 ACL을 제외하고 파일들을 복원한다.
결론
많은 사용자들이 ACL의 장점에 대해 들어보지 못했거나, 사용하기 어렵다고 믿는다. 사용자에게 eiciel과 star의 사용법을 보여주는 30분 정도의 시간이면 ACL 없이 어떻게 살았는지 궁금해하게 될 것이다.