로컬 컴퓨터에서 파일을 공유하는 좋고 쉬운 방법


13

다음과 같은 속성을 가진 디렉토리를 갖고 싶습니다.

  • 많은 사용자가 파일을 복사 할 수 있습니다
  • 이 파일들은이 사용자에 의해 삭제 / 변경 될 수 있습니다 (사용자 A는이 디렉토리로 복사 된 파일을 삭제 / 수정할 수 있습니다)

권한은 사본에 유지되기 때문에 일반 파일 권한을 사용하여 수행 할 수 없습니다.

인터넷에서 찾은 내용은 다음과 같습니다.

일부 사용 사례 :

  • 로컬 컴퓨터에서 음악 공유
  • 간단한 git 저장소 공유 (많은 사람들이 베어 저장소를 쓸 수있게하십시오) --- gitosis와 같은 솔루션이 있다는 것을 알고 있습니다
  • 많은 개발자가 루트 권한을 부여하지 않고 PHP 앱의 테스트 인스턴스를 수정할 수 있도록 허용하십시오 (파일을 복사 할 것으로 생각합니다) --- 비영리 주니어 개발자 팀을 이끌고 있으며 간단하게 유지해야합니다!

편집하다

AFAIK 설정 SGID 비트는 enugh가 아니며 새로 생성 된 파일에만 영향을 미칩니다. 이러한 유스 케이스의 기본 워크 플로우는 복사 및 기타 작업 (파일의 크기를 변경하지 않음)을 줄입니다.

답변:


9

액세스 제어 목록

정답은 액세스 제어 목록 (ACL) 입니다. 예, 반례를 찾을 수 있지만 실제로는 사용자가 항상 그것에 대해 생각 해야하는 그룹 쓰기 가능성과 달리 실제로 충분합니다. 필요한 것은 시스템 관리자 (루트)가 파일을 명명 된 그룹 만 공유하도록하려면 그룹을 정의해야한다는 것입니다 (루트는 예를 들어 LDAP에서 그룹을 수락하여 위임하도록 선택할 수 있지만 다른 이야기입니다).

참여 사용자는 022의 umask를 가져야합니다. 사용자가 세계에서 읽을 수없는 파일을 정기적으로 작성하면이 체계가 작동하지 않습니다. 그러나 제한적 umask가 있으면 어쨌든 파일을 공유하고 싶지 않기 때문일 수 있습니다.

ACL 활성화

Ubuntu는 기본적으로 ACL을 활성화하지 않으므로 일회성 관리자 요구 사항이 있습니다. /etc/fstab선호하는 편집기를 사용하여 편집 하고 파일을 공유하려는 파일 시스템에 해당하는 모든 행을 변경하십시오. acl옵션에 추가 하십시오. (다른 줄은 바꾸지 말고 긴 줄을 감싸는 편집기는 사용하지 마십시오.) acl옵션이 추가 된 예제 줄은 다음과 같습니다 .

UUID=5e1ec7ed-face-dead-beef-c011ec7ab1e5  /  ext4  errors=remount-ro,acl  0 1

옵션이 처음으로 적용 되려면 다음과 같은 명령을 사용하십시오 (각 파일 시스템마다).

sudo mount -o remount,acl /

acl패키지 에서 ACL 도구를 설치하십시오 .

공유 디렉토리 설정

그룹이 파일을 공유하려면 mygroup:

setfacl -m group:mygroup:rwx /path/to/shared/root
setfacl -d -m group:mygroup:rwx /path/to/shared/root

사람들이 파일을 작성하여 공유 디렉토리에 복사하면 파일은 세계적으로 읽을 수 있으며 (umask로 인해) 그룹의 모든 사용자는 파일을 추가하고 제거 할 수 있습니다 (그룹이 그룹 쓰기 가능하므로). 사람들은 서로의 파일을 편집 할 수 없지만 좋은 일이거나 편집 충돌을 즉시 겪게됩니다.

유닉스 그룹이 없다면, 사용자를 하나씩 추가 할 수 있습니다 :

setfacl -m user:bob:rwx /path/to/shared/root
setfacl -d -m user:bob:rwx /path/to/shared/root

버전 관리

사람들이 제 위치에서 파일을 편집 할 수있게하려면 편집 충돌을 방지 할 수있는 것도 필요합니다. 버전 관리입니다.

자식 저장소를 공유하기 위해이 중 어느 것도 필요하지 않습니다. gitosis와 같은 솔루션이 있다는 것을 알고 있으므로 사용하십시오.


ACL이 대상 디렉토리 레벨에서 설정된 기본 acl을 삭제 (무시)하는 cp (및 mv?)에 의해 자동 상속이 중단되지 않으면 ACL이 완벽하게 작동합니다.
유용한

2

간단히 이렇게하십시오 :

mkdir /src/teamA
addgroup teamA
chgrp teamA /src/teamA
chmod g+rws /src/teamA

이제 teamA그룹의 모든 사람들 이 모든 것을 만들 수 있습니다./src/teamA

마법은 디렉토리의 sgid (set group id) 비트입니다.


AFAIK 작동하지 않습니다
.

1

사용자가 공유 폴더의 파일에 액세스 할 수있게하려면 (예 : 다른 사람이 다른 시간에 같은 컴퓨터에 로그온하고 같은 파일에 액세스해야하는 bindfs경우) 공유 디렉토리를 만드는 데 사용할 수 있습니다 .

여러 로컬 사용자가 공유 디렉토리 및 해당 서브 디렉토리에서 모든 파일 (새로 작성된 파일 포함)을 읽고 쓸 수 있습니다 (작성, 삭제, 이름 바꾸기, 수정 ...). 각 사용자는 파일 및 폴더 (새로 생성 된 폴더 포함)를 소유 한 것으로 볼 수 있습니다.

간단히, 당신은 실행

sudo bindfs -o perms=0700,mirror-only=user1:user2:user3 /home/shared /home/shared

user1, user2 및 user3이 / home / shared를 사용할 수 있도록합니다.

명령

영구 설치 (컴퓨터를 켤 때마다 ) 를 포함한 전체 지침 은 Bindfs-SharedDirectoryLocalUsers (우분투 문서) 를 참조하십시오 . 나는 내 컴퓨터에서 각각 다른 공유 그룹을 가진 여러 디렉토리에 이것을 사용합니다 (하나의 폴더는 모든 계정에서 사용할 수 있고 다른 하나는 업무용 계정에서만 사용 가능하고 다른 하나는 개인 계정에서만 사용 가능합니다).

게시물에서 :

bindfs는 권한 설정으로 디렉토리를 다른 위치 (마운트 포인트)에 마운트하기위한 FUSE 파일 시스템입니다. 마운트 포인트 내부에서 파일의 소유권과 권한을 지정할 수 있습니다.

...

주요 이점은 공유 디렉토리에서 작성된 새 파일이 소유권 및 권한을 상속한다는 것입니다.

액세스 제어 목록 (ACL)

설명서 참고 사항 :

다른 사용자 및 / 또는 그룹에 대한 고급 권한을 설정하려면 액세스 제어 목록을 시도 하십시오 .

자세한 내용은 Gilles answer 를 참조하십시오.


당신은 문제가 여기에 사용자가 만든 패키지를 얻을 수 있습니다 oneiric에 bindfs 추가가 발생하는 경우 bugs.launchpad.net/ubuntu/+source/bindfs/+bug/851600
david.libremone

-3

shellholic의 솔루션을 cron 작업과 결합하여 15 초마다 해당 폴더의 모든 파일에 대한 gid를 업데이트하는 비슷한 작업을 수행 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.