ACL 이란?

ACL은 Access Control List의 약어로, 리눅스와 유닉스 기반 운영 체제에서 파일이나 디렉터리에 대한 접근 권한을 세밀하게 제어하기 위한 메커니즘입니다. 일반적인 파일 권한 시스템은 소유자, 그룹, 기타 사용자에 대해 읽기, 쓰기, 실행 권한을 설정할 수 있지만, ACL은 이러한 제한을 더욱 세분화하고 다양한 사용자 및 그룹에 대한 접근 권한을 정의할 수 있습니다.

일반적으로 ACL은 다음과 같은 세 가지의 주요 구성 요소를 사용합니다.

  1. 사용자 (User): 파일이나 디렉터리에 대한 개별 사용자의 권한을 지정합니다.
  2. 그룹 (Group): 특정 그룹의 사용자에 대한 권한을 정의합니다.
  3. 기타 (Others): 사용자와 그룹 외의 모든 사용자에 대한 권한을 나타냅니다.

 

access ACL과 기본 ACL

ACL은 access ACL과 기본 ACL 이라는 두 가지 형식이 있습니다.

기본 ACL은 새로 생성되는 파일이나 디렉터리에 자동으로 할당되는 ACL 입니다. 기본적으로 새로운 파일이나 디렉터리를 생성할 때 자동으로 적용됩니다.

access ACL은 특정 파일이나 디렉터리에 직접 적용되는 ACL로, 해당 파일이나 디렉터리에 대한 세부적인 권한을 제어합니다.

access ACL을 사용하면 하나의 파일이나 디렉터리에 여러 사용자나 그룹에 대한 권한을 부여할 수 있습니다. 각 사용자나 그룹에 대해 읽기, 쓰기, 실행과 같은 권한을 정의할 수 있으며, 이러한 권한은 기존의 파일 권한과 함께 적용됩니다.

예를 들어, 특정 파일에 대한 ACL이 다음과 같이 구성될 수 있습니다.

  • 사용자 ‘user1’에 대한 읽기 및 쓰기 권한 부여
  • 그룹 ‘Tsetgroup’에 대한 실행 권한 부여
  • 기타 사용자에 대한 권한 없음

이러한 ACL은 기본 파일 권한 시스템을 보완하여 더욱 세밀한 접근 제어를 제공합니다. ACL을 사용하면 파일 시스템에서 사용자 및 그룹 간에 정교한 권한을 설정할 수 있어서 보완 요구사항에 더욱 적합한 설정을 구연할 수 있습니다.

※접근 권한은 파일 시스템의 속성으로 부여되므로 ext1, ext2 같은 이전의 파일 시스템에서는 사용할 수 없다.

 

setfacl과 getfacl

setfacl

‘setfacl’은 리눅스와 유닉스 시스템에서 파일과 디렉터리에 대한 ACL (Access Control List) 을 설정하는 명령어입니다.

setfacl [-옵션] [규칙] [파일or디렉터리]

‘setfacl’ 명령어의 규칙은 다음과 같이 설정할 수 있습니다.

  • u:uid:perms
    특정 사용자를 대상으로 ACL을 설정합니다.대상 사용자는 사용자 ID나 UID(숫자)로 지정합니다. 시스템이 등록한 유효한 사용자여야 합니다.
  • g:gid:perms
    그룹을 대상으로 권한을 지정합니다. 대상 그룹은 그룹명이나 GID(숫자)로 지정합니다. 시스템이 등록한 유효한 그룹이어야 합니다.
  • o:perms
    그 밖의 다른 사용자에 대해 ACL을 지정합니다. perms에 지정하는 권한은 읽기(r), 쓰기(w), 실행(x)으로 세 가지로 나누어집니다.

    여러 권한을 지정할 경우 권한 문자를 이어서 지정하면 됩니다. 예를 들어, 읽기, 쓰기를 허용할 경우 rw를 지정하면 됩니다.

 

‘setfacl’ 명령어의 주요 옵션들은 다음과 같습니다.

  1. -m, –modify:
    기존 ACL을 수정합니다. 새로운 규칙을 추가하거나 기존 규칙을 변경할 때 사용됩니다.

    setfacl -m u:user1:rw file.txt

    위의 예시는 ‘file.txt’에 대해 사용자 ‘user1’에게 읽기(r)와 쓰기(w) 권한을 부여합니다.

  2. -x, –remove:
    ACL에서 규칙을 제거합니다

    setfacl -x u:user1:rw file.txt

    위의 예시는 ‘file.txt’에 대해 사용자 ‘user1’의 ACL 규칙을 제거합니다. 

  3. -R, –recursive:
    디렉터리의 ACL을  재귀적으로  적용합니다.

    setfacl -R -m u:user1:rw directory
    

    위의 예시는 ‘directory’와 그 하위 디렉터리에  대해 사용자 ‘user1’에게 읽기(r)와 쓰기(w) 권한을 부여합니다. 

  4. -b, –remove-all:
    모든 ACL 규칙을 제거합니다.

    setfacl -b file.txt

    위의 예시는 ‘file.txt’의 모든 ACL 규칙을 제거합니다. 

  5. -d, –default:
    디랙토리의 기본 ACL을 설정합니다. 디렉터리에 새로운 파일이 생성될 때 해당 파일에 기본 ACL이 적용됩니다.

    setfacl -d -m u:user1:rw directory

    위의 예시는 ‘directory’에  대해 사용자 ‘user1’에게 새로 생성되는 파일에 대한 기본 ACL을 설정합니다.

getfacl

‘getfacl’은 파일이나 디렉터리의 ACL을 조회하는 명령어입니다. 현재 설정된 ACL을 확인할 수 있습니다.

getfacl file.txt

위에 예시는 ‘file.txt’의 ACL을 조회하는 명령어 입니다

[root@localhost ~]# getfacl file.txt
# file: file.txt
# owner: root
# group: root
user::rw-
group::---
other::---

‘file.txt’의 ACL정보를 표시합니다.

‘setfacl’ 명령어로 ‘user1’에게 ‘file.txt’에 읽기, 쓰기 권한을 준다.

[root@localhost ~]# setfacl -m u:user1:rx file.txt

ls 명령어로 ‘file.txt’를 확인해보면 Permission (-rwxr-x—) 뒤에 ‘+’ 기호가 생성된 것을 확인할 수 있습니다.
‘+’ 기호는 ACL이 적용된 파일이나 디렉터리를 나타냅니다.

[root@localhost ~]# ls -l
total 12
-rwxr-x---+. 1 root root 21 Dec 21 18:14 file.txt

getfacl 명령어로 다시 ‘file.txt’에 등록된 ACL 값을 확인합니다.

# [root@localhost ~]# getfacl file.txt
# file: file.txt
# owner: root
# group: root
user::rw-
user:user1:r-x
group::---
mask::r-x
other::---

‘getfacl’ 명령어의 주요 옵션들은 다음과 같습니다.

  1. -c, –omit-header:
    출력에서 주석 헤더를 생략합니다. 이는 출력을 프로그래밍적으로 파싱하거나 처리할 때 유용합니다.

    [root@localhost ~]# getfacl -c directory/file.txt
    user::rwx
    group::---
    other::---
  2. -R, –recursive:
    모든 파일 및 하위 디렉터리의 ACL을 재귀적으로 표시합니다.

    [root@localhost ~]# getfacl -R directory/
    # file: directory/
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
  3. -t, –tag:
    ACL 정보를 탭 형식으로 표시합니다.

    [root@localhost ~]# getfacl -t directory/file.txt
    # file: directory/file.txt
    USER root rwx
    GROUP root ---
    other ---
  4. -s, –tabulated-list:
    ACL 항목을 표의 형태로 표시합니다. 특히 여러 항목이 있는 디렉터리를 읽기 쉽게 표시할 때 유용합니다.
    ‘setfacl’ 명령어로 access ACL이 설정된 항목만 표시합니다
    ls 명령어로 ‘directory’안을 조회해보면 ‘file.txt’,’file2.txt’,’file3.txt’이 있다는 것을 확인 할 수 있습니다.

    [root@localhost ~]# ls -l directory/
    total 12
    -rwxrwx---+ 1 root root 21 Dec 21 17:54 file2.txt
    -rwx---rwx. 1 root root 21 Dec 21 18:03 file3.txt
    -rwxr-x---+ 1 root root 21 Dec 21 11:57 file.txt

    -R 옵션과 -s 옵션을 같이 사용하여 ‘directory’ 안에 있는 ‘file.txt’와 ‘file2.txt’의 ACL정보를 표시합니다.

    [root@localhost ~]# getfacl -Rs directory
    # file: directory/file.txt
    # owner: root
    # group: root
    user::rwx
    user:user1:r-x
    group::---
    mask::r-x
    other::---
    
    # file: directory/file2.txt
    # owner: root
    # group: root
    user::rwx
    user:user1:rw-
    group::r-x
    mask::rwx
    other::---

    -s 옵션 없이 -R 만 사용했을 경우 ‘directory’와 ‘file3.txt’는 access ACL이 설정되어있지 않아 -s를 사용했을 때는 출력 되지 않습니다.

    [root@localhost ~]# getfacl -R directory
    # file: directory
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    
    # file: directory/file.txt
    # owner: root
    # group: root
    user::rwx
    user:user1:r-x
    group::---
    mask::r-x
    other::---
    
    # file: directory/file2.txt
    # owner: root
    # group: root
    user::rwx
    user:user1:rw-
    group::r-x
    mask::rwx
    other::---
    
    # file: directory/file3.txt
    # owner: root
    # group: root
    user::rwx
    group::---
    other::rwx