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


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.