액세스 제어 목록 (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:"

위 명령이 파일 시스템이 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

이제 /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

지금까지는 좋습니다. 그러나 개발자 그룹에 없는 다른 사용자에게 /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

다음으로, 다른 사용자들에게 /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 출력의 차이를 주목하세요:

특정 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

마지막으로 다음 명령을 실행하여 할당량을 초기화하고 활성화하십시오:
# 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)의 디스크 공간 사용량을 설정합니다.
이 사용자가 생성할 수 있는 파일 수에 대한 소프트 및 하드 제한으로 20과 25를 설정할 수도 있습니다.
위 명령은 이전에 언급된 제한을 설정할 수 있는 임시 파일로 텍스트 편집기 ($EDITOR)를 실행합니다:

이러한 설정은 사용자 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

파일 쓰기 작업이 디스크 할당량을 초과하여 실패했습니다. 디스크에는 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/