웹사이트 검색

Linux에서 ACL(액세스 제어 목록)을 사용하여 파일/디렉터리 보안


시스템 관리자로서 우리의 최우선 순위는 무단 액세스로부터 데이터를 보호하고 보호하는 것입니다. 우리 모두는 chmod, chown, chgrp… 등과 같은 몇 가지 유용한 Linux 명령을 사용하여 설정한 권한을 알고 있습니다. 그러나 이러한 기본 권한은 세트에는 약간의 제한이 있으며 때로는 필요에 따라 작동하지 않을 수도 있습니다. 예를 들어, 동일한 디렉터리나 파일에 대해 서로 다른 사용자에 대해 서로 다른 권한 집합을 설정할 수 없습니다. 따라서 액세스 제어 목록(ACL)이 구현되었습니다.

'tecmint1', 'tecmint2' 및 'tecmint3' 세 명의 사용자가 있다고 가정해 보겠습니다. 공통 그룹을 갖는 각 그룹은 'acl'이라고 말합니다. 사용자 'tecmint1'은 'tecmint2' 사용자만 ' 소유의 파일을 읽고 액세스할 수 있기를 원합니다. tecmint1'이며 다른 누구도 이에 액세스할 수 없습니다.

ACL(액세스 제어 목록)을 사용하면 동일한 트릭을 수행할 수 있습니다. 이러한 ACL을 사용하면 사용자, 그룹 및 사용자의 그룹 목록에 없는 모든 사용자 그룹에 권한을 부여할 수 있습니다.

참고: Redhat 제품 설명서에 따라 ext3 파일 시스템 및 NFS로 내보낸 파일 시스템에 대한 ACL 지원을 제공합니다.

Linux 시스템에서 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 서버에서 NSF 서버가 내보낸 파일 시스템이 ACL을 지원하고 NFS 클라이언트가 ACL을 읽을 수 있는 경우 ACL은 클라이언트 시스템에서 활용됩니다.

NFS 공유에서 ACL을 비활성화하려면 NFS 서버의 '/etc/exportfs' 파일에 "no_acl" 옵션을 추가해야 합니다. NSF 클라이언트 측에서 다시 비활성화하려면 마운트 중에 “no_acl” 옵션을 사용하십시오.

Linux 시스템에서 ACL 지원을 구현하는 방법

ACL에는 두 가지 유형이 있습니다.

  1. 액세스 ACL: 액세스 ACL은 모든 파일이나 디렉터리에 대한 권한을 부여하는 데 사용됩니다.
  2. 기본 ACL: 기본 ACL은 특정 디렉터리에 대한 액세스 제어 목록을 부여/설정하는 데만 사용됩니다.

액세스 ACL과 기본 ACL의 차이점:

  1. 기본 ACL은 디렉터리 수준에서만 사용할 수 있습니다.
  2. 해당 디렉터리 내에 생성된 모든 하위 디렉터리나 파일은 상위 디렉터리에서 ACL을 상속합니다. 반면에 파일은 기본 ACL을 액세스 ACL로 상속합니다.
  3. 기본 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'읽기실행)을 설정합니다. 강하다>.

[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을 보는 방법

모든 파일이나 디렉터리에서 ACL을 보려면 'getfacl' 명령을 사용하세요. 예를 들어, '/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을 구현해 보겠습니다.

두 명의 사용자(tecmint1tecmint2), 둘 다 'acl'이라는 공통 보조 그룹을 가지고 있습니다. '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'에 '실행' 권한을 부여한 다음 < Strong>'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

참조 링크

ACL 문서