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


액세스 제어 목록 (ACL이라고도 함)은 일반 ugo/rwx 권한으로 지정된 것보다 파일 및 디렉토리에 대해 더 세분화 된 액세스 권한을 정의 할 수있는 Linux 커널의 기능입니다.

예를 들어 표준 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에 변경 사항을 저장 한 후 시스템을 재부팅하십시오.

Linux에서 ACL 소개

ACL의 작동 방식을 설명하기 위해 개발자라는 그룹을 사용하고 사용자 walterwhite 및 saulgoodman (예, 저는 Breaking Bad 팬입니다!)을 여기에 추가합니다. :

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

계속하기 전에 두 사용자가 모두 개발자 그룹에 추가되었는지 확인하겠습니다.

# id walterwhite
# id saulgoodman

이제/mnt에 test라는 디렉토리를 만들고 (/mnt/test/acl.txt) 안에 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에 walterwhite 또는 saulgoodman으로 쓸 수 있습니다.

# 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이없는 경우 상위 디렉토리의 기본 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 사용에 대한 자세한 내용과 예제는 openSUSE 보안 가이드의 10 장 섹션 2를 참조하십시오 (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 바이트 = 1MB)을 만듭니다.

이 사용자가 만들 수있는 파일 수에 대한 소프트 및 하드 제한으로 20 및 25로 제한 할 수도 있습니다.

위의 명령은 앞에서 언급 한 제한을 설정할 수있는 임시 파일이있는 텍스트 편집기 ()를 시작합니다.

이러한 설정으로 인해 gacanepa 사용자가 7 일의 기본 유예 기간 동안 900 블록 또는 20 노드 제한에 도달하면 경고가 표시됩니다.

그 때까지 할당량 초과 상황이 제거되지 않은 경우 (예 : 파일 제거) 소프트 제한이 하드 제한이되고이 사용자는 더 많은 저장 공간을 사용하거나 더 많은 파일을 만들 수 없습니다.

테스트를 위해 gacanepa 사용자가/home/backups 내에 test1이라는 이름의 빈 2MB 파일을 만들도록하겠습니다.

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1

보시다시피 디스크 할당량이 초과되어 쓰기 작업 파일이 실패합니다. "처음 1000KB 만 디스크에 기록되므로이 경우 결과는 손상된 파일 일 가능성이 큽니다.

마찬가지로 해당 그룹의 구성원에게/home/projects에 대한 rwx 액세스 권한을 부여하기 위해 개발자 그룹에 대한 ACL을 만들 수 있습니다.

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

다음으로 할당량 제한을 설정합니다.

# edquota -g developers

이전에 gacanepa 사용자에게했던 것처럼.

유예 기간은 실행하여 초, 분, 시간, 일, 주 또는 개월 수로 지정할 수 있습니다.

# edquota -t

및 블록 유예 기간 및 Inode 유예 기간의 값을 업데이트합니다.

블록 또는 inode 사용 (사용자 또는 그룹 기준으로 설정 됨)과 달리 유예 기간은 시스템 전체에 설정됩니다.

할당량을보고하려면 할당량 -u [user] 또는 quota -g [group] 를 빠른 목록으로 사용하거나 repquota -v [/ path/to / filesystem] 은보다 상세하고 (상세) 형식이 좋은 보고서입니다.

물론 [user] , [group] [/ path/to/filesystem] 을 특정 사용자 /로 바꾸고 싶을 것입니다. "확인하려는 그룹 이름 및 파일 시스템.

요약

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

할당량에 대해 자세히 알아 보려면 Linux 문서 프로젝트의 Quota Mini-HowTo를 참조하세요.

말할 필요도없이, 질문에 대한 답변을 저희에게 맡기실 수 있습니다. 아래 의견 양식을 사용하여 제출하시면 기꺼이 살펴 보겠습니다.