Menetapkan banyak grup sebagai pemilik direktori

31

Di server saya, saya memiliki direktori /srv/svn.

Apakah mungkin untuk mengatur direktori ini untuk memiliki kepemilikan grup ganda, misalnya devFirmA, devFirmBdan devFirmC?

Intinya adalah, saya ingin subversionkontrol versi mengelola beberapa pengguna di beberapa repositori dan saya tidak tahu cara menggabungkan /srv/svn , direktori root repositori, izin. Saya punya, misalnya, tiga perusahaan FirmA,, FirmBdan FirmC. Sekarang, di dalam /srv/svnsaya telah membuat tiga direktori, FirmA, FirmB, FirmCdan di dalamnya saya buat repositori untuk setiap proyek dan sekarang saya tidak tahu bagaimana membangun skema izin karena semua elementes dalam /srv/svndimiliki oleh root:root, yang tidak ok, atau aku salah?

KernelPanic
sumber
1
Apakah grup perusahaan mengakses file satu sama lain? Atau apakah mereka benar-benar terpisah, selain berbagi direktori induk?
JM Becker
@TechZilla firm group HARUS Tidak mengakses satu sama lain file, ada HARUS dipisahkan, hanya saya harus memiliki akses ke semua direktori.
KernelPanic
OK, saya memposting jawaban yang benar, Anda seharusnya tidak menggunakan ACL untuk ini. Mereka adalah pilihan terakhir, masalah ini masih sangat umum.
JM Becker

Jawaban:

16

Ini adalah masalah yang sangat umum, jika saya memahaminya secara akurat, dan saya menjumpainya terus-menerus. Jika saya menggunakan ACL untuk setiap masalah pengelompokan sepele, saya akan memiliki banyak sistem yang tidak dapat dikelola. Mereka menggunakan praktik terbaik ketika Anda tidak bisa melakukannya dengan cara lain, tidak untuk situasi ini. Ini adalah metode yang sangat saya rekomendasikan.

Pertama, Anda perlu mengatur umask Anda ke 002, ini agar sebuah grup dapat berbagi dengan sendirinya. Saya biasanya membuat file seperti /etc/profile.d/firm.sh, dan kemudian menambahkan perintah uji dengan umask.

[ $UID -gt 10000 ] && umask 002

Selanjutnya Anda perlu mengatur direktori ke grup masing-masing,

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

Akhirnya Anda perlu mengatur bit SGID dengan benar, sehingga grup akan selalu tetap pada yang Anda setel. Ini akan mencegah file tertulis diatur ke GID penulis.

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

Sekarang akhirnya jika Anda ingin mencegah direktori diakses oleh pengguna lain.

chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC
JM Becker
sumber
2
Peringatan: ini seharusnya berfungsi tetapi menghapus bit izin eksekusi pada semua file. Ini tidak apa-apa jika pohon direktori Anda hanya menyimpan dokumen. Jika berisi file yang dapat dieksekusi, ini akan mencegah eksekusi, yang dapat merusak pengaturan Anda.
Stéphane Gourichon
1
Ini mungkin juga ide yang bagus, tetapi tidak menjawab pertanyaan sama sekali.
ceving
Ini seperti yang dijelaskan hanya mem-partisi tiga folder sehingga hanya anggota dari masing-masing perusahaan yang hanya dapat memodifikasi file masing-masing - tidak memberikan 'svn' akses yang dibutuhkan.
rich p
Ini sangat dekat. Apa yang hilang adalah memberi Anda akses ke semua grup. Tambahkan langkah ini, dengan anggapan login Anda adalah svnadmin: sudo usermod -a -G FirmA,FirmB,FirmC svnadmin Ini akan menambah svnadminsemua grup ini. Karena file dalam semua grup ini mengaktifkan 'tulis grup' ( chmod 664melakukan ini), Anda, plus firmX, akan menjadi satu-satunya penulis file yang dimiliki oleh firmX.
rich p
1
Lebih baik - ubah izin untuk menambah / mengurangi apa yang ingin Anda tambahkan / kurangi - mis. Dofind /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
rich p
25

Anda hanya dapat memiliki satu grup sebagai pemilik .

Namun menggunakan daftar kontrol akses Anda dapat menentukan izin untuk grup lain.

Periksa apakah Anda telah menginstal ACL mengeluarkan perintah getfacl. Jika sistem Anda belum menginstal ACL, instal alat-alat baris perintah yang ada dalam aclpaket dengan:sudo apt-get install acl

Dengan getfaclAnda dapat membaca informasi ACL dari direktori atau file lain, dan dengan setfaclAnda dapat menambahkan grup ke file.

Sebagai contoh:

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

Menambahkan grup devFirmBdengan r ead, w rite, e x ecute ke direktori /srv/svn.

Jika Anda juga ingin file yang dibuat dalam direktori itu dimiliki oleh beberapa grup, atur ACL sebagai ACL default. The Xdalam sarana masuknya kelompok default “memungkinkan eksekusi jika dieksekusi oleh pemiliknya (atau siapa pun)”.

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

Tidak mungkin memiliki file yang dimiliki oleh banyak grup Linux dengan izin Unix tradisional. (Namun, dimungkinkan dengan ACL .)

Tetapi Anda dapat menggunakan solusi berikut dan membuat grup baru (mis. Dipanggil devFirms) yang akan mencakup semua pengguna grup devFirmA, devFirmBdan devFirmC.
Anda membuat grup pengguna baru dengan:

sudo addgroup NEWGROUPNAME

Pertama, Anda mungkin harus menginstal id-utilsuntuk mendapatkan lidperintah-:

sudo apt-get install id-utils

Kemudian Anda dapat menjalankan baris kode berikut untuk dengan mudah menyalin semua pengguna SOURCEGROUPuntuk TARGETGROUP. Tentu saja Anda harus menjalankan perintah sekali untuk setiap grup yang ingin Anda salin. Jangan lupa ganti placeholder dengan huruf kapital dengan nama grup yang sebenarnya.

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

Jadi dalam kasus Anda, Anda harus menjalankan perintah (semua baris sekaligus):

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

Perhatikan bahwa perintah ini hanya menyalin semua pengguna yang saat ini menjadi anggota grup sumber. Setiap pengguna yang ditambahkan kemudian juga harus ditambahkan secara manual ke grup umum Anda dengan adduserperintah. Ganti sekali lagi placeholder yang dikapitalisasi dengan nama pengguna dan grup yang sebenarnya ( devFirms):

sudo adduser NEWUSER TARGETGROUP

Terima kasih kepada Justin Ethier untuk jawabannya di Unix & Linux.SE: Tambahkan semua pengguna dari satu grup ke grup lain?

Komandan Byte
sumber
@Gilles, apakah menurut Anda skema Anda akan berfungsi untuk beberapa repositori server Subversion dengan beberapa pengguna seperti dalam pembaruan pertanyaan saya?
KernelPanic
2

Tidak, ini tidak mungkin.

Setiap file (dan juga direktori) hanya dapat memiliki satu pengguna dan satu grup.

Uwe Plonus
sumber
6
Memberikan pendekatan alternatif untuk mendapatkan hasil yang sama atau serupa akan lebih baik.
Byte Commander
2

Untuk memberikan hak yang berbeda kepada banyak grup atau pengguna, gunakan perintah berikut (Diuji pada RHEL 6 & 7):

Untuk membuat pemilik grup baru:

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

Untuk memeriksa pengaturan ACL saat ini:

getfacl <directory_name>
Mr.H
sumber
Diuji, berfungsi di Ubuntu 16.04.3 juga
Dmitry