시스템 관리자로서, 우리의 첫 번째 우선 순위는 무단 접근으로부터 데이터를 보호하고 안전하게 유지하는 것입니다. 우리는 chmod, chown, chgrp와 같은 유용한 리눅스 명령어를 사용하여 설정하는 권한에 대해 인식하고 있습니다. 그러나 이러한 기본 권한 설정에는 제한이 있으며 때로는 우리의 요구에 맞게 작동하지 않을 수 있습니다. 예를 들어, 같은 디렉토리나 파일에 대해 서로 다른 사용자를 위한 권한 집합을 설정할 수 없습니다. 따라서 접근 제어 목록 (ACLs)이 구현되었습니다.

세 명의 사용자, ‘ tecmint1 ‘, ‘ tecmint2 ‘, ‘ tecmint3 ‘가 있다고 가정해 보겠습니다. 각각이 ‘ acl’ 라는 공통 그룹을 가지고 있습니다. 사용자 ‘ tecmint1 ‘은 소유한 파일을 ‘ tecmint1 ‘이 읽고 접근할 수 있도록 하고 다른 사람은 아무런 액세스 권한도 가지지 않아야 한다고 원합니다.
ACL은 이와 같은 작업을 수행할 수 있도록 해줍니다. 이러한 ACL을 사용하면 사용자, 그룹 및 사용자의 그룹 목록에 없는 모든 사용자 그룹에 대한 권한을 부여할 수 있습니다.
참고: Redhat 제품 문서에 따르면, ext3 파일 시스템과 NFS 내보낸 파일 시스템에 대한 ACL 지원이 제공됩니다.
리눅스 시스템에서 ACL 지원 확인하는 방법
계속하기 전에 현재 커널과 마운트된 파일 시스템에서 ACL을 지원해야 합니다.
1. ACL 지원을 위한 커널 확인
다음 명령을 실행하여 파일 시스템의 ACL 지원 및 POSIX_ACL=Y 옵션을 확인하십시오 (Y 대신 N이 있는 경우 커널이 ACL을 지원하지 않고 다시 컴파일해야 합니다).
[root@linux ~]# grep -i acl /boot/config* CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_REISERFS_FS_POSIX_ACL=y CONFIG_JFS_POSIX_ACL=y CONFIG_XFS_POSIX_ACL=y CONFIG_BTRFS_FS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y CONFIG_GENERIC_ACL=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_NFS_V3_ACL=y CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3_ACL=y CONFIG_NFS_ACL_SUPPORT=m CONFIG_CIFS_ACL=y CONFIG_9P_FS_POSIX_ACL=y
2. 필수 패키지 확인
ACL을 사용하기 전에 설치해야 할 필수 패키지가 있는지 확인하십시오. 아래는 yum이나 apt-get을 사용하여 설치해야 하는 필수 패키지입니다.
[root@linux ~]# yum install nfs4-acl-tools acl libacl [on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl [on Debian based systems]
3. ACL 지원을 위한 마운트된 파일 시스템 확인
이제 마운트된 파일 시스템이 ACL 옵션으로 마운트되어 있는지 확인하십시오. 아래와 같이 ‘mount’ 명령을 사용하여 동일한 것을 확인할 수 있습니다.
[root@linux ~]# mount | grep -i root /dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)
그러나 우리의 경우 기본적으로 acl이 표시되지 않습니다. 따라서 마운트된 파티션을 acl 옵션을 사용하여 다시 마운트할 수 있는 옵션이 있습니다. 그러나 전진하기 전에 파티션이 acl 옵션을 사용하여 마운트되어 있는지 확인할 수 있는 또 다른 옵션이 있습니다. 최신 시스템의 경우 기본 마운트 옵션에 통합될 수 있습니다.
[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl Default mount options: user_xattr acl
위의 출력에서 기본 마운트 옵션에 이미 acl 지원이 있는 것을 볼 수 있습니다. 또 다른 옵션은 아래와 같이 파티션을 다시 마운트하는 것입니다.
[root@linux ~]# mount -o remount,acl /
다음으로, ‘/etc/fstab’ 파일에 아래 항목을 추가하여 영구적으로 만듭니다.
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
다시 파티션을 다시 마운트하십시오.
[root@linux ~]# mount -o remount /
4. NFS 서버
NFS 서버에서 NFS 서버에 의해 내보내진 파일 시스템이 ACL을 지원하고 ACL이 NFS 클라이언트에 의해 읽힐 수 있다면, 클라이언트 시스템에서 ACL이 사용됩니다.
NFS 공유에서 ACL을 비활성화하려면 NFS 서버의 ‘/etc/exportfs‘ 파일에 옵션 “no_acl“을 추가해야 합니다. NSF 클라이언트 측에서 다시 비활성화하려면 마운트 시 옵션 “no_acl“을 사용하십시오.
Linux 시스템에서 ACL 지원 구현 방법
ACL에는 두 가지 유형이 있습니다.
- 접근 ACL: 접근 ACL은 파일이나 디렉토리에 대한 권한 부여에 사용됩니다.
- 기본 ACL: 기본 ACL은 특정 디렉토리에 대한 액세스 제어 목록을 부여/설정하는 데 사용됩니다.
접근 ACL과 기본 ACL의 차이:
- 기본 ACL은 디렉토리 수준에서만 사용할 수 있습니다.
- 해당 디렉토리 내에 생성된 하위 디렉토리나 파일은 부모 디렉토리의 ACL을 상속받습니다. 반면 파일은 기본 ACL을 액세스 ACL로 상속받습니다.
- 기본 ACL을 설정하려면 “–d”를 사용하고 기본 ACL은 선택 사항입니다.
기본 ACL 설정 전
특정 파일이나 디렉토리의 기본 ACL을 확인하려면 ‘getfacl’ 명령을 사용하십시오. 아래 예에서는 ‘getfacl’을 사용하여 폴더 ‘Music’의 기본 ACL을 확인합니다.
[root@linux ~]# getfacl Music/ # file: Music/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::rw-
기본 ACL 설정 후
특정 파일이나 디렉토리의 기본 ACL을 설정하려면 ‘setfacl’ 명령을 사용하십시오. 아래 예에서는 ‘setfacl’ 명령을 사용하여 ‘Music’ 폴더에 새 ACL(읽기 및 실행)을 설정합니다.
[root@linux ~]# setfacl -m d:o:rx Music/ [root@linux ~]# getfacl Music/ # file: Music/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::r-x
새 ACL 설정 방법
파일 또는 디렉토리에 대해 설정하거나 수정하려면 ‘setfacl’ 명령을 사용합니다. 예를 들어 사용자 ‘tecmint1’에게 ‘읽기’ 및 ‘쓰기’ 권한을 부여하려면 다음과 같이 입력합니다.
# setfacl -m u:tecmint1:rw /tecmint1/example
ACL 보기 방법
‘getfacl’ 명령을 사용하여 파일이나 디렉토리의 ACL을 확인할 수 있습니다. 예를 들어 ‘tecmint1/example’에서 ACL을 확인하려면 다음 명령을 사용합니다.
# getfacl /tecmint1/example # file: tecmint1/example/ # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
ACL 제거 방법
파일/디렉토리에서 ACL을 제거하려면 아래와 같이 ‘x’ 및 ‘b’ 옵션을 사용합니다.
# setfacl -x ACL file/directory # remove only specified ACL from file/directory. # setfacl -b file/directory #removing all ACL from file/direcoty
다음 시나리오에 ACL을 적용해 봅시다.
공통 보조 그룹 ‘acl’을 가진 두 사용자(tecmint1 및 tecmint2)가 있습니다. ‘tecmint1’이 소유한 디렉토리를 만들고 해당 디렉토리에서 ‘tecmint2’에게 ‘읽기’ 및 ‘실행’ 권한을 부여하겠습니다.
단계 1: 두 사용자를 만들고 두 사용자의 암호를 제거합니다.
[root@linux ~]# for user in tecmint1 tecmint2 > do > useradd $user > passwd -d $user > done Removing password for user tecmint1. passwd: Success Removing password for user tecmint2. passwd: Success
단계 2: 그룹 및 사용자를 보조 그룹에 만듭니다.
[root@linux ~]# groupadd acl [root@linux ~]# usermod -G acl tecmint1 [root@linux ~]# usermod -G acl tecmint2
단계 3: 디렉토리 ‘tecmint’를 만들고 소유권을 ‘tecmint1’로 변경합니다.
[root@linux ~]# mkdir /tecmint1 [root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/ drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1 getfacl: Removing leading '/' from absolute path names # file: tecmint1 # owner: tecmint1 # group: root user::rwx group::r-x other::r-x
단계 4: ‘tecmint1’로 로그인하고 ‘tecmint’ 폴더에서 디렉토리를 만듭니다.
[tecmint@linux ~]$ su - tecmint1 Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/ [tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll total 4 drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami tecmint1
단계 5: 이제 ‘setfacl’을 사용하여 ACL을 설정하여 ‘tecmint1’에는 모든 rwx 권한이 있고, ‘tecmint2’에는 ‘example’ 폴더에서 읽기 권한만 있도록 설정하고 다른 사용자는 권한이 없도록 설정합니다.
$ setfacl -m u:tecmint1:rwx example/ $ setfacl -m u:tecmint2:r-- example/ $ setfacl -m other:--- example/ $ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::r-x mask::rwx other::---
단계 6: 이제 다른 사용자인 ‘tecmint2’로 다른 터미널에 로그인하고 ‘tecmint1’ 디렉토리로 이동합니다. 이제 ‘ls’ 명령어를 사용하여 내용을 볼 수 있으며 디렉토리를 변경하고 차이를 확인하세요.
[tecmint@linux ~]$ su - tecmint2 Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/ [tecmint2@linux tecmint1]$ ls -lR example/ example/: total 0
[tecmint2@linux tecmint1]$ cd example/ -bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
단계 7: ‘example’ 폴더에서 ‘tecmint2’에게 실행 권한을 부여한 후 ‘cd’ 명령어를 사용하여 효과를 확인하세요. 이제 ‘tecmint2’는 보기 및 디렉토리 변경 권한을 가지지만 쓰기 권한이 없습니다.
[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/ [tecmint1@linux tecmint1]$ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-x group::rwx mask::rwx other::---
[tecmint@linux ~]$ su - tecmint2 Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/ [tecmint2@linux tecmint1]$ cd example/ [tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test touch: cannot touch ‘test’: Permission denied
참고: ACL을 적용한 후 ‘ls -l’ 출력에 추가 ‘ +’ 기호가 나타납니다.
[root@linux tecmint1]# ll total 4 drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
참조 링크
Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/