[리눅스] ACL과 POSIX 권한: 개념과 우선순위
- IT/linux
- 2024. 4. 8. 08:11
POSIX (기본 권한)
리눅스와 유닉스 기반 시스템에서 기본적으로 사용되는 파일 및 디렉토리 권한 시스템이다.
소유자(owner), 그룹(group), 다른 사용자(other) 세 가지 권한 그룹으로 구성된다.
위의 각 권한 그룹은 읽기(read), 쓰기(write), 실행(execute)의 세 가지 권한을 가질 수 있다.
권한은 숫자로 표현되며, 각 권한에 숫자가 할당됩니다. (읽기=4, 쓰기=2, 실행=1)
ACL(Access Control List) (확장 권한)
POSIX 권한을 보완하기 위해 도입된 개념으로, 더 세밀한 엑세스 제어를 제공한다.
파일이나 디렉토리에 추가적인 사용자나 그룹별 권한을 지정할 수 있다.
각 사용자나 그룹에 대해 특정 권한을 지정할 수 있으며, POSIX 권한보다 더 유연한 권한 관리를 제공한다.
POSIX와 ACL의 우선순위
POSIX 권한은 기본적으로 설정되는 권한이며, ACL은 확장 권한으로서 POSIX보다 우선순위가 더 높다.
즉, POSIX 권한이 파일 실행을 허용하지 않더라도, ACL을 통해 실행 권한을 추가하면 실행할 수 있다.
예시를 통해 각 권한의 관계와 우선순위를 알아보자
* 예시에서 사용될 정보
테스트용 디렉토리 : /test_directory (755 POSIX 권한)
테스트용 파일 : /test_directory/test_file.sh (644 POSIX 권한)
테스트용 일반계정 : castle
1. 테스트 디렉토리 및 파일 생성 및 POSIX 권한 설정
POSIX 권한 : 다른 사용자(other) 권한 그룹에는 읽기(read) 실행(execute) 권한 부여
* 참고로 디렉토리 생성 시 기본 POSIX 권한은 최상위 디렉토리의 POSIX 권한을 상속받는다.
* 테스트용 디렉토리(755) 생성
[servera]# mkdir /test_directory
[servera]# chmod 755 test_directory
[servera]# ls -al | grep -i test_directory
drwxr-xr-x. 2 root root 26 Apr 5 16:00 test_directory
[servera]# getfacl test_directory
# file: test_directory
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
* 테스트용 파일(644) 생성
[servera]# echo -e "echo hello, world!" test_directory/test_file.sh
[servera]# ls -al test_directory/test_file.sh
-rw-r--r--. 1 root root 19 Apr 5 16:00 test_directory/test_file.sh
[servera]# getfacl test_directory/test_file.sh
# file: test_directory/test_file.sh
# owner: root
# group: root
user::rw-
group::r--
other::r--
2. 권한 테스트(1차)
현재 POSIX 권한만 적용되어 있고, ACL은 따로 설정하지 않은 상태
test_directory 디렉토리에 읽기, 실행만 허용하고 있기 때문에 castle 계정으로는 해당 디렉터리 안에서 새로운 파일을 만들 수 없고, 기존 파일을 수정할 수 없지만 읽거나 실행은 할 수 있다.
[servera]# su - castle
[servera]$ cd /test_directory
[servera]$ ls -l
total 4
-rw-r--r--. 1 root root 21 Apr 7 14:48 test_file.sh
[servera]$ cat test_file.sh // 읽기(read) 성공 - POSIX 기본 권한
echo hello, world!
[servera]$ sh test_file.sh // 실행(execute) 성공 - POSIX 기본 권한
hello, world!
[servera]$ echo -e "\nThis is Test" >> test_file.sh // 쓰기(write) 실패
-bash: test_file.sh: Permission denied
3. ACL 설정
생성한 test_directory 디렉토리와 test_file.sh 파일에 ACL 설정을 통한 추가적인 쓰기(write) 권한을 castle 계정에 부여하자.
* 디렉토리 ACL 설정
[servera]# getfacl test_directory
# file: test_directory
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
[servera]# setfacl -m u:castle:rwx test_directory // 기존 POSIX 권한이던 r,x는 그대로 유지하고, w 추가
[servera]# getfacl test_directory
# file: test_directory
# owner: root
# group: root
user::rwx
user:castle:rwx
group::r-x
mask::rwx
other::r-x
[servera]# ls -l | grep -i test
drwxrwxr-x+ 2 root root 26 Apr 7 15:22 test_directory // '+' 표시는 ACL 설정이 있다는 뜻
* 파일 ACL 설정
[servera]# cd /test_directory
[servera]# getfacl test_file.sh
# file: test_file.sh
# owner: root
# group: root
user::rw-
group::r--
other::r--
[servera]# setfacl -m u:castle:rwx test_file.sh // 기존 POSIX 권한이던 r,x는 그대로 유지하고, w 추가
[servera]# getfacl test_file.sh
# file: test_file.sh
# owner: root
# group: root
user::rw-
user:castle:rwx
group::r--
mask::rwx
other::r--
[servera]# cd test_directory/
[servera]# ls -l
total 4
-rw-rwxr--+ 1 root root 21 Apr 7 14:48 test_file.sh // '+' 표시는 ACL 설정이 있다는 뜻
4. 권한 테스트(2차)
1차 테스트 때 test_directory에 대한 POSIX 권한은 읽기, 쓰기만 허용하기에 castle 계정에서는 쓰기가 안되었지만, 3번 과정에서 ACL을 통해 test_directory 디렉토리와 test_file.sh 파일에 대해 castle 계정에 기존 읽기, 쓰기는 유지하고, 쓰기 권한을 추가했다.
과연 실행이 될까?
[servera]# su - castle
[servera]$ cd /test_directory
[servera]$ cat test_file.sh // 읽기(read) 성공 - POSIX 기본 권한
echo "Hello, world!"
[servera]$ sh test_file.sh // 실행(execute) 성공 - POSIX 기본 권한
Hello, world!
[servera]$ echo -e '\necho "This is Test"' >> test_file.sh // 수정(write) 성공 - ACL 추가 권한
[servera]$ sh test_file.sh
Hello, world!
This is Test
* POSIX 기본 권한인 755 디렉토리 및 644 파일에는 다른 사용자에게 수정 권한이 없지만, ACL을 통해 castle 계정에 권한을 추가했더니 수정이 된다.!!!
결론
POSIX 권한은 읽기 및 실행만 허용했지만, ACL을 통해 쓰기 권한을 부여함으로써 castle 계정은 파일을 수정할 수 있었다.
이는 ACL이 POSIX 권한을 보완하거나 덮어쓰기 위해 사용될 수 있음을 보여준다.
'IT > linux' 카테고리의 다른 글
[리눅스] 서버 보안 ACL 개념 및 설정하기 (feat. getfacl, setfacl) (1) | 2024.04.12 |
---|---|
[리눅스] SELinux 개념 및 설정 방법, on/off (feat. semanage) (2) | 2024.04.09 |
[리눅스] 포트 오픈 확인 (feat. telnet, ncat/nc, curl, bash) (1) | 2024.04.07 |
[리눅스] RHCSA 9(5), SELinux 트러블 슈팅 (feat. semanage, sealert, curl, ncat) (1) | 2024.04.04 |
[리눅스] RHCSA 9(4), 계정/그룹 생성 및 패스워드 설정(feat. nologin, --stdin) (0) | 2024.04.01 |