본문 바로가기
카테고리 없음

[Linux] ACL 개념 & 설정법(setfacl, getfacl)

by 떵해이 2020. 12. 6.
300x250

리눅스는 대체적으로 서버로 많이 활용되고 있습니다.

서버로 활용되면 보안을 철저히 해야합니다.

간단하지만 리눅스 서버 보안 관련하여 ACL을 사용하기도 합니다.

○ ACL이란 ?

    ▷ Access Control List 의 약자

    ▷ 접근 제어 목록을 설정하는 것

    ▷ ACL은 파일과 디렉토리의 확장 속성 중 하나

    ▷ chmod 명령어보다 더 다양한 권한에 대해 수행 할 수 있음

 

chmod 권한 명령어로 user, group, other 이란 한정된 영역에 권한을 부여할 수 있습니다.

하지만 ACL을 사용하게 되면 user, group, other 권한을 건드리지 않고 특정 사용자에게

권한을 부여할 수 있습니다.

 

예를 들어, /etc/passwd란 파일의 권한은 rw- r-- r-- (644) 입니다.

그러면 수정은 파일의 user만 가능합니다.

하지만 여기서 ACL을 사용하여 설정하게 된다면, 똑같이 644권한인데도 불구하고

/etc/passwd파일을 수정할 수 있게 됩니다.

 

○ ACL 설정법

설정하는 방법은 크게 파일과 디렉토리 두가지 방법이 있습니다.

설정하는 명령어를 먼저 소개한 후에 설정을 두가지 방벙으로 해보겠습니다.

 

 

● ACL 설정 명령어

 

그냥 # ls 명령어로는 ACL권한을 볼 수 없습니다.

파일에 '+'모양이 붙어있을 때 아래의 getfacl 명령어로 파일에 설정된 ACL권한을 볼 수 있습니다.

 

# getfacl [옵션] [파일/디렉토리] : 파일/디렉토리의 추가적인 권한을 확인할 때 사용

-d : 기본 정보에 대해 확인

-R : 디렉토리인 경우 하위 디렉토리 내용까지 확인 가능

 

# setfacl [옵션] [권한] [파일/디렉토리] : 파일/디렉토리의 추가적인 권한을 수정할 때 사용

-m : ACL 설정(수정)

-x : ACL 삭제

-R : 디렉토리인 경우 하위 디렉토리 내용까지 권한 변경

-b : 모든 ACL 삭제 (mask 포함)

 

예시) # setfacl -m u:testuser:rx /test

권한에 들어갈 자리에 대해 눈으로 한번 익히고 아래에서 한번 사용해도록 하겠습니다.

 

u:[유저명]:[rwx] (rwx 대신 숫자로 7 가능) - 유저 권한 부여

g:[그룹명]:[6] (6 대신 문자로 rw 가능) - 그룹 권한 부여

m::[rx] (rw 대신 숫자로 5 가능) - mask 값 설정 (mask는 권한의 제한을 두는 값을 의미)

 

 

● ACL 설정

 

일단 시작전에 첫번째 사용자 계정을 만들어보도록 하겠습니다.

두번째 연습용 디렉토리에 파일을 하나 만들어 보도록 하겠습니다.

# useradd mong 테스트할 계정 하나 생성

# mkdir /ACLtest 디렉토리 생성

# touch /ACLtest/acltest 파일 생성

# ll -d acltest 파일 확인

 

 

여기서 acltest 파일의 권한을 바꿔보도록 하겠습니다.

# cd /ACLtest 디렉토리로 이동

# chmod 700 acltest 파일 권한 주기

# ll 파일 권한 확인

이렇게 하면 이제 이 파일의 소유자외에는 파일을 볼 수도 수정할 수도 없습니다.

 

 

여기서 acltest파일에 ACL 권한을 주도록 하겠습니다.

# setfacl -m u:mong:rw acltest 명령어로 acltest파일에 acltest란 유저가 rw권한을 가지게 됩니다.

# ll 파일 확인

아래 화면처럼 '+'가 생겼습니다.

root유저외에 아무도 acltest파일을 열 수가 없지만 방금 ACL설정으로 인해 mong유저는 접근할 수 있습니다.

위의 사진보면 그룹 권한 자리에 rw가 생겼습니다. 권한을 700을 줬는데 갑자기 rw가 생겼습니다.

그룹 권한 자리에 생긴 rw는 ACL권한인 mask를 나타냅니다.

파일에 '+'가 있는 파일들은 그룹 권한 자리에 ACL권한 mask를 나타냅니다.

자세한 설명은 아래에서 다시 하도록 하겠습니다.

 

 

# su - user user계정으로 접속

# cat /ACLtest/acltest 파일 읽기 시도

다른 계정인 user로 접속하여 acltest파일을 읽으려고 시도했지만 허가 거부가 났습니다.

 

 

# logout 로그아웃하여 원래 접속했던 계정 root로 복귀

# su - mong mong계정으로 접속

# cat /ACLtest/acltest 파일 읽기 시도

ACL권한을 주었던 mong 계정으로는 파일 읽기가 시도 성공하였습니다.

파일안에 아무것도 입력을 하지 않아 내용이 나오지 않은 것이고, 허가 거부가 나지 않았으므로

파일 읽기가 mong계정은 가능하다는 것을 확인하였습니다.

 

 

다시 # logout 명령어를 통해 root계정으로 복귀

이제 ACL권한이 잘 적용되는 것을 확인해보았습니다.

 

이제는 ACL권한을 확인 하는 것과 위에서 왜 그룹 권한을 주지 않았는데 생겨났는지 알아보도록 하겠습니다.

 

# getfacl /ACLtest/acltest 명령어로 파일에 설정된 ACL권한 확인하기

파일의 설정된 숨겨진 ACL권한을 확인할 수 있습니다.

그냥 파일을 출력하여 위의 설명처럼 '+'가 있으면 명령어로 자세히 확인하면 됩니다.

file 파일 이름

owner 소유자

group 소속 그룹

user 권한

user:추가 계정:권한

group 권한

mask 권한

other 권한

 

여기서 user에는 추가 계정에 들어가면 그 계정은 따로 권한을 부여하는 것을 짐작하셨을 것입니다.

group도 동일하게 사용됩니다. 설정도 그룹으로 똑같은 방법으로 하면 됩니다.

 

ACL에는 other설정은 없습니다. 단, mask라는게 존재 합니다.

이 mask의 권한이 그룹 권한 자리에 표기가 되는 것입니다.

 

mask를 한번 설정해보고 설명하도록 하겠습니다.

 

# setfacl -m m::r acltest 명령어로 acltest파일에 ACL mask권한을 r부여했습니다.

위의 설명대로 그룹 권한 자리에 rw -> r로 바뀌었습니다.

 

 

# getfacl acltest 명령어로 acltest ACL권한 보기

mask는 r로 바뀌었고 특이한 #effective:r--이 생겼습니다.

mask의 역할은 유저와 그룹에 어떤 ACL권한을 줘도 mask가 설정한 권한을 넘지 못하게 설정하는 것입니다.

 

그말은 mong계정에 위에서 분명 rw권한을 부여했지만

mask가 r권한으로 설정되어있어서 mong계정은 r권한 밖에 사용하지 못한다는 뜻입니다.

 

그래서 mong 계정 옆에 #effecitv:r--라고 표시가 뜨게 되는 것입니다.

설정은 rw-로 했지만 적용되는 건 r--다 라고 의미하는 것입니다.

 

 

이제 파일에 ACL도 부여해봤고, mask도 부여해봤고, mask의미도 알았습니다.

이제 디렉토리에 한번 ACL을 부여해보도록 하겠습니다.

 

사실 디렉토리도 파일과 ACL 권한 부여하는 방법이 똑같습니다.

 

하나의 차이점이 있습니다.

 

디렉토리에는 권한 상속을 할 수 있게 만들 수 있습니다.

setfacl -m 명령을 통해 default를 설정하면 됩니다. (단, 디렉토리인 경우만 사용 가능)

 

default로 디렉토리에 권한을 주면 그 아래에 만드는 디렉토리가 권한을 상속받습니다.

 

(d는 default 줄인 말)

# setfacl -m d:u::7 /ACLtest 디렉토리에 default로 user 권한 7

# setfacl -m d:g::0 /ACLtest 디렉토리에 default로 group 권한 0

# setfacl -m d:o::0 /ACLtest 디렉토리에 default로 other 권한 0

# setfacl -m d:m::7 /ACLtest 디렉토리에 default로 ACL mask 권한 7

(# setfacl -m default:mask::rwx /ACLtest 명령어로 사용해도 무방)

 

# setfacl -m default:u:mong:rw /ACLtest 디렉토리에 default로 mong계정 rw권한 부여

(# setfacl -m d:u:mong:6 /ACLtest 명령어로 사용해도 무방)

 

 

# getfacl /ACLtest 디렉토리 권한 확인

default가 디렉토리 권한에 있다는 것은 이 디렉토리 밑에 디렉토리를 만들면 권한이 상속됩니다.

 

 

# cd /ACLtest 디렉토리로 이동

# mkdir test1 테스트 디렉토리 생성

# touch test2 테스트 파일 생성

# ll 파일 확인

 

 

먼저 디렉토리인 test1 확인

# getfacl test1 

 

디렉토리의 경우 default까지 모두 그대로 상속

 

 

# getfacl test2 파일 확인

일반 파일 같은 경우 x인 실행 권한을 자동으로 삭제시킨 뒤, 권한 생성되었으며,

default권한은 사라짐. (default는 디렉토리만 사용 가능)

 

반응형

댓글