생성된 파일을 다른 사람이 읽을 수 없도록 하는 것이 가능한가요?

생성된 파일을 다른 사람이 읽을 수 없도록 하는 것이 가능한가요?

사용자 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.aclumask 값이 로 설정되어 있어도 기타 액세스 비트가 지워집니다 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일반적으로 훌륭한,아치 위키 페이지이 주제에 대해.

관련 정보