Impostazione di più gruppi come proprietari di directory


31

Sul mio server ho directory /srv/svn.

È possibile impostare questa directory per avere più proprietà del gruppo, ad esempio devFirmA, devFirmBe devFirmC?

Il punto è che voglio il subversioncontrollo della versione per gestire più utenti in più repository e non so come unire /srv/svn , la directory principale dei repository, le autorizzazioni. Ho, per esempio, tre aziende, FirmA, FirmBe FirmC. Ora, all'interno /srv/svnho creato tre directory, FirmA, FirmB, FirmCe al loro interno ho creato repository per ogni progetto e ora non so come stabilire schema di autorizzazione in quanto tutti elementes all'interno /srv/svnsono di proprietà di root:root, che non è ok, o sono io sbagliato?


1
I gruppi di imprese accedono ai file degli altri? O sono completamente separati, oltre a condividere una directory principale?
JM Becker,

@TechZilla firm group DEVE Non accedere agli altri file, quindi DEVE essere separato, solo io devo avere accesso a tutte le directory.
KernelPanic,

OK, ho pubblicato la risposta corretta, non dovresti usare ACL per questo. Sono un'ultima risorsa, questo problema è ancora molto comune.
JM Becker,

Risposte:


16

Questo è un problema estremamente comune, se lo capisco accuratamente e lo incontro costantemente. Se usassi ACL per ogni banale problema di raggruppamento, avrei tonnellate di sistemi ingestibili. Stanno usando le migliori pratiche quando non puoi farlo in nessun altro modo, non per questa situazione. Questo è il metodo che consiglio vivamente.

Per prima cosa devi impostare la tua umask su 002, quindi un gruppo può condividere con se stesso. Di solito creo un file simile /etc/profile.d/firm.she quindi aggiungo un comando di prova con umask.

[ $UID -gt 10000 ] && umask 002

Successivamente è necessario impostare le directory sui rispettivi gruppi,

chgrp -R FirmA /srv/svn/FirmA 
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC

Infine, devi impostare correttamente il bit SGID, in modo che il gruppo rimanga sempre quello impostato. Ciò impedirà che un file scritto venga impostato sul GID del writer.

find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775

find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664

Ora finalmente se vuoi impedire l'accesso alle directory da parte di altri utenti.

chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC

2
Attenzione: questo dovrebbe funzionare ma rimuove il bit di autorizzazione all'esecuzione su tutti i file. Questo va bene se la tua struttura di directory contiene solo documenti. Se contiene file eseguibili ciò impedirà l'esecuzione, che potrebbe rovinare la configurazione.
Stéphane Gourichon,

1
Anche questa potrebbe essere una bella idea, ma non risponde affatto alla domanda.
va il

Questo, come descritto, suddivide solo le tre cartelle in modo che solo i membri di ciascuna azienda possano modificare solo i loro rispettivi file - non dà a 'svn' l'accesso di cui ha bisogno.
ricco p

Questo è molto vicino però. Ciò che manca è quello di dare voi accesso a tutti i gruppi. Aggiungi questo passaggio, supponendo che il tuo accesso sia svnadmin: sudo usermod -a -G FirmA,FirmB,FirmC svnadmin Questo si aggiungerà svnadmina tutti questi gruppi. Dato che i file di tutti questi gruppi hanno abilitato 'scrittura di gruppo' ( chmod 664fatto questo), tu, oltre a firmX, sarai gli unici autori di file di proprietà di firmX.
ricco p

1
Meglio: cambia i permessi per aggiungere / sottrarre ciò che vuoi aggiungere / sottrarre - es. Dofind /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
rich p

25

Puoi avere un solo gruppo come proprietario .

Tuttavia, utilizzando gli elenchi di controllo di accesso è possibile definire le autorizzazioni per altri gruppi.

Controlla se hai ACL installato emettendo il comando getfacl. Se il tuo sistema non ha installato ACL, installa gli strumenti da riga di comando presenti nel aclpacchetto con:sudo apt-get install acl

Con getfaclte puoi leggere le informazioni ACL di una directory o di un altro file e con setfaclte puoi aggiungere gruppi a un file.

Per esempio:

setfacl -m g:devFirmB:rwx /srv/svn/  

Aggiunge il gruppo devFirmBcon r ead, w rito, e x ecute autorizzazioni per directory /srv/svn.

Se si desidera anche che i file creati in quella directory appartengano a più gruppi, impostare l'ACL come ACL predefinito. La Xvoce di gruppo predefinita indica "consenti l'esecuzione se eseguibile dal proprietario (o da chiunque altro").

setfacl -m g:devFirmB:rwx /srv/svn/  
setfacl -d -m g:devFirmB:rwX /srv/svn/  

6

Non è possibile avere un file di proprietà di più gruppi Linux con autorizzazioni Unix tradizionali. (Tuttavia, è possibile con ACL .)

Ma si potrebbe utilizzare la seguente soluzione e creare un nuovo gruppo (ad esempio, chiamato devFirms) che includerà tutti gli utenti dei gruppi devFirmA, devFirmBe devFirmC.
Si creano nuovi gruppi di utenti con:

sudo addgroup NEWGROUPNAME

Innanzitutto, potrebbe essere necessario installare id-utilsper ottenere il lidcomando:

sudo apt-get install id-utils

Quindi è possibile eseguire la seguente riga di codice per copiare facilmente tutti gli utenti di SOURCEGROUPa TARGETGROUP. Ovviamente devi eseguire il comando una volta per ogni gruppo che desideri copiare. Non dimenticare di sostituire i segnaposto in maiuscolo con i nomi dei gruppi effettivi.

for u in $(lid -g -n SOURCEGROUP); do sudo usermod -a -G TARGETGROUP $u; done

Quindi nel tuo caso dovresti eseguire il comando (tutte le righe contemporaneamente):

sudo addgroup devFirms &&
for u in $(lid -g -n devFirmA); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmB); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmC); do sudo usermod -a -G devFirms $u; done

Si noti che questi comandi copiano solo tutti gli utenti che sono membri attuali dei gruppi di origine. Ogni utente che verrà aggiunto in seguito dovrà anche essere aggiunto manualmente al tuo gruppo comune con il addusercomando. Sostituisci ancora una volta i segnaposto in maiuscolo con il nome dell'utente e del gruppo ( devFirms):

sudo adduser NEWUSER TARGETGROUP

Grazie a Justin Ethier per la sua risposta su Unix & Linux.SE: aggiungere tutti gli utenti di un gruppo a un altro gruppo?


@Gilles pensi che il tuo schema funzionerebbe per più repository del server Subversion con più utenti come nel mio aggiornamento della domanda?
KernelPanic,

2

No, non è possibile.

Ogni file (e quindi anche le directory) può avere solo un utente e un gruppo.


6
Sarebbe bello fornire un approccio alternativo per ottenere lo stesso o un risultato simile.
Byte Commander,

2

Per fornire diritti diversi a più gruppi o utenti, utilizzare i seguenti comandi (Testato su RHEL 6 e 7):

Per diventare nuovo proprietario del gruppo:

setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>

Per verificare le impostazioni ACL correnti:

getfacl <directory_name>

Testato, funziona anche su Ubuntu 16.04.3
Dmitry il
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.