Specificare il gruppo predefinito e le autorizzazioni per i nuovi file in una determinata directory


15

Ho una determinata directory in cui è presente un progetto condiviso da più utenti. Questi utenti utilizzano SSH per ottenere l'accesso a questa directory e modificare / creare file.

Questo progetto dovrebbe essere scrivibile solo per un determinato gruppo di utenti: chiamiamolo "mygroup". Durante una sessione SSH, tutti i file / directory creati dall'utente corrente dovrebbero appartenere per impostazione predefinita al gruppo "mygroup" e disporre di autorizzazioni scrivibili per gruppo.

Posso risolvere il problema delle autorizzazioni con umask:

$ cd project
$ umask 002
$ touch test.txt

Il file "test.txt" è ora scrivibile in gruppo, ma appartiene ancora al mio gruppo predefinito ("mislav", lo stesso del mio nome utente) e non a "mygroup". Posso chgrpricorsivamente impostare il gruppo desiderato, ma volevo sapere c'è un modo per impostare implicitamente un gruppo come umask cambia le autorizzazioni predefinite durante una sessione.

Questa directory specifica è un repository git condiviso con una copia di lavoro e desidero git checkoute git resetoperazioni per impostare la maschera e il gruppo corretti per i nuovi file creati nella copia di lavoro. Il sistema operativo è Ubuntu Linux.

Aggiornamento: un collega suggerisce che dovrei esaminare getfacl / setfacl di POSIX ACL ma la soluzione di seguito combinata con umask 002la sessione corrente è abbastanza buona per me ed è molto più semplice.

Risposte:


19

Affinché tutti i file in una determinata directory ereditino i diritti di gruppo, è necessario utilizzare il bit setgid nella propria directory. Vedere questo link .

 $ mkdir test
 $ sudo chown raphink.staff test
 $ ls -lhd test
     drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test
 $ sudo chmod g+s test # Set the setgid bit
 $ ls -lhd test
     drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test
 $ touch test/foo
 $ ls -lh test
     total 0
     -rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo

Grazie. Interessante che non ho trovato questo facendo ricerche su
Google

6

Se vuoi farlo con una cartella esistente, devi assicurarti che il bit setgid sia abilitato anche per tutte le sottocartelle. Tuttavia, non è necessario sui file e probabilmente non lo si desidera nemmeno sui file. Ecco come impostarlo ricorsivamente per tutte le sottocartelle.

find /path/to/base/dir -type d -exec chmod g+s {} +

4

Non riesco a trovare l'origine, ma l'utilizzo setgidper risolvere questo problema per i repository bare git, che presumo sia il tuo caso, è obsoleto e può causare problemi in alcuni casi.

Git può occuparsi di tutto questo tramite la core.sharedRepositorybandiera. Ho avuto lo stesso problema e risolto come segue:

Supponendo che repogroupsia il tuo gruppo e devi cdaccedere alla directory repo:

Innanzitutto cambia il flag condiviso in group:

git config core.sharedRepository group 

Nota: qui è necessario utilizzare la parola chiave group, non il nome del gruppo. Ciò equivale a creare il repository nudo con opzione --shared=group.

Quindi modificare il gruppo per l'intero repository:

chgrp -R repogroup .

Per assicurarti che le directory esistenti siano scrivibili in gruppo ( g+w) e che anche gli eseguibili esistenti diventino eseguibili in gruppo ( g+X) devi anche:

chmod -R g+wX .

Una volta fatto questo, git onorerà la shared=groupbandiera e si prenderà cura delle autorizzazioni di gruppo di seguito, sia per i file esistenti che per quelli nuovi, quindi non avrai mai più bisogno di umasko chgrp.

Metterò la fonte in un commento se la trovo indietro.


3

Non sono un grande esperto quando si tratta del lato * nix, ma penso che quello che stai cercando si chiami setgid.

Vedi qui .


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.