Modo semplice e buono per condividere file sul computer locale


13

Vorrei avere una directory con le seguenti proprietà:

  • Molti utenti possono copiare i file al suo interno
  • Questi file possono essere eliminati / modificati da questi utenti (l'utente A può eliminare / modificare il file che è stato copiato in questa directory)

non può essere eseguito utilizzando le normali autorizzazioni sui file (poiché le autorizzazioni vengono conservate sulla copia).

Ecco cosa ho trovato in rete:

Alcuni casi d'uso:

  • Condivisione di musica sul computer locale
  • Condivisione di repository git semplice (basta creare un repository nudo scrivibile a molte persone) --- So che ci sono soluzioni come la gitosi
  • Consentire a molti sviluppatori di modificare l'istanza di prova dell'app php senza fornire loro il root (suppongo che avrebbero copiato i file) --- Sto guidando un team di sviluppatori junior senza scopo di lucro e devo mantenerlo semplice!

MODIFICARE

L'impostazione AFAIK del bit SGID non è corretta, influisce solo sui file appena creati --- e sul flusso di lavoro di base per questi casi d'uso copia di ivnolves e altre operazioni (che clivano il gid del file invariato)

Risposte:


9

Elenchi di controllo degli accessi

La risposta diretta sono gli elenchi di controllo di accesso (ACL) . Sì, puoi trovare un controesempio, ma in pratica sono abbastanza buoni (a differenza della semplice scrivibilità di gruppo che richiede che gli utenti ci pensino continuamente). Ciò che richiedono è che l'amministratore di sistema (root) definisca i gruppi, se si desidera che i file vengano condivisi solo da un gruppo nominato (root può scegliere di delegare, ad esempio accettando gruppi da LDAP, ma questa è un'altra storia).

È necessario che gli utenti partecipanti abbiano un umask di 022. Se creano regolarmente file non leggibili dal mondo, questo schema non funzionerà. Ma se hanno un umask restrittivo, è presumibilmente perché non vogliono comunque condividere file.

Abilitazione ACL

Ubuntu non abilita gli ACL per impostazione predefinita, quindi c'è un requisito di amministrazione una tantum. Modifica /etc/fstabutilizzando il tuo editor preferito e modifica ogni riga corrispondente a un filesystem in cui desideri condividere i file: aggiungi aclalle opzioni. (Assicurati di non modificare altre righe e di non utilizzare un editor che avvolga le righe lunghe.) Ecco una riga di esempio con l' aclopzione aggiunta:

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

Affinché l'opzione abbia effetto la prima volta, utilizzare un comando come il seguente (per ciascun file system):

sudo mount -o remount,acl /

Installa gli strumenti ACL dal aclpacchetto.

Impostazione della directory condivisa

Per avere file condivisi dal gruppo mygroup:

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

Se le persone creano file e li copiano nella directory condivisa, i file saranno leggibili in tutto il mondo (a causa della umask) e chiunque nel gruppo può aggiungere e rimuovere file (perché il gruppo è scrivibile dal gruppo). Le persone non possono modificare i file degli altri, ma questa è una buona cosa o potresti incorrere subito in conflitti di modifica.

Se non si dispone di un gruppo unix, è possibile aggiungere utenti uno per uno:

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

Controllo della versione

Se vuoi che le persone siano in grado di modificare i file sul posto, hai anche bisogno di qualcosa per prevenire conflitti di modifica. Questo è il controllo della versione.

Non hai bisogno di tutto questo per condividere un repository git. Sai che ci sono soluzioni come la gitosi, quindi usale.


ACL funzionerebbe perfettamente se l'ereditarietà automatica non venisse interrotta da cp (e mv?) Che scarta (ignora) l'acl predefinito impostato a livello della directory di destinazione.
utile il

2

Basta fare questo:

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

Ora tutti nel teamAgruppo possono fare tutto dentro/src/teamA

La magia è il bit sgid (set id gruppo) sulla directory.


AFAIK non funzionerà, vedi post aggiornato
jb.

1

Se si desidera che gli utenti possano accedere ai file in una cartella condivisa (ad esempio, persone diverse accedono allo stesso computer in momenti diversi e necessitano dell'accesso agli stessi file), è possibile utilizzare bindfsper creare una directory condivisa.

Consente a più utenti locali di leggere e scrivere (creare, eliminare, rinominare, modificare ...) tutti i file (compresi quelli appena creati) da una directory condivisa e dalle sue sottodirectory. Ogni utente vedrà i file e le cartelle (compresi quelli appena creati) come appartenenti a loro.

In breve, corri

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

per rendere / home / condivisa disponibile per utente1, utente2 e utente3.

Istruzioni

Consulta Bindfs-SharedDirectoryLocalUsers (documentazione di Ubuntu) per le istruzioni complete, inclusa la configurazione permanente (ogni volta che accendi il computer). Lo uso sul mio computer per una serie di directory, ognuna con gruppi di condivisione diversi (una cartella è disponibile per tutti gli account, un'altra solo per gli account di lavoro, un'altra solo per gli account personali).

Dal post:

bindfs è un filesystem FUSE per il montaggio di una directory in un'altra posizione (mountpoint), con impostazioni di autorizzazione. Consente di specificare la proprietà e le autorizzazioni dei file dall'interno del mountpoint.

...

Il vantaggio principale è che i nuovi file creati nella directory condivisa erediteranno la proprietà e le autorizzazioni.

Elenchi di controllo degli accessi (ACL)

Le note di documentazione:

Se si desidera impostare autorizzazioni più avanzate per utenti e / o gruppi diversi, provare gli elenchi di controllo di accesso .

Vedi la risposta di Gilles per maggiori dettagli.


se hai problemi ad aggiungere bindfs su oneiric puoi ottenere pacchetti creati dall'utente qui bugs.launchpad.net/ubuntu/+source/bindfs/+bug/851600
david.libremone,

-3

È possibile combinare la soluzione shellholic con un processo cron che aggiorna il gid per tutti i file in quella cartella ogni 15 secondi o qualcosa di simile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.