사용자 및 그룹을 위한 액세스 제어 목록 (ACL) 및 디스크 할당량 설정하는 방법

액세스 제어 목록 (ACLs로도 알려짐)은 리눅스 커널의 기능으로, 일반 ugo/rwx 권한으로 지정된 파일 및 디렉토리에 대해 더 세분화된 액세스 권한을 정의할 수 있게 합니다.

예를 들어, 표준 ugo/rwx 권한은 다른 개별 사용자나 그룹에 대해 다른 권한을 설정할 수 없습니다. ACL을 사용하면 이를 비교적 쉽게 할 수 있습니다. 이를 이 기사에서 살펴보겠습니다.

ACL을 사용한 파일 시스템 호환성 확인

파일 시스템이 현재 ACL을 지원하는지 확인하려면 acl 옵션을 사용하여 마운트되었는지 확인해야 합니다. 이를 위해 ext2/3/4 파일 시스템에 대해 아래에 표시된대로 tune2fs를 사용할 것입니다. 확인하려는 장치나 파일 시스템으로 /dev/sda1을 대체하세요:

# tune2fs -l /dev/sda1 | grep "Default mount options:"

참고: XFS에서는 액세스 제어 목록이 기본적으로 지원됩니다.

다음 ext4 파일 시스템에서, /dev/xvda2에 대해 ACL이 활성화되어 있는 것을 볼 수 있습니다:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"
Check ACL Enabled on Linux Filesystem

위 명령이 파일 시스템이 ACL을 지원하는 상태로 마운트되었음을 나타내지 않는다면, /etc/fstab에 noacl 옵션이 있는 것이 가장 가능성이 높습니다.

이 경우, 해당 옵션을 제거하고 파일 시스템을 마운트 해제한 후 다시 마운트하거나, /etc/fstab에 변경 사항을 저장한 후 시스템을 다시 부팅하십시오.

리눅스에서 ACL 소개

ACL이 작동하는 방법을 설명하기 위해 개발자라는 그룹을 사용하고 사용자 월터 화이트솔 굿맨을 추가합니다(네, 저는 브레이킹 배드 팬입니다!):

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

계속하기 전에 두 사용자가 모두 개발자 그룹에 추가되었는지 확인합시다:

# id walterwhite
# id saulgoodman
Find User ID in Linux

이제 /mnt테스트라는 디렉토리를 만들고 그 안에 /mnt/test/acl.txt라는 파일을 만듭니다.

그런 다음 그룹 소유자를 개발자로 설정하고 기본 ugo/rwx 권한을 770(따라서 파일의 소유자와 그룹 소유자에게 읽기, 쓰기 및 실행 권한이 부여됩니다)로 재귀적으로 변경합니다:

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

/mnt/test/acl.txt월터 화이트 또는 솔 굿맨으로써 쓸 수 있다고 예상대로:

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit
Verify ACL Rules on Users

지금까지는 좋습니다. 그러나 개발자 그룹에 없는 다른 사용자에게 /mnt/test/acl.txt에 쓰기 액세스 권한을 부여해야 할 때 문제가 발생할 것입니다.

표준 ugo/rwx 권한은 새로운 사용자가 개발자 그룹에 추가되어야 함을 요구하지만, 이는 해당 사용자에게 그룹이 소유한 모든 객체에 대한 동일한 권한을 부여하게 됩니다. 이것이 바로 ACL이 유용한 곳입니다.

Linux에서 ACL 설정

ACL에는 두 가지 유형이 있습니다: 파일이나 디렉토리에 적용되는 액세스 ACL과 디렉토리에만 적용할 수 있는 기본(옵션) ACL입니다.

디렉터리 내에 기본 ACL이 설정된 경우 파일에 별도의 ACL이 없으면 해당 파일은 부모 디렉터리의 기본 ACL을 상속받습니다.

사용자 gacanepa에게 /mnt/test/acl.txt에 대한 읽기 및 쓰기 액세스 권한을 부여합시다. 이를 수행하기 전에 해당 디렉터리의 현재 ACL 설정을 확인하겠습니다:

# getfacl /mnt/test/acl.txt

그런 다음 파일의 ACL을 변경하고, 사용자 이름 다음에 u:를 사용하고 :rw를 사용하여 읽기/쓰기 권한을 나타냅니다:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

그런 다음 파일에서 getfacl을 다시 실행하여 비교합니다. 다음 이미지는 “이전”“이후”를 보여줍니다:

# getfacl /mnt/test/acl.txt
Set ACL on Linux Users

다음으로, 다른 사용자들에게 /mnt/test 디렉터리에서 실행 권한을 부여해야 합니다:

# chmod +x /mnt/test

디렉터리의 내용에 액세스하려면 일반 사용자가 해당 디렉터리에 실행 권한이 필요합니다.

사용자 gacanepa는 이제 파일에 쓸 수 있어야 합니다. 해당 사용자 계정으로 전환하여 다음 명령을 실행하여 확인합니다:

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

디렉터리에 기본 ACL을 설정하려면 (내용은 덮어쓰지 않는 한 상속되는) 규칙 앞에 d:를 추가하고 파일 이름 대신 디렉터리를 지정합니다:

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

위의 ACL은 소유 그룹에 속하지 않은 사용자가 /mnt/test 디렉터리의 미래 내용에 대한 읽기 액세스를 허용합니다. 변경 전후의 getfacl /mnt/test 출력의 차이를 주목하세요:

Set Default ACL to Linux Directory

특정 ACL을 제거하려면 위 명령에서 -m-x로 대체하십시오. 예를 들어,

# setfacl -x d:o /mnt/test

대신, -b 옵션을 사용하여 모든 ACL을 한 번에 제거할 수도 있습니다:

# setfacl -b /mnt/test

ACL 사용에 대한 자세한 정보 및 예제는 chapter 10, section 2, openSUSE Security Guide에서 확인할 수 있습니다 (PDF 형식으로 무료 다운로드 가능).

사용자 및 파일 시스템에 Linux 디스크 할당량 설정

저장 공간은 신중하게 사용하고 모니터링해야 하는 또 다른 자원입니다. 이를 위해 파일 시스템 기준으로 할당량을 설정할 수 있으며, 개별 사용자나 그룹에 대해 설정할 수 있습니다.

따라서 특정 사용자나 특정 그룹에 대해 허용된 디스크 사용량 제한이 설정되며, 부주의한(또는 악의적인) 사용자로 인해 디스크가 가득 차지 않도록 안심할 수 있습니다.

파일 시스템에 할당량을 활성화하려면 먼저 /etc/fstab에 usrquota 또는 grpquota(각각 사용자 및 그룹 할당량) 옵션으로 마운트해야 합니다.

예를 들어, /dev/vg00/vol_backups에 대해 사용자 기반 할당량을 활성화하고 /dev/vg00/vol_projects에 대해 그룹 기반 할당량을 활성화합시다.

UUID가 각 파일 시스템을 식별하는 데 사용됨에 유의하십시오.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

두 파일 시스템을 마운트 해제하고 다시 마운트하십시오:

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

그런 다음 usrquota 및 grpquota 옵션이 mount 출력에 있는지 확인하십시오 (아래 강조 표시된 부분 참조):

# mount | grep vg00
Check Linux User Quota and Group Quota

마지막으로 다음 명령을 실행하여 할당량을 초기화하고 활성화하십시오:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

그렇다면, 이제 이전에 언급한 사용자 이름과 그룹에 할당량을 지정합시다. 나중에 quotaoff로 할당량을 비활성화할 수 있습니다.

Linux 디스크 할당량 설정

먼저 사용자 gacanepa에 대한 /home/backups에 ACL을 설정하여 해당 디렉토리에서 읽기, 쓰기 및 실행 권한을 부여합시다:

# setfacl -m u:gacanepa:rwx /home/backups/

그런 다음,

# edquota -u gacanepa

소프트 제한=900과 하드 제한=1000 블록 (1024 바이트/블록 * 1000 블록 = 1024000 바이트 = 1 MB)의 디스크 공간 사용량을 설정합니다.

이 사용자가 생성할 수 있는 파일 수에 대한 소프트 및 하드 제한으로 2025를 설정할 수도 있습니다.

위 명령은 이전에 언급된 제한을 설정할 수 있는 임시 파일로 텍스트 편집기 ($EDITOR)를 실행합니다:

Linux Disk Quota For User

이러한 설정은 사용자 gacanepa가 기본 우대 기간인 7일 동안 900 블록 또는 20 inode 제한에 도달했을 때 경고가 표시됩니다.

그 때까지 (예: 파일 제거로) “할당량 초과” 상황이 해결되지 않으면 소프트 제한이 하드 제한이 되어 이 사용자는 더 많은 저장 공간을 사용하거나 더 많은 파일을 생성할 수 없게 됩니다.

테스트를 위해 사용자 gacanepa가 /home/backups 내에 이름이 test1인 빈 2 MB 파일을 생성하도록 시도해 봅시다:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1
Verify Linux User Quota on Disk

파일 쓰기 작업이 디스크 할당량을 초과하여 실패했습니다. 디스크에는 1000 KB까지만 기록되므로, 이 경우 파일이 손상될 가능성이 높습니다.

마찬가지로, 개발자 그룹에 대한 ACL을 생성하여 해당 그룹 멤버에게 /home/projects에 대한 rwx 액세스를 부여할 수 있습니다:

# setfacl -m g:developers:rwx /home/projects/

그리고 이를 사용하여 할당량 제한을 설정할 수 있습니다:

# edquota -g developers

이전에 사용자 gacanepa와 같이 수행한 것처럼요.

허용 기간은 실행하여 초, 분, 시간, 일, 주 또는 월의 어떤 숫자로 지정할 수 있습니다.

# edquota -t

그리고 블록 허용 기간 및 아이노드 허용 기간 아래의 값을 업데이트하세요.

사용자 또는 그룹별로 설정되는 블록이나 아이노드 사용과 달리, 허용 기간은 시스템 전반에 적용됩니다.

할당량을 보고 싶다면, 빠른 목록을 위해 quota -u [사용자] 또는 quota -g [그룹]을 사용하거나 더 자세하고 읽기 쉬운 보고서를 위해 repquota -v [/파일시스템/경로]를 사용하세요.

물론, 확인하려는 특정 사용자/그룹 이름 및 파일 시스템 경로로 [사용자], [그룹], [/파일시스템/경로]를 대체해야 합니다.

요약

이 문서에서는 사용자 및 그룹에 대한 접근 제어 목록 및 디스크 할당량 설정 방법을 설명했습니다. 이를 모두 사용하면 권한 및 디스크 사용량을 효과적으로 관리할 수 있습니다.

만약 할당량에 대해 더 알고 싶다면, Linux 문서 프로젝트에서 할당량 미니 설명서를 참조하십시오.

물론, 질문이 있으면 우리에게 맡기십시오. 아래의 댓글 양식을 사용하여 제출하면 기꺼이 살펴보겠습니다.

Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/