2013-04-24 5 views
11

Per oltre un anno, ho avuto problemi con le autorizzazioni GIT e directory/file. Ho un repository centrale al quale più sviluppatori spingono il codice, usando ssh (origine impostata come ssh: // esempio/git/repository). Ho installato il repository come segue:La proprietà/il gruppo di file viene modificata quando gli utenti eseguono il push su un repository GIT

1) Il mio file di configurazione nel repository centrale: [core] repositoryformatversion = 0 fileMode = true nudo = true sharedrepository = 0660

2) Tutti i permessi della directory di repository sono impostati su 770 (rwxrwx ---) 3) Tutti i file in ./objects/XX e ./objects/info sono impostati su 440 (r - r -----) 4) Tutti gli altri i file sono impostati su 660 (rw-rw ----) 5) La proprietà è impostata su root: group_name

(notare che questo proviene dalla configurazione consigliata nella risposta più alta in questo thread: Making git push respect permissions?)

Tutti gli utenti che accedono sono membri del gruppo 'nome_gruppo'.

Il problema è che se l'utente1 invia il repository, la proprietà del file su alcuni file è impostata su user1: user1 - ovvero il gruppo viene modificato. Quando ciò accade, nessun altro utente può spingere (o tirare) dal repository, poiché non ha più il permesso di leggere, scrivere o eseguire dai file richiesti nel repository.

Ho letto tutti i thread che riesco a trovare sulla questione su Stack Overflow e praticamente ovunque sulla rete, ma continuo a imbattersi in questo stesso problema.

Il problema è che non sono sicuro che questo problema riguardi GIT o UNIX e non sono sicuro di come risolverlo. Come posso impedire che il gruppo venga modificato quando un utente invia al repository?

+0

Come ... stai spingendo? Con quali autorizzazioni utente stai facendo questo? – Makoto

+0

Spingere utilizzando: git push Stiamo spingendo attraverso ssh. Ogni utente sta inserendo il server nel proprio account utente UNIX. Ad esempio, sono utente shiro sul server. Le credenziali di accesso che sto utilizzando per SSH sono per utente shiro. L'utente shiro fa parte del gruppo shirogroup. La proprietà del file è root: shirogroup. Questo risponde alla tua domanda? – Shiro

+0

Ho suphp sul mio server - è possibile che questo sia ciò che sta alterando i permessi dei miei file, e non GIT? – Shiro

risposta

16

Sembra che sia stato modificato core.sharedRepository dopo l'inizializzazione del repository anziché utilizzare init --shared=group che dovrebbe impostare correttamente le autorizzazioni. Ciò significa che il bit sgid non verrà impostato correttamente nelle directory del repository git. Dovrai aggiustarlo manualmente con qualcosa di simile (supponendo GNU find e xargs):

find . -print0 | xargs -0 chgrp group_name 

find . -type d -print0 | xargs -0 chmod g+s 
+0

Signore, sei un principe. Corretti che io abbia cambiato core.shareRepository dopo aver inizializzato il repository, e la tua soluzione ha funzionato davvero. Ho litigato con questo in varie occasioni nell'ultimo anno, quindi sono molto riconoscente per averlo finalmente funzionato! – Shiro

+0

Questo è tutto corretto e utile, ma per aggiungere un po ': la proprietà del gruppo di un file verrà reimpostata in base al proprietario del gruppo di directory (quando g + s è impostato) su una base per directory. Ciò significa che puoi avere più proprietari di gruppi per diverse directory, a patto che questo sia impostato su una directory per-directory, per repository (e che tutti i g + s siano impostati). – dmansfield

Problemi correlati