파일을 읽고 쓸 수있는 권한을 부여하는 방법


12

다른 사용자 디렉토리에 파일을 쓰고 읽을 수있는 기능을 제공하고 싶지만 생성 후 파일을 삭제할 수있는 옵션이 없습니다 (스티커 비트가 작동하지 않습니다 ...).

나는 사용자가 manager 디렉토리와 repository
나는 사용자가 worker1필요로 쓰기로 파일을 해당 /manager/repository하지만, 파일을 삭제할 수 없습니다
나는 사용자가를 worker2쓰기 파일을 필요로하는 /manager/repository 파일을 삭제할 수 있지만
내가 사용자가를 worker3그 쓰기 파일에 필요 /manager/repository 하지만 할 수 없습니다 파일을 삭제

하지만 worker 1-2-3에만 생성 후 파일을 삭제할 수 없습니다 managerroot파일을 삭제할 수 있습니다 worker 1-2-3생성합니다.

나는 몇 가지 시도 chownchmod성공없이 스티키 비트를 적용 트릭.


1
할 일 worker*사용자는 특정 방법으로 디렉토리에 쓰기? 주석에서 로그 파일이 여기에 있다고 언급 했으므로 여기에서 파일을 만들기 위해 특정 실행 파일이 시작됩니까? 그렇다면 worker그룹 sudo에 실행 파일을 다음과 같이 실행할 수있는 권한을 부여 할 수 manager있습니다. 그런 다음 실행 파일은 manager작업자가 읽을 수있는 로그를 사용자 로 만듭니다 .
Centimane

사용자가 파일을 수정할 수 있으면 내용을 지울 수 있으므로 효과적으로 "삭제"할 수 있습니다. 파일 시스템이 아닌 일종의 "제출"인터페이스가 필요한 것 같습니다. 이메일이 가장 간단합니다.
ybungalobill

답변:


8

Windows와 달리 Unix / Linux에는 별개의 삭제 권한이 없습니다. 파일을 삭제 (또는 작성 또는 이름 바꾸기) 할 권한은 포함 디렉토리에 바인드됩니다. /manager/repository/작업자가 파일을 작성, 삭제 및 이름을 바꾸지 못하게하려면 작업자에 대한 쓰기 권한을 제거하십시오 .

파일을 만들 수는 없지만 삭제할 수는 없습니다.


파일이 로그 파일
user63898

. 그게 사실로 사용하는 동안의 FreeBSD, Solaris 또는으로 유사한 기능을 제공 리눅스 (Richacl 패치) 지원으로, 많은 현대 시스템은 확장 ACL (NFSv4에 ACL을 지원하는 Windows NT ACL을 귀하의 재고 리눅스 배포판 불구하고 그것을 가지고하지 않을 가능성이 높습니다.
Stéphane Chazelas

@ user63898 파일 자체가 아닌 파일이있는 디렉토리에서 쓰기 권한을 제거합니다.
GnP

6

우선 시스템에서 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.

감사하지만 문제는 사용자가 항상 생성된다는 것입니다. 일부는 관리자에 의해 삭제됩니다. 그래서 매번 setfacl로 디렉토리를 업데이트해야한다는 것을 의미합니까? 더 일반적인 해결책이 있습니까?
user63898

예 worker1에서 파일을 만들려고 할 때 예 /manager/repository/x.txt im getting : touch :`/manager/repository/x.txt '를 만질 수 없음 : 권한 거부
user63898

여전히 ls -ld 저장소를 수행 할 때 권한이 거부 됨 im
get

setfacl -d -R -m user :: rwx, user : worker1 : --- repository /를 수행 한 다음 worker1 touch /manager/repository/x.txt에서 파일을 만들려고 할 때 im getting : touch :`/ manager를 터치 할 수 없습니다 /repository/x.txt ': 권한 거부
user63898

5
여전히 누군가가 빈 파일을 여기에 쓸 수 없습니까? echo " " > $file기술적으로 쓰기 인 ""를 사용하여 파일 내용을 클로버하는 것처럼 내용을 효과적으로 삭제합니다. svn과 같은 실제 저장소가 여기에 가장 좋은 것 같습니다.
Centimane

3

권한으로이를 수행하려면 NFSv4 ACL과 유사한 ACL을 지원하는 시스템이 필요합니다. 예를 들어, FreeBSD에서 파일 시스템이 nfsv4acls플래그 와 함께 마운트 되면 다음을 수행 할 수 있습니다.

mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir

그룹 구성원에 대한 권한 을 명시 적으로 거부 합니다 .delete_childworker-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
$

0

/manager/repository폴더 에서 쓰기 권한을 가져옵니다 . 따라서 루트가 아닌 모든 사용자는 안에있는 파일에서 쓰거나 삭제할 수 /manager/repository있지만이 디렉토리에서 파일을 삭제할 수는 없습니다.

chmod 755 /manager/repository

0

파일과 폴더를 수정할 수는 있지만 삭제할 수는 없습니다.

속성을 제거하려면 다음 명령을 실행하십시오.

파일의 경우 :

$ sudo chattr -R -a file.txt

디렉토리의 경우 :

$ sudo chattr -R -a dir1/

(1) 문서에 따르면 a속성은 추가 전용을 의미합니다. 사용자 가이 파일을 편집 할 수 있습니까 ? (2) a디렉토리 에서 속성을 설정하면 어떤 효과가 있습니까?
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.