Dobry i łatwy sposób udostępniania plików na komputerze lokalnym

13

Chciałbym mieć katalog, który ma następujące właściwości:

  • Wielu użytkowników może kopiować do niego pliki
  • Pliki te mogą zostać usunięte / zmienione przez tych użytkowników (użytkownik A może usunąć / zmodyfikować plik skopiowany do tego katalogu)

nie można tego zrobić przy użyciu normalnych uprawnień do plików (ponieważ uprawnienia są zachowywane przy kopiowaniu).

Oto, co znalazłem w sieci:

Niektóre przypadki użycia:

  • Udostępnianie muzyki na komputerze lokalnym
  • Proste udostępnianie repozytorium git (wystarczy, że wiele osób będzie zapisywać je w zwykłym repozytorium) --- wiem, że istnieją rozwiązania takie jak gitosis
  • Pozwól wielu programistom modyfikować instancję testową aplikacji php bez dawania im roota (myślę, że skopiowaliby pliki) --- Kieruję zespołem młodszych programistów non-profit i muszę to utrzymać w prosty sposób!

EDYTOWAĆ

Ustawienie AFAIK Bit SGID nie jest wzbudzony, wpływa tylko na nowo utworzone pliki --- i podstawowy przepływ pracy dla tych przypadków użycia ivnolves kopiowanie i inne operacje (które usuwają identyfikator gid pliku niezmienione)

jb.
źródło

Odpowiedzi:

9

Listy kontroli dostępu

Prostą odpowiedzią są listy kontroli dostępu (ACL) . Tak, możesz znaleźć kontrprzykład, ale są one wystarczająco dobre w praktyce (w przeciwieństwie do zwykłego zapisu grupowego, które wymaga, aby użytkownicy cały czas o tym myśleli). Wymagają, aby administrator systemu (root) zdefiniował grupy, jeśli chcesz, aby pliki były udostępniane tylko przez nazwaną grupę (root może zdecydować o delegowaniu, na przykład akceptując grupy z LDAP, ale to inna historia).

Potrzebujący uczestnicy muszą mieć maskę 022. Jeśli rutynowo tworzą pliki nieczytelne dla świata, ten schemat nie zadziała. Ale jeśli mają restrykcyjną umaskę, to prawdopodobnie dlatego, że i tak nie chcą udostępniać plików.

Włączanie list ACL

Ubuntu domyślnie nie włącza list ACL, więc istnieje jednorazowy wymóg administratora. Edytuj /etc/fstabza pomocą swojego ulubionego edytora i zmieniaj każdą linię odpowiadającą systemowi plików, w którym chcesz współdzielić pliki: dodaj acldo opcji. (Pamiętaj, aby nie zmieniać żadnej innej linii i nie używać edytora, który zawija długie linie.) Oto przykładowa linia z acldodaną opcją:

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

Aby opcja zaczęła obowiązywać za pierwszym razem, użyj polecenia takiego jak poniżej (dla każdego systemu plików):

sudo mount -o remount,acl /

Zainstaluj narzędzia ACL z aclpakietu.

Konfigurowanie udostępnionego katalogu

Aby udostępnić pliki grupie mygroup:

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

Jeśli ludzie utworzą pliki i skopiują je do udostępnionego katalogu, pliki będą czytelne dla całego świata (z powodu umask), a każdy w grupie będzie mógł dodawać i usuwać pliki (ponieważ grupa jest zapisywalna przez grupę). Ludzie nie mogą edytować plików innych użytkowników, ale to dobrze, bo od razu natrafilibyście na konflikty edycji.

Jeśli nie masz grupy uniksowej, możesz dodawać użytkowników jeden po drugim:

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

Kontrola wersji

Jeśli chcesz, aby ludzie mogli edytować pliki w miejscu, potrzebujesz również czegoś, co zapobiegnie konfliktom edycji. To kontrola wersji.

Nie potrzebujesz nic z tego, aby współdzielić repozytorium git. Wiesz, że istnieją rozwiązania takie jak gitosis, więc używaj ich.

Gilles „SO- przestań być zły”
źródło
ACL działałby idealnie, gdyby automatyczne dziedziczenie nie było dzielone przez cp (i mv?), Które odrzucają (ignorują) domyślny acl ustawiony na poziomie katalogu docelowego.
przydatne
2

Po prostu zrób to:

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

Teraz wszyscy w teamAgrupie mogą zrobić wszystko w środku/src/teamA

Magią jest bit sgid (ustaw identyfikator grupy) w katalogu.

shellholic
źródło
AFAIK to nie zadziała, zobacz zaktualizowany post
jb.
1

Jeśli chcesz, aby użytkownicy mieli dostęp do plików w folderze współdzielonym (na przykład różne osoby logują się na tym samym komputerze w różnym czasie i potrzebują dostępu do tych samych plików), możesz użyć bindfsdo utworzenia katalogu współdzielonego.

Umożliwia wielu lokalnym użytkownikom odczytywanie i zapisywanie (tworzenie, usuwanie, zmiana nazwy, modyfikacja ...) wszystkich plików (w tym nowo utworzonych) ze wspólnego katalogu i jego podkatalogów. Każdy użytkownik zobaczy pliki i foldery (w tym nowo utworzone) jako należące do nich.

Krótko mówiąc, uciekasz

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

udostępnić / home / shared użytkownikowi 1, użytkownikowi 2 i użytkownikowi 3.

Instrukcje

Zobacz Bindfs-SharedDirectoryLocalUsers (dokumentacja Ubuntu), aby uzyskać pełne instrukcje, w tym konfigurację na stałe (za każdym razem, gdy włączasz komputer). Używam tego na własnym komputerze dla wielu katalogów, każdy z różnymi grupami udostępniania (jeden folder jest dostępny dla wszystkich kont, inny tylko dla kont służbowych, inny tylko dla kont osobistych).

Z postu:

bindfs to system plików FUSE do montowania katalogu w innej lokalizacji (punkcie montowania) z ustawieniami uprawnień. Pozwala określić własność i uprawnienia do plików z poziomu punktu montowania.

...

Główną zaletą jest to, że nowe pliki utworzone w udostępnionym katalogu odziedziczą własność i uprawnienia.

Listy kontroli dostępu (ACL)

Uwagi do dokumentacji:

Jeśli chcesz skonfigurować bardziej zaawansowane uprawnienia dla różnych użytkowników i / lub grupy, wypróbuj Listy kontroli dostępu .

Zobacz więcej odpowiedzi Gillesa .

david.libremone
źródło
jeśli masz problemy z dodaniem bindfs na oneiric, możesz pobrać pakiety utworzone przez użytkownika tutaj bugs.launchpad.net/ubuntu/+source/bindfs/+bug/851600
david.libremone
-3

Możesz połączyć rozwiązanie Shellholic z zadaniem cron, które aktualizuje gid dla wszystkich plików w tym folderze co 15 sekund lub coś podobnego.

David Oneill
źródło