Ustawianie wielu grup jako właścicieli katalogów


31

Na moim serwerze mam katalog /srv/svn.

Czy to możliwe, aby ustawić ten katalog do posiadania wielu własność zasobu grupie, na przykład devFirmA, devFirmBi devFirmC?

Chodzi o to, że chcę subversionkontrolować wersję, zarządzać wieloma użytkownikami w wielu repozytoriach i nie wiem, jak się połączyć /srv/svn , katalog główny repozytoriów, uprawnienia. Mam na przykład trzech firm, FirmA, FirmBi FirmC. Teraz, w środku /srv/svnja utworzyliśmy trzy katalogi, FirmA, FirmB, FirmCjak i wewnątrz nich Utworzyłem repozytorium dla każdego projektu i teraz nie wiem jak ustanowić system uprawnień, ponieważ wszystkie elementes wewnątrz /srv/svnsą własnością root:root, która nie jest w porządku, czy jestem źle?


1
Czy grupy firm uzyskują dostęp do plików innych osób? A może są całkowicie oddzielne, oprócz udostępniania katalogu nadrzędnego?
JM Becker,

@ Grupa firm TechZilla MUSI Nie uzyskiwać dostępu do plików, MUSI być oddzielona, ​​tylko ja muszę mieć dostęp do wszystkich katalogów.
KernelPanic

OK, opublikowałem poprawną odpowiedź, nie powinieneś do tego używać list ACL. Są opcją ostateczną, problem ten jest nadal bardzo powszechny.
JM Becker

Odpowiedzi:


16

Jest to niezwykle powszechny problem, jeśli dobrze go rozumiem i ciągle się z nim spotykam. Gdybym korzystał z list ACL dla każdego trywialnego problemu z grupowaniem, miałbym mnóstwo niezarządzalnych systemów. Stosują najlepsze praktyki, gdy nie można tego zrobić w żaden inny sposób, nie w tej sytuacji. Jest to metoda, którą gorąco polecam.

Najpierw musisz ustawić swój umask na 002, aby grupa mogła się nim dzielić. Zwykle tworzę taki plik /etc/profile.d/firm.sh, a następnie dodaję polecenie testowe z umask.

[ $UID -gt 10000 ] && umask 002

Następnie musisz ustawić katalogi na odpowiednie grupy,

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

Na koniec musisz poprawnie ustawić bit SGID, aby grupa zawsze pozostała do tej, którą ustawiłeś. Zapobiegnie to ustawieniu zapisanego pliku na GID pisarza.

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

Teraz wreszcie, jeśli chcesz uniemożliwić dostęp do katalogów innym użytkownikom.

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

2
Ostrzeżenie: to powinno działać, ale usuwa bit zezwolenia na wykonanie dla wszystkich plików. Jest to w porządku, jeśli twoje drzewo katalogów zawiera tylko dokumenty. Jeśli zawiera pliki wykonywalne, uniemożliwi to wykonanie, co może zepsuć instalację.
Stéphane Gourichon

1
To może być również dobry pomysł, ale w ogóle nie odpowiada na pytanie.
ceving

To zgodnie z opisem tylko dzieli trzy foldery na partycje, tak aby tylko członkowie każdej firmy mogli modyfikować tylko swoje odpowiednie pliki - nie daje to svn dostępu, którego potrzebuje.
bogaty p

To jednak bardzo blisko. Brakuje Ci dostępu do wszystkich grup. Dodaj ten krok, zakładając, że twój login to svnadmin: sudo usermod -a -G FirmA,FirmB,FirmC svnadmin Spowoduje to dodanie svnadmindo wszystkich tych grup. Ponieważ pliki we wszystkich tych grupach mają włączoną funkcję „zapisu grupowego” ( chmod 664zrobiłeś to), ty i firmaX, będziecie jedynymi autorami plików należących do firmyX.
bogaty p

1
Lepiej - zmień uprawnienia do dodawania / odejmowania tego, co chcesz dodać / odejmuj - np. Dofind /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
rich p

25

Możesz mieć tylko jedną grupę jako właściciela .

Jednak za pomocą list kontroli dostępu możesz zdefiniować uprawnienia dla innych grup.

Sprawdź, czy masz zainstalowaną listę ACL wydającą polecenie getfacl. Jeśli w systemie nie ma zainstalowanej listy ACL, zainstaluj narzędzia wiersza polecenia znajdujące się w aclpakiecie z:sudo apt-get install acl

Za pomocą getfaclmożna odczytać informacje ACL katalogu lub innego pliku, a za pomocą setfaclmożna dodawać grupy do pliku.

Na przykład:

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

Dodaje grupę devFirmBz r EAD wagowo rytu, E x ecute uprawnienia do katalogu /srv/svn.

Jeśli chcesz, aby pliki utworzone w tym katalogu były własnością wielu grup, ustaw ACL jako domyślną ACL. XW domyślnej grupy wprowadzania środków „umożliwia wykonanie jeśli wykonywalny przez właściciela (lub ktokolwiek inny)”.

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

6

Nie można mieć pliku należącego do wielu grup systemu Linux z tradycyjnymi uprawnieniami w systemie Unix. ( Jest to jednak możliwe w przypadku ACL .)

Możesz jednak skorzystać z poniższego obejścia i utworzyć nową grupę (np. Nazwaną devFirms), która obejmie wszystkich użytkowników grup devFirmA, devFirmBi devFirmC.
Tworzysz nowe grupy użytkowników za pomocą:

sudo addgroup NEWGROUPNAME

Po pierwsze, może być konieczne zainstalowanie, id-utilsaby uzyskać lid-command:

sudo apt-get install id-utils

Następnie można uruchomić następującą linię kodu na łatwe kopiowanie wszystkich użytkowników SOURCEGROUPdo TARGETGROUP. Oczywiście musisz uruchomić polecenie raz dla każdej grupy, którą chcesz skopiować. Nie zapomnij zastąpić wielkimi symbolami zastępczymi rzeczywistymi nazwami grup.

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

W twoim przypadku musisz uruchomić polecenie (wszystkie linie jednocześnie):

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

Pamiętaj, że te polecenia kopiują tylko wszystkich użytkowników, którzy są bieżącymi członkami grup źródłowych. Każdy użytkownik, który zostanie dodany później, będzie musiał zostać ręcznie dodany do wspólnej grupy za pomocą adduserpolecenia. Po prostu ponownie zamień wielkie litery na rzeczywistą nazwę użytkownika i grupy ( devFirms):

sudo adduser NEWUSER TARGETGROUP

Dzięki Justinowi Ethierowi za odpowiedź na Unix i Linux.SE: Czy dodać wszystkich użytkowników jednej grupy do innej?


@Gilles, czy uważasz, że Twój plan działałby na serwerze Subversion z wieloma repozytoriami z wieloma użytkownikami, jak w mojej aktualizacji pytania?
KernelPanic

2

Nie, nie jest to możliwe.

Każdy plik (a więc także katalogi) może mieć tylko jednego użytkownika i jedną grupę.


6
Zapewnienie alternatywnego podejścia do uzyskania tego samego lub podobnego wyniku byłoby fajne.
Bajt Dowódca

2

Aby zapewnić różne prawa wielu grupom lub użytkownikom, użyj następujących poleceń (testowane na RHEL 6 i 7):

Aby uczynić nowego właściciela grupy:

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

Aby sprawdzić bieżące ustawienia acl:

getfacl <directory_name>

Testowany, działa również na Ubuntu 16.04.3
Dmitry
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.