사용자에게 다른 사용자 디렉토리에서 파일 쓰기 및 읽기를 생성할 수 있는 기능을 제공하고 싶지만 생성 후 파일을 삭제할 수 있는 옵션은 없습니다(여기서는 고정 비트가 작동하지 않습니다...). 예를 들면 다음과 같습니다.
manager
디렉터리에 사용자가 있습니다 . 기록해야 하지만 삭제할 수 없는 파일이 repository
있습니다 . 기록 해야 하지만 삭제할 수 없는 파일이 있습니다. 기록해야 하지만 삭제할 수 없는 파일이 있습니다. 파일 삭제worker1
/manager/repository
worker2
/manager/repository
worker3
/manager/repository
그러나 worker 1-2-3
파일이 생성된 후에는 삭제할 수 없으며 생성된 파일만 삭제할 manager
수 root
있습니다 worker 1-2-3
.
나는 끈끈한 비트를 적용하기 위한 몇 가지 기술을 시도했지만 성공하지 못했습니다 chown
.chmod
답변1
Windows와 달리 Unix/Linux에서는 명확한 삭제 권한이 없습니다. 파일을 삭제(또는 생성 또는 이름 변경)할 수 있는 권한은 포함된 디렉터리에 연결되어 있습니다. 작업자의 쓰기 권한을 제거 /manager/repository/
하여 작업자가 파일을 생성, 삭제 및 이름을 바꾸는 기능을 거부합니다.
파일 생성을 허용하지만 삭제를 거부하는 것은 불가능합니다.
답변2
먼저 시스템에서 ACL이 활성화되어 있는지 확인한 후 이 명령을 실행하십시오.
setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository
어떻게 작동하나요?
이 명령은 디렉토리 소유자에게 읽기, 쓰기 및 실행 권한을 부여합니다
/manager/repository
.worker1
,worker2
및 에 대한 모든 권한이 취소됩니다worker3
.이렇게 하면 다른 사용자에게 읽기 및 쓰기 액세스가 제공되지만 삭제 액세스는 거부됩니다.
에서 man setfacl
:
-d, --default
All operations apply to the Default ACL.
-R, --recursive
Apply operations to all files and directories recursively.
-m, --modify
Options to modify the ACL of a file or directory.
답변3
권한을 사용하여 이를 수행하려면 NFSv4 ACL과 유사한 ACL을 지원하는 시스템이 필요합니다. 예를 들어, FreeBSD에서 이 플래그를 사용하여 파일 시스템을 마운트하면 nfsv4acls
다음을 수행할 수 있습니다:
mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir
분명히부정적인delete_child
그룹 구성원에게 부여된 권한입니다 worker-group
.
그러나 작업자는 자신이 만든 파일의 소유자가 되므로 계속 ACL을 수정할 수 있으며 자신에게 권한을 부여하면 해당 권한이 상위 디렉터리의 권한 delete
보다 우선하게 됩니다. delete_child
이 문제를 해결할 방법이 있는지 확실하지 않습니다(적어도 FreeBSD의 UFS 파일 시스템에서는). 예를 들어 다음과 같이 할 수 있습니다.
$ touch file
$ rm -f file
rm: file: Operation not permitted
$ setfacl -m owner@:d::allow file
$ rm -f file
$
답변4
폴더에서 쓰기 권한을 얻으세요 /manager/repository
. 따라서 루트가 아닌 모든 사용자는 그 안에 있는 파일을 쓰거나 삭제할 수 있지만 /manager/repository
디렉터리에 있는 파일은 삭제할 수 없습니다.
chmod 755 /manager/repository