Birden çok grubu dizin sahibi olarak ayarlama


31

Sunucumda dizin var /srv/svn.

Örneğin devFirmA, bu dizini birden fazla grup sahipliğine ayarlamak mümkün mü devFirmBve devFirmC?

Mesele şu ki, subversionbirden fazla depoda birden fazla kullanıcıyı yönetmek için sürüm kontrolünü yönetmek istiyorum ve depoların kök dizini, izinlerin nasıl birleştirileceğini bilmiyorum /srv/svn. Ben mesela, üç firma için, var FirmA, FirmBve FirmC. İçeride Şimdi, /srv/svnben üç dizinleri oluşturduk FirmA, FirmB, FirmCve içlerinde ben her proje için depo oluşturduk ve şimdi tüm elementes içeride beri izni düzeni kurmak bilmiyorum /srv/svnaittir root:rootok olmadığı, yoksa ben yanlış?


1
Firma grupları birbirlerinin dosyalarına erişiyor mu? Veya bir ana dizini paylaşmaktan başka, tamamen ayrı mı?
JM Becker

@ TechZilla firma grubu birbirlerinin dosyalarına erişmemeli, ayrılmalı, sadece tüm dizinlere erişebilmeliyim.
KernelPanic

Tamam, doğru cevabı gönderdim, bunun için ACL kullanmamalısınız. Onlar son çare seçeneği, bu sorun hala çok yaygın bir sorun.
JM Becker,

Yanıtlar:


16

Bu doğru bir şekilde anlarsam ve sürekli olarak karşılaşırsam, son derece yaygın bir sorundur. Her önemsiz gruplama problemi için ACL kullanırsam, tonlarca yönetilemez sisteme sahip olurdum. Bu durum için değil, başka bir şekilde yapamadığınızda en iyi uygulamayı kullanıyorlar. Bu şiddetle tavsiye ediyorum yöntemdir.

Öncelikle, umask'ınızı 002'ye ayarlamanız gerekir, bu bir grubun kendisi ile paylaşabileceği şekildedir. Genellikle bir dosya yaratırım /etc/profile.d/firm.shve sonra umask ile bir test komutu eklerim.

[ $UID -gt 10000 ] && umask 002

Daha sonra, dizinleri kendi gruplarına ayarlamanız gerekir.

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

Sonunda SGID bitini doğru bir şekilde ayarlamanız gerekir, böylece grup daima belirlediğinize kalır. Bu, yazılı bir dosyanın yazarın GID'sine ayarlanmasını önleyecektir.

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

Şimdi nihayet, dizinlerin diğer kullanıcılar tarafından erişilmesini önlemek istiyorsanız.

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

2
Uyarı: Bu çalışması gerekir, ancak tüm dosyalar üzerinde yürütme izni bitini kaldırır. Dizin ağacınız yalnızca belgeler içeriyorsa bu sorun değil. Yürütülebilir dosyalar içeriyorsa, bu işlem kurulumunuzu bozabilecek yürütmeyi önler.
Stéphane Gourichon

1
Bu da güzel bir fikir olabilir, ancak soruyu yanıtlamıyor.
17'de

Bu, sadece tarif edildiği gibi üç klasörü bölümlendirir, böylece sadece her firmanın üyeleri yalnızca kendi dosyalarını değiştirebilir - 'svn'ye ihtiyacı olan erişimi vermez.
zengin

Bu olsa çok yakın. Eksik olan vermektir size gruplara tümüne erişim. Giriş yaptığınızı farz edersek, bu adımı ekleyin svnadmin: sudo usermod -a -G FirmA,FirmB,FirmC svnadminBu, svnadmintüm bu gruplara ekleyecektir . Tüm bu gruplardaki dosyalar 'grup yazma' etkin olduğundan ( chmod 664bunu yaptınız), siz ve ayrıca firmaX, firmaX'a ait tek dosya yazarları olacaksınız.
zengin

1
Daha iyi - eklemek / çıkarmak istediklerinizi eklemek / çıkarmak için izinleri değiştirin - örneğin yapmakfind /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
zengin p

25

Sahip olarak yalnızca bir gruba sahip olabilirsiniz .

Ancak, erişim kontrol listelerini kullanarak diğer gruplar için izinleri tanımlayabilirsiniz.

Komutu veren ACL'nin kurulu olup olmadığını kontrol edin getfacl. Sisteminizde ACL kurulu değilse, aclpaketteki komut satırı araçlarını aşağıdakilerle yükleyin :sudo apt-get install acl

İle getfaclbirlikte bir dizine veya başka dosyanın ACL bilgisini okuyabilir ve setfaclbir dosyaya grupları ekleyebilirsiniz.

Örneğin:

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

Grubu ekler devFirmBile R EAD, ağırlık ayin e X dizine ecute izinleri /srv/svn.

Ayrıca, bu dizinde oluşturulan dosyaların birden fazla gruba ait olmasını istiyorsanız, ACL'yi varsayılan ACL olarak ayarlayın. XVarsayılan grup giriş araçlarında “sahibine (ya da başkası) tarafından yürütülebilir eğer yürütülmesine izin”.

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

6

Geleneksel Unix izinlerine sahip birden fazla Linux grubunun sahip olduğu bir dosyanın olması mümkün değildir. (Ancak, ACL ile mümkündür .)

Ama aşağıdaki geçici çözümü kullanın ve yeni bir grup (örneğin denilen oluşturabilir devFirmsgruplarının tüm kullanıcılar dahil olur) devFirmA, devFirmBve devFirmC.
Ile yeni kullanıcı grupları oluşturursunuz:

sudo addgroup NEWGROUPNAME

Öncelikle, -komutunu id-utilsalmak için yüklemeniz lidgerekebilir:

sudo apt-get install id-utils

Sonra tüm kullanıcıları kopyalamak kolayca aşağıdaki kod satırı çalıştırabilirsiniz SOURCEGROUPiçin TARGETGROUP. Elbette, kopyalamak istediğiniz her grup için komutu bir kez çalıştırmanız gerekir. Büyük harfli yer sahiplerini gerçek grup adlarıyla değiştirmeyi unutmayın.

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

Öyleyse sizin durumunuzda komutu çalıştırmanız gerekir (bir kerede tüm satırlar):

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

Bu komutların yalnızca kaynak grupların mevcut üyeleri olan tüm kullanıcıları kopyaladığını unutmayın . Daha sonra eklenen her kullanıcının adduserkomut ile ortak grubunuza manuel olarak eklenmesi gerekir . Sadece bir kez daha büyük harfli yer tutucuları gerçek kullanıcı ve grup adı ( devFirms) ile değiştirin:

sudo adduser NEWUSER TARGETGROUP

Unix ve Linux'taki cevabı için Justin Ethier'e teşekkürler.SE: Bir grubun tüm kullanıcılarını başka bir gruba ekle?


@Gilles, planınızın Subversion sunucusu için birden fazla kullanıcıyla birden fazla veri havuzundaki soru güncellememdeki gibi çalışacağını düşünüyor musunuz?
KernelPanic

2

Hayır, bu mümkün değil.

Her dosya (ve ayrıca dizinler) yalnızca bir kullanıcı ve bir gruba sahip olabilir.


6
Aynı veya benzer bir sonuç almak için alternatif bir yaklaşım sunmak iyi olurdu.
Byte Komutanı

2

Birden fazla gruba veya kullanıcıya farklı haklar sağlamak için aşağıdaki komutları kullanın (RHEL 6 ve 7'de test edilmiştir):

Yeni grup sahibi yapmak için:

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

Mevcut acl ayarlarını kontrol etmek için:

getfacl <directory_name>

Test edildi, Ubuntu 16.04.3'te de çalışıyor
Dmitry
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.