리눅스 파일 시스템 ACL 적용하기
[출처] ACL (Access Control List)|작성자 이경모
ACL(Access Control List)은 디렉토리 및 파일에 특정 사용자, 그룹에 특정 권한을 넣어 줄 수 있는 기능이다.
ext3 파일 시스템에서는 파일 및 디렉토리에 대한 접근 권한을 소유자, 소유그룹, 기타사용자로 제어 한다.
이러한 상태는 기타 사용자 중에 A라는 사용자에게만 특정 접근 권한을 주고 싶은데 그런 작업은 불가능하다는 얘기다.
물론, A사용자를 소유그룹에 넣어주고 소유 그룹에 특정 권한을 넣어줄 수는 있으나, 이런 이유로 소유 그룹에 넣어줄 수는 없는 상황이 있을 수 있기 때문에 그 또한 어려울 수 있다.
예를 들어보자.
insa라는 인사팀 디렉토리가 있는데, 이 디렉토리는 인사팀원들만 읽고 쓸 수 있다.
여기에 프로젝트팀원 중 한 명에게 insa 디렉토리를 읽을 수 있는 권한을 주어야 하는데, 프로젝트팀원을 인사팀 그룹에 넣을 수는 없는 일이다.
타 팀원을 인사팀 그룹에 넣을 경우, insa디렉토리 말고도 인사팀의 다른 소유 디렉토리를 읽을 수 있는 위험이 있고, 여러 가지 혼선이 있을 수 있기 때문이다.
이럴 때 ACL을 사용하면 문제는 해결 되는 것이다.
아래 문제를 풀면서 ACL에 대해 이해해보자.
문제>
회사에는 Amy, Arthur, Ann 이라는 세 명의 회계사가 있고, Austin이라는 디렉터가 있다.
(Amy, Arthur, Ann, Austin은 모두 acct라는 그룹에 속해 있다.)
Amy 소유의 디렉토리를 Arthur, Ann은 읽고 쓸 수 있고, Austin은 디렉터이기 때문에
읽기만 할 수 있게 설정하려고 한다. ACL을 이용해 설정하자.
먼저 root로 로그인해서 /acct라는 디렉토리를 Amy 소유, acct그룹 소유로 만들고
권한은 755로 설정한다.
이 상태에서는 Amy는 읽고 쓰기가 가능하고 acc그룹과 기타 사용자는 읽을 수만 있다.
여기서 acc그룹의 Arthur, Ann 만 읽고 쓰기가 가능하게 만들려면 ACL을 이용한다.
`setfacl -m u:Arthur:rwx /acct`
`setfacl -m u:Ann:rwx /acct`
ACL을 이용해 /acct 디렉토리에 Arthur과 Ann 사용자가 읽고 쓰기가 가능하게 만든 것이다.
여기서 setfacl을 이용해 /acct의 설정을 변경하는 작업은 root사용자와 Amy만 가능하다.
`getfacl /acct`
위 명령은 현재 /acct 디렉토리에 적용 되어 있는 ACL을 확인하는 것이다.
# file: .
# owner: Amy
# group: acct
user::rwx
user:Arthur:rwx
user:Ann:rwx
group::r-x
mask::rwx
other::r-x
Arthur, Ann에 rwx가 적용되어 있는 것을 확인할 수 있다.
이제 Arthur, Ann 사용자로 /acct디렉토리에 파일, 디렉토리를 생성하면 생성가능하다.
그리고 ACL이 적용 안되어 있는 Austin 사용자는 쓰기가 불가능하다.
`setfacl -m d:u:student:rwx /test`
위 명령은 현재 /test 앞으로 생성될 디렉토리 및 파일에 student 사용자의 읽고 쓰는 권한을 준다는 명령이다.
자세히 보면 앞에 d:가 붙어 있다. default의 앞자를 쓴 것 같다.
그러니까 Default로 생성되는 파일과 디렉토리에 적용되는 설정을 의미한다고 이해하면 될 것 같다.
ACL관련 명령을 간략히 정리하면,
setfacl은 ACL 설정 명령, getfacl은 설정된 ACL 확인 명령이라고 할 수 있다.
ACL은 ACL옵션이 적용된 파티션에만 쓸 수 있다.
CentOS 5.2 에서는 리눅스 설치시 만들어지는 파티션에는 ACL이 자동으로 적용되어서 마운트 되지만, 리눅스를 설치한 후 만든 파티션을 일반적으로 마운트하면 ACL이 적용되지 않는다.
`tune2fs -l 디바이스명`
위 명령을 치면 Default mount Option 부분에 user_xattr acl 이라고 되어 있는 것은 Default로 acl
옵션이 적용된 것이다.
그러나 none으로 되어 있는 것은 /etc/fstab에 옵션 부분을 Default 대신에 acl로 설정해주어야 한다.
acl 옵션을 위처럼 부팅 시 마운트할 때마다 ACL이 적용되도록 /etc/fstab에 넣어줘도 되나,
`tune2fs -o acl 디바이스명` 명령을 이용하면 해당 디바이스의 Default mount Option에 영구적으로 설정이 된다.
(/etc/fstab에 옵션으로 acl을 기입해줄 경우 Default mount Option에는 들어가지 않는다.)
ACL이 적용된 파일이나 디렉토리를 ACL이 적용 안된 파티션으로 옮기면 ACL 설정이 없어짐을 기억하자.
또한 mv로 이동하면 ACL설정은 유지되나 cp로 복사하면 ACL설정은 사라진다.
물론 cp에 -p 옵션을 붙이면 ACL설정은 유지된다.
[출처] ACL (Access Control List)|작성자 이경모