본문 바로가기
서버보안/리눅스 서버보안

ACL(Access Control List)

by Luuii 2017. 12. 28.

ACL(Access Control List)

> 파일과 디렉토리의 확장 속성 중 하나이다.

> setfacl 명령어를 사용해서 파일의 소유자나 그룹을 더 만들 수 있다.

> getfacl 명령어를 사용해서 확장 속성의 정보를 확인 할 수 있다.

     >> 파일의 확장 속성은 Sahdow Inode에 저장 되어있다.


> 원래는 file1을 user01, user02 등의 사용자가 변경하고 싶으면 group의 권한에 사용자를 추가해주면 되지만 각각의 사용자 마다의 권한을 달리해줄 수는 없었다.

> 파일에 대한 ACL 설정을 통해서 file1에 대해서 소유자를 root 사용자 외에도 user01, user02 등 다중 사용자가 소유할 수 있도록 설정 할 수 있다.

>> 물론 그룹에 관해서도  추가로 속하도록 설정 할 수 있다.


> setfacl 명령어는 기본적으로 chmod 명령어와 같은 역할을 가진다.

>> Permission Mode를 변경 하는 역할을 가진다.

> chmod 명령어는 파일에 대한 사용권한이나 그룹권한이 하나로 정해져 있지만 setfacl 명령어를 사용하면, 파일에 대한 사용권한이나 그룹권한을 늘려 줄 수 있다.


[ 명령어 형식 ] 

# getfacl file1

# getfacl file1 file2 . . . .

옵션 

설명

-d 

 기본정보에 대해 확인 

-R

 recursive의 약자로 디렉토리의 경우 하위 디렉토리 내용 까지 확인 가능 


# setfacl -m [ acl ] file1

# setfacl -x [ acl ] file1

옵션 

설명 

-m 

 modify의 약자로 권한을 지정하거나 수정 할 때 사용 

-x 

 권한을 삭제할 때 사용 

-R 

 recursive의 약자로 디렉토리의 경우 하위 디렉토리와 파일까지 권한을 변경 

-b 

 권한 및 mask 등 지정한 권한을 전부 제거 



[EX] 파일의 속성정보 중 사용자와 그룹에 대한 정보 변경 및 삭제


○ 사용시스템

- CentOS 5.5


chmod CMD = setfacl -m


ⓐ 테스트 용 파일 생성 및 정보 확인

# cd /test

# rm -rf /test/*


# touch file1

# ls -l file1

ⓑ chmod 명령어를 사용하여 퍼미션 변경

# chmod 664 file1

# ls -l file1

# getfacl file1


ⓒ setfacl 명령어를 사용하여 퍼미션 변경

# setfacl -m user::rwx file1

# ls -l file1

# getfacl file1

[EX] 파일에 대한 새로운 사용자 추가 및 그룹 추가

ⓐ setfacl 명령어를 사용하여 file1에 대한 새로운 사용자와 퍼미션 추가


# getfacl file1


# setfacl -m u:user01:7 file1

# ls -l file1

# getfacl file1

> '+' (심볼) : 기존의 퍼미션의 확장 퍼미션이 존재한다는 것. 숨겨진.


ⓑ setfacl 명령어를 사용하여 file1에 대한 새로운 그룹과 퍼미션 추가

# groupadd class1

# grep class1 /etc/group


# setfacl -m g:class1:7 file1

# getfacl file1

ⓒ file1에 대한 추가된 새로운 사용자/그룹 삭제

# setfacl -x u:user01 file1        ( # setfacl -x u:user01:rwx file1 )

# getfacl file1


# setfacl -x g:class1 file1

# getfacl file1


[EX] root 사용자의 파일을 일반 사용자(user01)가 사용할 수 있도록 설정

ⓐ 테스트용 파일 생성

# cd /test

# rm -rf /test/*


# echo 1111 > file1


ⓑ file1에 대한 새로운 사용자 및 퍼미션 추가


# setfacl -m u:user01:7 file1

# getfacl file1


ⓒ user01 사용자로 퍼미션 테스트

# su user01


$ echo 2222 >> file1

$ cat file1


$ exit 


ACL은 기존의 퍼미션 보다 먼저 적용된다.



[EX] 확장 속성정보를 동일하게 유지하는 파일 만들기


ⓐ 실습용 파일 생성

# cd /test

# rm -rf /test/*


# touch file{1,2,3,4}


ⓑ 한 개의 파일에 대한 확장 속성 생성

# setfacl -m u:user01:7 file1

# getfacl file1



ⓒ 확장 속성을 다른 파일에 복사

# getfacl file > file.acl

# setfacl --set-file=file.acl file2

# getfacl file1 | setfacl --set-file=- file2


# getfacl file1 file2


[EX] 디렉토리의 확장 속성정보(Default ACL)


Default ACL →  Directory 주어지는 ACL 정보


ⓐ 실습용 디렉토리 생성

# mkdir dir1

# getfacl dir1

user::rwx    >> default:user::rwx    ( d:u::7 )

group::r-x    >> default:group::r-w    ( d:g::5 )

other::r-x    >> default:other::r-x    ( d:o::5 )


ⓑ 디렉토리에 대한 default acl 설정

# setfacl -m d:u::7,d:g::5,d:o::5 dir1


ⓒ default acl 정보 추가

# setfacl -m d:u:user01:7, d:m::5 dir1

# getfacl dir1


ⓓ default acl의 상속에 대한 테스트

>> 디렉토리 안에 파일이 생성 될 때 디렉토리의 default acl 정보를 상속 받는다.


# mkdir dir1/subdir1

# getfacl dir1/subdir1

# setfacl -m d:u::7,d:g::7,d:o::7,m::7 dir1

>> # setfacl -m d:u::rwx,d:group::rwx,d:other:rwx,d:mask:rwx dir1


# getfacl dir1 dir1/subdir1


# mkdir dir1/subdir2

# getfacl dir1/subdir2



> 상위 디렉토리를 바꿀 때 하위 디렉토리도 다 바꿔줘야 한다.

# find /test -type f -name "file* -exec setfacl --set-file=file.acl {} \;


반응형

'서버보안 > 리눅스 서버보안' 카테고리의 다른 글

스토리지  (0) 2017.12.29