파일에 대한 읽기 및 쓰기 권한을 부여하지만 삭제하지는 않는 방법

파일에 대한 읽기 및 쓰기 권한을 부여하지만 삭제하지는 않는 방법

사용자에게 다른 사용자 디렉토리에서 파일 쓰기 및 읽기를 생성할 수 있는 기능을 제공하고 싶지만 생성 후 파일을 삭제할 수 있는 옵션은 없습니다(여기서는 고정 비트가 작동하지 않습니다...). 예를 들면 다음과 같습니다.

manager 디렉터리에 사용자가 있습니다 . 기록해야 하지만 삭제할 수 없는 파일이 repository
있습니다 . 기록 해야 하지만 삭제할 수 없는 파일이 있습니다. 기록해야 하지만 삭제할 수 없는 파일이 있습니다. 파일 삭제worker1/manager/repository
worker2/manager/repository
worker3/manager/repository

그러나 worker 1-2-3파일이 생성된 후에는 삭제할 수 없으며 생성된 파일만 삭제할 managerroot있습니다 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

관련 정보