새로 생성된 모든 폴더와 파일이 이 기본 권한을 갖도록 폴더 내에 기본 권한을 설정하고 싶습니다.
그래서 제가 좀 조사해본 결과 제가 찾은 최고의 스레드는 다음과 같습니다.이것.
그래서 저는 이 작은 "테스트"를 생각해 냈습니다.
#!/bin/bash
# setup folder
rm -rf ./test
mkdir ./test
cd ./test
# Reset all files/folders
sudo chmod -R 0000 ./ # delete all permissions
sudo chmod -R -st ./ # remove all special bits
sudo setfacl -Rdx u::,g::,o:: ./ # remove all default user/group permissions
# set new permissions and ownership
sudo chown -R christopher:users ./ # Set user and group for all files/folders
sudo chmod -R 550 ./ # set default permissions to all files/folders
sudo chmod 750 ./ # set folder main permission
sudo setfacl -d -m u::rx ./ # set user default permission (same as 550)
sudo setfacl -d -m g::rx ./ # set group default permission (same as 550)
# test the default permissions
nano myFile # write some data in it and save
이제 테스트하고 싶습니다.
먼저 getfacl ./
이 출력을 생성하는 내용은 다음과 같습니다.
# file: .
# owner: christopher
# group: users
user::rwx
group::r-x
other::---
default:user::r-x
default:group::r-x
default:other::---
getfacl ./myFile
그 후 다음 출력 도 시도했습니다 .
# file: myFile
# owner: christopher
# group: users
user::r--
group::r--
other::---
이것은 분명히 작동하지 않으므로 두 가지 질문이 있습니다.
- 내가 뭘 잘못했나요? 새로 생성된 파일에는
myFile
setfacl 명령에 지정된 대로 r-xr-x--- 권한이 있어야 합니다. 그렇다면 왜 그렇지 않습니까? - SUID/GUID/OUID 플래그(sst)를 설정해도 작동하지 않습니다. 그러나 정의에 따르면 어떻게 사용하는지 잘 모르겠습니다
set the SUID or GUID flag on a folder will inherit its own permission to new created files within the folder
. 정말 허가가 있는 걸까요? 아니면 소유자 사용자/그룹만 해당됩니까? - 어쩌면 내 작은 스크립트를 수정하는 데 도움을 줄 수 있을 것입니다. 하지만 이렇게 하면 새로 생성된 폴더에 대한 기본 권한과 새로 생성된 파일에 대한 기본 권한이 서로 다르게 필요하다는 문제가 여전히 남아 있습니다. 새로 생성된 폴더는 항상 550개의 권한을 받아야 하고 새로 생성된 파일은 항상 440개의 권한을 받아야 하기 때문입니다. 다음과 같은 명령을 구별할 수 있습니다
find -type
. 따라서find ./ -type d -exec chmod 550 {} \;
모든 폴더에 대한 권한을 한 번에 550으로 설정하는 등의 작업을 수행할 수 있습니다 . (type f
파일과 유사). 그러나 이는 생성되어 존재하는 폴더/파일에만 적용됩니다. 하지만 새로 생성된 폴더와 파일에 대한 일부 "기본" 권한이 필요하지만 두 가지 모두에 대해 별도로 기본 권한이 필요합니다.
답변1
기본 ACL에 의해 설정된 권한은 파일을 생성한 프로그램에서 제공하는 모드에 의해 재정의됩니다. 일반적으로 일반 파일을 생성하는 프로그램은 권한을 설정하고 0666
(즉, 실행 비트 없음) 핸들이 umask
그룹을 제거하고 다른 모든 사람이 액세스할 수 있도록 허용합니다. 디렉토리의 경우 모드는 일반적 0777
으로 x 비트가예종종 필요하기 때문입니다.
"개인" 파일(예: SSH 키)을 생성하는 프로그램은 0600
사용자 자신 외에는 누구도 액세스할 수 없도록 권한을 지정합니다.
이것수동acl(5)
설명하다:
객체 생성 및 기본 ACL
- 모드 매개변수에 지정된 권한에 포함되지 않은 권한이 포함되지 않도록 파일 권한 비트에 해당하는 액세스 ACL 항목을 수정합니다.
따라서 ACL은 u::
파일 사용자의 공통 권한 비트에 해당하므로 권한은 생성 프로그램이 제공하는 내용에 의해 가려집니다. (어떤 의미에서는 기본 ACL이 umask를 대체하는 것 같습니다.) 디렉토리를 생성하면 x
원하는 비트가 얻어지는 것을 볼 수 있을 것 같습니다 .
기술적으로 이는 ACL 항목에 영향을 주지 않습니다.특정한와 같은 사용자 u:foo:rwx
이지만 ACL 마스크로 제한됩니다. 이 마스크는 기존 그룹 권한 비트에 해당하며 위에서 인용한 규칙이 이 마스크에도 적용되는 것으로 나타나 ACL 마스크가 파일 생성 시 설정된 그룹 권한 비트에 의해 제한됩니다.
해 보자:
$ mkdir dir ; chmod 750 dir ; setfacl -d -m u::rx -m g::rx -m u:foo:rwx dir
$ touch dir/file ; mkdir dir/subdir
생성된 파일에는 x 비트가 마스크되어 있습니다( getfacl
비트 세트는 마스킹이 적용된 후 유효한 값과 함께 여기에 표시됩니다).
$ getfacl dir/file
user::r--
user:foo:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::---
하지만 디렉토리에는 없습니다.
$ getfacl dir/subdir/
user::r-x
user:foo:rwx
group::r-x
mask::rwx
...
이는 (1)과 (3)에 대한 답이 될 수 있습니다. (2)의 경우: IIRC,설정-bit()를 사용하면 g+s
해당 디렉터리에 생성된 새 파일이 상속됩니다.그룹디렉터리(스키마 아님). 고정 비트( )는 귀하에게 속하지 않은 파일의 삭제를 제어하며 실제로 setuid bit()가 디렉토리에서 무엇을 하는지 +t
모릅니다 .u+s