여러 사용자가 공유하는 데이터가 포함 된 디렉토리가 있습니다. 이 디렉토리 및 그 아래에있는 모든 것에 대한 액세스는 디렉토리 그룹에 의해 제어되며, 해당 그룹은 해당 사용자에게 추가됩니다. 그래서 나는 “sticky group”폴더를 만들었습니다 chmod g+s
. 디렉토리에는 디렉토리와 파일이 포함 된 트리 구조가 포함되며 총 파일 수는 수백만 개에 달합니다. 파일은 상당히 작을 것입니다. 50MB보다 큰 것은 기대하지 않습니다.
내 문제는 파일이나 디렉토리의 소유자가 여전히 그것을 만든 사용자라는 것입니다. 따라서 액세스 그룹에서 해당 사용자를 제거해야하더라도 그의 액세스를 완전히 제거하지는 않습니다.
그래서:
모든 파일과 하위 디렉토리의 소유자가 동일한 지 확인하기 위해 놓친 다른 옵션이 있습니까?
나는 cron-job을 사용하여 전체 디렉토리를 주기적으로 서핑 할 수 있기를 기대하지만, 기본적으로 한 번 pr-file 명령 인 것은 비효율적입니다.
나는 발견 예를 inotify를를 사용을하지만, 높은 유지 보수 등의 파업 나, 그것은 스크립트를 필요로하기 때문에있다.
ACL이 강제 소유권에 도움이 될 수 있는지 알아낼 수 없었습니다.
더 똑똑한 방법이 있습니까?
내가 원하는 것은 사용자에게 그룹을 추가하여 공유 할 수있는 디렉토리를 갖는 것입니다. 이 디렉토리에서 생성 된 모든 것은 부모로부터 권한 체계를 상속합니다. 내가 시도하는 것보다 더 좋은 방법이 있다면 나는 모두 귀입니다.
답변
기본 소유자를 “자동으로”설정하려면 다음 setuid
과 같은 디렉토리가 필요합니다 setgid
. 그러나 이것은 FreeBSD에서 구성 될 수 있지만 다른 UNIX 및 Linux 시스템은 무시 u+s
합니다. 그러나 귀하의 경우 다른 해결책이있을 수 있습니다.
내가 원하는 것은 사용자에게 그룹을 추가하여 공유 할 수있는 디렉토리를 갖는 것입니다. 이 디렉토리에서 생성 된 모든 것은 부모로부터 권한 체계를 상속합니다. 내가 시도하는 것보다 더 좋은 방법이 있다면 나는 모두 귀입니다.
따라서 기본적으로 그룹 메커니즘을 사용하여 디렉토리에 대한 액세스를 제어하려고합니다. 그러나 전체 디렉토리 구조에서 권한을 제한 할 필요는 없습니다. 실제로 디렉토리 --x
실행 비트는 필요한 것일 수 있습니다. 예를 들어 보겠습니다. 그것을 가정하면 …
group_dir
디렉토리에 대한 액세스를 제어하는 그룹 은ourgroup
입니다.ourgroup
그룹의 사람들 만 액세스 할 수 있습니다group_dir
.user1
에user2
속해ourgroup
있습니다.- 기본 umask는 0022입니다.
… 다음 설정을 고려하십시오.
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
여기서 모든 항목이 소유자에 의해 생성되었다고 가정합니다.
이제이 설정에서
- 의 모든 사용자가 모든 디렉토리를 자유롭게 탐색 할 수 있습니다
ourgroup
. 그룹의 모든 사용자는 파일을 생성, 이동, 삭제할 수 있습니다group_dir
. - 에없는 사람
ourgroup
은 (으)로 차단group_dir
되어 그 아래의 어떤 것도 조작 할 수 없습니다. 예를 들어user3
(의 멤버가 아닌 사람)는 파일 자체에 대한 권한 이 있어도ourgroup
읽을 수 없습니다 .group_dir/user2_submission/README
r--
그러나이 경우 약간의 문제가 있습니다. 일반적인 umask로 인해 사용자가 만든 항목은 그룹의 다른 구성원이 조작 할 수 없습니다. 이것은 ACL이 들어오는 곳입니다. 기본 권한을 설정하면 umask 값에도 불구하고 모든 것이 제대로 작동하는지 확인할 수 있습니다.
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
이 호출은 다음을 설정합니다.
rw(x)
소유자의 기본 권한.rw(x)
그룹의 기본 권한.- 다른 사람에게는 기본적으로 권한이 없습니다. 부터하는 것으로 다른 사람이 액세스 할 수 없습니다
group_dir
어쨌든, 정말 자신의 권한 아래에 어떤 문제가되지 않습니다.
지금, 아이템 등을 작성하는 경우 user2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
이 ACL을 사용하여 이전 구조를 다시 빌드 할 수 있습니다.
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
여기서도 각 항목은 소유자가 작성합니다.
또한 디렉토리를 사용하는 사람들에게 조금 더 많은 힘 / 보안을 제공하려면 끈적 끈적한 비트를 고려할 수 있습니다. 예를 들어, 권한 이 없기 때문에 user1
삭제 하지 못합니다 .user2_submission
-w-
group_dir
$ chmod +t group_dir/
이제, 의 디렉토리 user1
를 제거하려고하면 user2
, 그는 lovely하게 될 것 Operation not permitted
입니다. 그러나 이렇게하면에서 디렉토리 구조 수정을 방지 할 수 있지만 그 group_dir
아래의 파일 및 디렉토리에는 여전히 액세스 할 수 있습니다.
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
고려해야 할 또 다른 사항은 우리가 사용한 ACL이 기본 권한을 설정한다는 것 입니다. 따라서 항목 소유자가 해당 항목과 관련된 권한을 변경할 수 있습니다. 예를 들어 user2
완벽하게 실행할 수 있습니다 …
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
… 그러므로 전체 제출 디렉토리를 그룹의 모든 사람이 사용할 수 없게합니다.
그러나 원래 rws
그룹의 모든 사용자 에게 모든 권한을 기꺼이 제공하기 때문에 이러한 사용자를 신뢰한다고 가정하고 악의적 인 작업이 너무 많을 것으로 예상하지 않습니다.
답변
더 똑똑한 방법이 있습니다. set-gid와 default acls 의 조합을 사용합니다 . 분명히 acl 사용 가능 파일 시스템이 필요합니다. 공유하려는 디렉토리 가 있고 /var/grpdir
그룹 구성원이 sharing
액세스 할 수 있어야 한다고 가정 합니다.
chown root:sharing /var/grpdir
chmod 2770 /var/grpdir #other can't read or traverse into the directory, set-gid is set
setfacl -d -m u::rwX,g::rwX,o::0 /var/grpdir
기본 ACL은 기본 ACL이있는 디렉토리에서 작성된 서브 디렉토리에 의해 상속됩니다. 즉, 작성된 모든 파일 은 디렉토리의 setgid 비트 /var/grpdir
에 sharing
의해 그룹이 설정됩니다 . 또한 특정 사용자 또는 그룹으로 ACL을 지정하지 않았기 때문에 기본 Linux 스타일 우선권을 무시하는 기본 acl을 상속합니다. 이것은 모든 파일이 소유권 <user>:sharing
과 권한 으로 생성됨을 의미합니다 rw-rw----
. 디렉토리는 자체 기본 ACL이 상위 ( /var/grpdir
) 와 동일하게 설정되고 사용자 및 그룹에 대해 실행 가능한 비트가 설정 된다는 점을 제외하면 동일 합니다. sharing
그룹 에서 사용자를 제거 하면 디렉토리에 액세스 할 수 없습니다 ( 사용자가 소유하고 있어도 디렉토리에있는 파일은 해당되지 않음).
cronjob을 사용하여 주기적으로 권한을 수정하는 것과 달리 권한은 새로 생성 된 파일 및 디렉토리로 원자 적으로 업데이트되므로 항상 동기화됩니다. 이 솔루션은 가볍습니다. 데몬이 필요하지 않으며, 한 번에 권한을 수정하는 동안 IO 급상승이 없습니다.
답변
나는 이것을하는 좋은 방법을 모른다. 기술적으로 가장 깨끗한 방법은 FUSE 파일 시스템입니다. 물론 아직 아무도하지 않았다면 많은 작업이 필요합니다.
대안 :
-
삼바를 사용하십시오. samba에는
force user
매개 변수가 있습니다. 디렉토리를 로컬로 내보내고 로컬로 마운트 할 수 있습니다. 루프백 네트워킹 만 관련되어 있으므로 더 빠르게 액세스 할 수 없지만 허용 될 수 있습니다. -
FAT32와 같은 비 Linux 파일 시스템을 사용하십시오. 특정 사용자가 마운트하도록 구성해야합니다. 액세스 권한은 상위 디렉토리에서 처리해야합니다.
답변
파일을 특정 디렉토리로 이동할 때 파일 소유자가 변경되도록 파일 소유권을 자동으로 변경하는 방법에 대해서는 들어 본 적이 없습니다. 가장 가까운 것은 끈적 끈적한 부분이지만 그룹 소유권이 충분하지 않다고 표시 한 것처럼 보이므로 실제 사용자 소유권이 변경되어야합니다.
이 경우 Pandya가 언급했듯이 가장 좋은 방법은 chown -R 플래그가있는 cron 작업이라고 생각합니다. 매분 또는 5 분마다 실행되도록 크론에 놓으십시오.
사용자가 이것을 어떻게 사용하고 있는지 설명 할 수 있다면 더 나은 해결책이있을 수 있습니다.
ACL을 사용하면 누가 어떤 작업을 수행 할 수 있는지에 대한 세밀한 제어가 가능하며 실제 파일 소유권이 자동으로 변경되지는 않습니다. 더 높은 시야를 확보하고 솔루션을 평가 / 재 설계해야한다고 생각합니다.
답변
당신은 사용할 수 있습니다 -도구를 inotify를 아래처럼 간단한 bash는 스크립트를 작성합니다. Inotify는 디렉토리 웹을 주시하고 웹 디렉토리 내부에서 디렉토리 생성 과 같은 이벤트가 발생할 때마다 무언가를 수행합니다 . 많은 이벤트가 존재합니다. 당신은 그것을 구글 하거나이 사이트를 볼 수 있습니다
while inotifywait -m -e CREATE web; do echo "A new directory has been created"; done