Linux

Linux 접근 제어 목록(ACL) 이란?

Joon0464 2024. 5. 3. 15:51

접근 제어 목록(ACL)


Access Control List (ACL)는 파일과 디렉토리에 대해 세분화된 사용자 및 그룹 권한을 설정할 수 있게 해주는 기능입니다. 기본적인 리눅스 권한 시스템은 소유자, 그룹, 기타에 대한 권한을 제공하는 반면, ACL을 통해서는 특정 사용자 또는 그룹에 대해 더 구체적인 권한을 부여할 수 있습니다.

ACL 사용을 위한 준비


대부분의 현대 리눅스 배포판은 ACL을 지원하지만, getfaclsetfacl 명령어를 사용하기 위해서는 acl 패키지를 설치해야 합니다. Ubuntu에서는 다음 명령어로 설치할 수 있습니다:

$ sudo apt-get update
$ sudo apt-get install acl

ACL 설정 방법

  1. ACL 설정 확인: 파일이나 디렉토리에 대한 현재 ACL 설정을 확인하려면 getfacl [file] 명령어를 사용합니다.
  2. ACL 설정: ACL을 설정하려면 setfacl 명령어를 사용합니다. 기본 형식은 setfacl -m u:[username]:[permission] [file]입니다.

실습 예제

테스트 파일을 생성하고, example.txt에 대해 user1에게 읽기(r) 및 쓰기(w) 권한을 부여하고, ACL 설정을 확인한 후, -x 옵션을 사용하여 user1에 대한 ACL을 제거합니다.

추가 정보

디렉토리에 대한 기본 ACL을 설정하려면 d 옵션을 사용할 수 있으며, 권한은 읽기(r), 쓰기(w), 실행(x), 없음(-)의 조합으로 설정할 수 있습니다.

ACL을 사용하면 전통적인 리눅스 권한 시스템에 비해 다양한 사용자와 그룹에 대한 세분화된 권한 관리가 가능해져, 특히 상세한 권한 설정이 필요할 때 유용합니다.

 

접근 제어 목록(ACL)은 파일이나 디렉토리에 대해 사용자나 그룹별로 세밀한 접근 권한을 설정할 수 있게 해주는 기능입니다. 기본적인 리눅스 권한 설정을 넘어서 더 세부적인 권한 관리를 가능하게 합니다.

ACL 적용 실습 예제


대부분의 현대 리눅스 배포판은 ACL을 지원하지만, getfaclsetfacl 명령어를 사용하기 위해선 acl 패키지가 설치되어 있어야 합니다. Ubuntu에서는 다음 명령어로 설치할 수 있습니다.

모든 테스트는 wsl ubuntu 20.04 환경에서 진행하였습니다.

 

1. ACL 설치하기

$ sudo apt-get update
$ sudo apt-get install acl -y

 

2. 파일에 대한 ACL 적용 및 확인

# 테스트용 파일 생성
$ touch example.txt
# joon 이라는 사용자에게 example.txt 파일에 대하여 읽기 권한만 부여
$ setfacl -m u:user1:r example.txt
$ setfacl -m u:joon:r example.txt
$ getfacl example.txt
# file: example.txt
# owner: joon
# group: joon
user::rw-
user:joon:r--
user:user1:r--
group::r--
mask::r--
other::r--

여기서 중요한 사항은 파일의 소유자가 joon 사용자 입니다. 분명 joon 사용자와 user1에게 동일하게 읽기 권한만을 부여했지만 파일 소유자 때문에 테스트 결과에서 차이가 발생합니다. 이 차이는 뒤에 테스트 단계에서 살펴보겠습니다.

 

3. joon 사용자로 파일에 내용 쓰기 테스트

현재 접속중인 사용자가 joon임을 확인
$ whoami
joon
# example.txt에 파일 내용 작성
$ cat << EOF > example.txt
> test
> EOF
# 작성된 내용 확인
$ cat example.txt
test

분명 읽기 권한만 주어진 joon 사용자지만 파일에 쓰기가 가능하였습니다.

 

4. user1 사용자로 파일에 내용 쓰기 테스트

# 우선 example.txt에 others 권한에 쓰기 권한을 추가합니다.(ACL로만 쓰기가 제한되는지 확인하기 위해)
$ chmod o+w example.txt

# user1의 홈 디렉토리로 example.txt 파일을 복사해주고 권한은 그대로 유지하도록 -p 옵션을 사용합니다.
$ sudo cp -p example.txt /home/user1/example.txt

# user1의 홈 디렉토리에 존재하는 파일의 권한이 others에 w권한이 있는 것을 확인합니다.
$ sudo ls -al /home/user1/example.txt
-rw-r--rw-+ 1 joon joon 5 May  3 14:21 /home/user1/example.txt

# example.txt 파일에 acl 설정도 그대로 유지되었는지 확인합니다.
$ sudo getfacl /home/user1/example.txt
# file: home/user1/example.txt
# owner: joon
# group: joon
user::rw-
user:joon:r--
user:user1:r--
group::r--
mask::r--
other::rw-


# 유저를 user1으로 변경합니다.
$ su user1
Password:

# 현재 접속 유저 확인
user1@DESKTOP-0U76AK5:/home/joon$ whoami
user1

# 홈 디렉토리로 이동 후 파일 확인
user1@DESKTOP-0U76AK5:~$ cd $HOME && ls -al example.txt
-rw-r--rw-+ 1 joon joon 5 May  3 14:21 example.txt

# 파일에 내용 쓰기 테스트
user1@DESKTOP-0U76AK5:~$ cat << EOF > example.txt
> test1
> EOF
bash: example.txt: Permission denied

# 파일 내용을 확인하면 최초 joon 사용자가 입력했던 test 가 그대로 입력되어 있습니다.
$ cat example.txt
test

 

위와 같이 others 사용자에게 w권한이 존재하지만 파일에 내용 쓰기가 불가능합니다.

 

5. user1 사용자 ACL 제거 후 다시 테스트

# -x 옵션으로 ACL 설정 제거
$ sudo setfacl -x u:user1 /home/user1/example.txt

# ACL 설정 제거 확인
$ sudo getfacl /home/user1/example.txt
getfacl: Removing leading '/' from absolute path names
# file: home/user1/example.txt
# owner: joon
# group: joon
user::rw-
user:joon:r--
group::r--
mask::r--
other::rw-

# user1으로 유저 변경 후 테스트
$ su user1
Password:
user1@DESKTOP-0U76AK5:/home/joon$ cd $HOME
user1@DESKTOP-0U76AK5:~$ cat << EOF > example.txt
> test2
> EOF
user1@DESKTOP-0U76AK5:~$ cat example.txt
test2

 

다시 setfacl 명령어를 통해 ACL 설정을 제거하고 테스트해보면 정상적으로 파일에 쓰기가 가능한 것을 볼 수 있습니다.

 

 

저번글 capability 설정에 이어서 리눅스 보안에 관련된 설정들이 seccomp 프로필과 ACL에 대해서 살펴보았습니다. 모던 리눅스를 계속 읽고 있는데 추가적으로 정리할 내용 있으면 블로그를 통해 다시 공유할 예정입니다.

'Linux' 카테고리의 다른 글

Linux systemd 완전 정복하기  (1) 2024.05.07
Linux 부팅 프로세스  (0) 2024.05.07
Linux seccomp 프로필과 접근제어목록(ACL)이란?  (0) 2024.05.03
Linux Capability 란?  (1) 2024.05.02
RUID EUID SUID 란?  (0) 2024.05.02