2009-09-02 10 views
11

Jak używać Git bez Sudo na wielu kontach w jednym Ubuntu?Używanie Git bez Sudo na wielu kontach

Moje Ubuntu ma wiele kont. Utworzenie nowych kont sprawiło, że Git jest niedostępny przeze mnie bez sudo.

Zmieniłem właściciela na mnie, masi, a grupa na admin, do której należy masi. Mam następujące uprawnienia dla Git

800 -rwxrwxrwx 1 masi admin 813744 2009-02-20 23:01 /usr/bin/git 

pojawia się następujący komunikat, próbując użyć Git

git status 
fatal: unable to create '.git/index.lock': Permission denied 

biegnę find . -iregex ".*index.l.* która zwraca żadnych wyników, więc nie wydaje się być w żaden index.lock blokowania system. Uruchomię tę samą komendę również z sudo bez powodzenia.

+0

„Tworzenie nowych kont dokonała Git niedostępnych przeze mnie bez sudo . " Powinieneś wziąć to jako znak, że coś jest nie tak z twoim kontem, twoją konfiguracją systemu lub twoją instalacją. To jest wyjątkowo nienormalne zachowanie - git to normalna aplikacja przestrzeni użytkownika, dostępna dla zwykłych użytkowników w normalnej instalacji Ubuntu. – kampu

+0

Dla odniesienia, poprawne uprawnienia/własność dla/usr/bin/git * to 755/root.root, jak wskazano w odpowiedzi hillu. Być może przez przypadek ustawiono uprawnienia, aby tylko członkowie grupy lub właściciel mogli wykonywać "git" (tj. Uprawnienia to 744 aka -rwxr - r - zamiast 755). Brak poprawienia tych uprawnień stanowi poważne zagrożenie dla bezpieczeństwa systemu. – kampu

Odpowiedz

17

Jeśli dobrze rozumiem twoje pytanie, musisz przyznać kilka kont * nix kontom zapisu dla tego samego repozytorium git. Używanie argumentu wiersza komend --share dla git init powinno włączyć to. GitWiki ma a few words to say about this. To powinno załatwić sprawę:

git --bare init --shared=all 

Jeśli już utworzone repozytorium, może być w stanie przekształcić go do „wspólnego repozytorium” rzucając komendy:

git repo-config core.sharedRepository true 

w repozytorium, jak wspomniano w a blog post at moserei.de.

Aktualizacja 2014: Jest to nadal możliwe, ale polecenie zmieniło się z repo-config na config.

git config core.sharedRepository true 
+0

Czy istnieje sposób, aby retro aktywnie utworzyć repozytorium git - czy nie zostało to zrobione, jeśli wykonałeś początkowo niedzielony plik git init? –

+0

@Steve Folly: Wierzę, że druga próbka kodu w mojej odpowiedzi powinna rozwiązać ten problem. Ale naprawdę tego nie próbowałem. –

+0

@ Jørn Schou-Rode: doh! przepraszam, powinienem zwracać więcej uwagi! –

5

Zgaduję, że problemem jest własność katalogu .git.

Nie należy używać jednego drzewa źródłowego od różnych użytkowników - może to prowadzić do problemów.

Plik wykonywalny git nie jest problemem. Powinien być własnością root'a i mieć 755 uprawnień. (-rwxr-xr-x)

Innymi słowy możesz użyć git z wielu kont, ale nie powinieneś udostępniać jednego katalogu roboczego.

7

Git ma być rozpowszechniany. Tak więc każdy użytkownik powinien mieć osobne repozytorium własne. Powyższa metoda jest sprzeczna z tą metodologią. Poza tym podejrzewam, że uprawnienia katalogu .git.

3

Posiadanie uprawnień każdego zestawu wykonywalnego, aby zwykły użytkownik mógł nadpisać plik wykonywalny, stanowi poważne zagrożenie bezpieczeństwa. (Spróbuj zastąpić /usr/bin/git skryptem powłoki, który wywołuje rm -rf $HOME.)

Zmień uprawnienia z powrotem na 755 i zrób git posiadany przez root: root ponownie.(Menedżer pakietów Ubuntu zresetowałby uprawnienia do następnej aktualizacji, chyba że użyłbyś dpkg-statoverride(8)) Zgadzam się z tymi, którzy twierdzą, że może nie być dobrym pomysłem, aby wielu użytkowników współużytkowało jedno repozytorium git. Jeśli nadal uważasz, że jest to konieczne, rozważ utworzenie nowej grupy, chgrp katalogu przechowującego repozytorium i wszystkich plików w tej grupie i ustaw bit setgid w katalogach. (Parametr --shared do git init może również zrobić to za ciebie.) Następnie dodaj wszystkich użytkowników do grupy, która powinna mieć uprawnienia do zatwierdzania.

0

można zweryfikować członków użyciu

members groupname 

Następnie można ustawić poziom uprawnień dla nazwa_użytkownika: pary GROUPNAME,

change the ownership 
sudo chown -v -R username:groupname sprout 
chmod -R g+w .git/*