리눅스의 파일 권한은 사용자
, 사용자 그룹
, 기타 사용자
로 분류 되고, 읽기(r), 쓰기(w), 실행(x) 권한이 제공됩니다.
하지만 이러한 권한 체계는 파일을 관리하는데 유용하지만, 세부적으로 설정할 수 없다는 단점이 나타납니다.
세부적으로 설정할 수 없다는 말은 특정 누군가에 대해 권한을 설정할 수 없다는 것입니다.
이러한 문제점을 해결하기 위해서 접근 제어 리스트 (ACL)
을 사용합니다.
ACL설정이 적용되었는지 확인하기 위해서는 ls -l
명령어를 이용합니다.
그리고 표준권한 뒤에 +
기호가 붙어있다면 ACL이 적용된 것이다.
ACL정보를 확인하기 위해서 getfacl
명령어를 이용합니다.
리눅스에서 주로 get
이 붙은 명령어는 확인하는 명령어이고, set
이 붙은 명령어는 설정하는 명령어 입니다.
그렇다면 ACL이 적용된 파일정보를 확인해보자
사진을 보면
#
으로 시작하는 줄을 확인해보자.
#
으로 시작하는 줄을 파일에 대한 정보를 나타내고 있습니다. file은 경로, owner는 소유자, group은 사용자 그룹을 의미합니다.
그리고 밑에 나오는 정보가 바로 ACL 정보입니다. user는 사용자 권한을 표시하고, group은 사용자 그룹 권한, other는 기타 사용자 권한을 나타냅니다.
그러면ls -l
명령어와 뭐가 다른거지 ?🤔 라는 의문점이 들 수 있다. 바로mask
이다.
mask
는 ACL을 필터링해주는 역할을하고 있으며, 지정된 사용자, 그룹이 사용할 수 있는 최대 권한을 말한다 .
매우 중요한 개념이다 ❗️ 즉, 사용자와 사용자그룹의 권한이 mask권한보다 높더라도 의미가 없다는 것이다.
만약 사용자, 사용자 그룹 권한이 777이더라도, mask 권한이 000이면, 사용자, 사용자그룹 권한도 000이 된다.
사진을 다시 확인해보면#effective: r--
을 확인할 수 있다. 이제 mask권한이 무슨 역할을 하는지 이해했다면 이해할 수 있을것이다.
📌 바로, 사용자(6), 사용자 그룹(5)이지만 실제로는 mask(4)의 권한을 가진다는 의미이다.
💡 추가적으로 조심해야하는 것은 ACL은 여러 사용자, 그룹에 대해 권한을 설정할 수 있기 때문에 중복이 발생한다.
예를들어, 내가 사용자이면서 사용자그룹에 속해있다면, 사용자, 사용자그룹 권한을 모두 부여받을 수 있다는 말이다. 그렇기 때문에 권한을 부여받는 우선순위는 맨 위에서부터 내려오다가 처음 일치하는 권한을 부여받게된다.
옵션 | 설명 |
---|---|
-m | modify의 약자로 권한을 수정할때 사용 |
-x | 권한을 삭제할 때 사용 |
-R | 디렉토리인 경우 하위 디렉토리의 내용까지 권한을 변경 |
-b | 권한 및 mask 등 지정한 권한을 전부 제거 |
setfacl [옵션] [ENTRY:NAME:PERMS] [파일]
ENTRY | 값 |
---|---|
사용자 | u , user |
사용자 그룹 | g, group |
마스크 | m, mask |
기타 사용지 | o, other |
기본 ACL | d, default |
소유자권한 중 user01의 권한이 생기고 명령어에 입력한 rws(7)값이 부여되었다.
-x 옵션을 통해서 추가한 user01의 권한을 삭제한 것을 볼 수 있다.