사용자 uid=1000 및 guids=1000,33,277이 폴더에 파일을 생성할 수 있다고 가정합니다 /files/
. 이 사용자가 다른 사람이 파일을 읽도록 허용하지 못하게 하는 방법이 있습니까(적어도 그룹 1000, 33 또는 277에서는 제외)?
생성된 파일을 /files/user1000.file
다음과 같이 구체적으로 질문할 수 있습니다.
이런 결과를 피할 수 있는 방법이 있나요?ls /files/user1000.file -al
-rw-rw-r-- 1 1000 1000 6 May 15 17:21 user1000.file
그리고 이것을 다음으로 바꾸세요:
-rw-rw---- 1 1000 1000 6 May 15 17:21 user1000.file
어쩌면 사용할까요 umask
? 나는 setgid 같은 것이 있다는 것을 알고 있으므로 drw-rws---
방법이 있을 것이라고 낙관합니다.
나는 그것이 사용자가 이것을 하기로 결정했는지 여부에 달려 있다고 생각합니다 chmod o+rw user1000.file
.
답변1
문제에는 약간 다른 시나리오를 다루는 두 가지 가능한 솔루션이 있습니다.
첫 번째는 사용할 것입니다umask
. 이것마스크커널에 액세스 비트를 알려주는 값입니다.분명한새로 생성된 파일에서(이것은 주로 open(2)
시스템 호출에 영향을 미칩니다. 새로 생성된 파일을 creat(2)
명시적으로 호출하여 umask 값을 통해 액세스 비트를 "금지"로 설정할 수 있습니다 ). chmod(2)
따라서 umask를 로 설정하면 0
파일을 생성한 프로그램에서 요청한 모든 액세스 비트가 설정됩니다. 로 설정되면 04777
모든 비트가 클리어됩니다.
대부분의 경우 기본 umask 값은 입니다 022
. 이는 그룹과 다른 모든 사람에 대한 쓰기 권한이 지워짐을 의미합니다.
따라서 문제를 해결하려면 umask 값을 로 설정하면 027
생성된 모든 파일이 그룹의 쓰기 액세스 권한을 제거하고 다른 파일의 모든 비트를 지울 수 있습니다.
$ umask
022
$ touch testfile.022
$ ls -l testfile.022
-rw-r--r-- 1 user user 0 May 15 18:56 testfile.022
$ umask 027
$ touch testfile.027
$ ls -l testfile.027
-rw-r----- 1 user user 0 May 15 18:57 testfile.027
umask
시작하는 모든 셸에서 이를 설정하려면 셸의 시작 파일 중 하나( ~/.profile
또는 ~/.bashrc
시작하기 좋은 위치) 에 적절한 호출을 넣으세요 .
또 다른 접근 방식은 이러한 비트를 지우려는 디렉터리에서 기본 ACL(액세스 제어 목록)을 사용하는 것입니다. 첫째, 디렉터리 수준 에서 더 세분성을 추가하고 umask
, 둘째, 모든 사람에게 적용됩니다(전역 값을 변경할 필요가 없습니다 umask
).
$ umask
022
$ mkdir acldir
$ cd acldir
$ getfacl .
# file .
# owner: user
# group: user
user::rwx
group::r-x
other::r-x
$ ls -la
total 12
drwxr-xr-x 2 user user 6 May 15 19:11 .
drwxr-xr-x 83 user user 8192 May 15:19:08 ..
$ touch testfile.noacl
$ ls -l testfile.noacl
-rw-r--r-- 1 user user 0 May 15 19:14 testfile.noacl
$ setfacl -m 'user::rwx,group::r-x,other::---' .
$ setfacl -d -m 'user::rwx,group::r-x,other::---' .
# file: .
# owner: user
# group: user
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:other::---
$ touch testfile.acl
$ ls -l testfile.acl
-rw-r----- 1 user user 0 May 15 19:16 testfile.acl
보시다시피 기본 ACL을 사용하면 testfile.acl
umask 값이 로 설정되어 있어도 기타 액세스 비트가 지워집니다 022
.
ACL에 대해 더 자세히 알아보려면 다음을 확인하세요.액세스 제어 목록(5)맨 페이지.
편집하다:파일 소유자가 파일에서 명시적으로 작업하는 것을 방지하려면 chown(2)
표준을 준수하는 방식으로는 불가능하다고 생각합니다(POSIX에 관한 한). ). 시스템 호출을 가로채고 필터링할 수 있지만 추가 구성이 필요한 여러 보안 프레임워크가 있습니다. 그 중 일부는 다음과 같습니다:
- SELinux(아직 사용하지 않았지만 꽤 일반적으로 사용 가능함. 예를 들어 RedHat에서 기본적으로 사용함)
- RSBAC(무거운구성 비용은 저렴하지만 특정 사용자가 수행할 수 있는 작업과 수행할 수 없는 작업을 매우 세밀하게 제어할 수 있습니다.
- AppArmor (우분투가 이것을 사용한다고 생각합니다)
답변2
네, 아주 쉽게 할 수 있습니다. umask
기본값 을 설정하기 만 하면 됩니다 ~/.profile
(또는 /etc/profile
모든 사용자에 대해 기본값을 변경하려는 경우).
umask 0007
이렇게 하면 필요에 따라 새 파일이 생성됩니다.
$ touch user1000.file
$ ls -l user1000.file
-rw-rw---- 1 terdon terdon 0 May 15 18:56 user1000.file
이에 대한 자세한 내용은 umask
일반적으로 훌륭한,아치 위키 페이지이 주제에 대해.