Bir dizindeki tüm yeni dosyaları bir grubun erişilebilir yapmasını sağlayın


131

İki kullanıcı Alice ve Bob ve bir grup GROUPNAME ve bir klasörüm olduğunu varsayalım foo, her iki kullanıcı da GROUPNAME üyesidir (Linux ve ext3 kullanarak).

Ben altında kullanıcı Alice gibi bir dosyayı kaydederseniz foo, izinler şunlardır: -rw-r--r-- Alice Alice. Bununla birlikte, bazı alt dizinde kaydedilen her dosyanın fooizinlerinin -rwxrwx--- Alice GROUPNAME(örneğin, Alice, group GROUPNAME grubunun sahibi) olması mümkün mü?


Yanıtlar:


91

Atanan izin bitlerini umaskve grubu ile dizini setgid yaparak kontrol edebilirsiniz GROUPNAME.

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

Her alt dizinde chgrp/ chmodharfini yapmanız gerektiğini unutmayın ; otomatik olarak yayılmaz (bir setgid dizini altında ne mevcut ne de daha sonra oluşturulan dizinler ayarlanamaz , ancak grupta yer alsalar bile GROUPNAME).

Ayrıca unutmayınız umaskbir süreç niteliği ve bu süreç ve (miras onun çocukları tarafından oluşturulan tüm dosyalar için geçerlidir umaskonların ebeveyn yürürlükte fork()time). Kullanıcıların bunu girmesi gerekebilir ~/.profileve dizine bağlı olmayan ve farklı izinler gerektiren şeylere dikkat etmesi gerekebilir. farklı şeyler yaparken farklı ayarlara ihtiyacınız olursa modüller yararlı olabilir.

POSIX ACL'lerini kullanabiliyorsanız, işleri biraz daha iyi kontrol edebilirsiniz; hem bir izin maskesi hem de bir grup belirtmek ve bunların makul şekilde yayılmasını sağlamak mümkün olmalıdır. Yine de POSIX ACL desteği biraz değişkendir.


6
Üst dizinde setgid ayarlandıktan sonra oluşturulan alt dizinler otomatik olarak setgid ayarına sahip olacaktır.
Arrowmaster

2
@Arrowmaster: Bazı sistemlerde, belki de hepsinde değil; OSX'te test ettim ve yayılmaz, en azından root olmayanlar için.
geekosaur

2
Debian'da (ve çoğu Linux dağıtımını varsayarım) setgid ve grup adlarının her ikisi de yayılır.
Arrowmaster

3
OS X'te, bir dizindeki setgid biti ihmal edilir; yeni dosyalar ve dizinler her zaman içerdikleri dizinin grubuna verilir.
John Flatness

Ayrıca kopyalanan veya foo'ya taşınan dosyaların (cp resp. Mv kullanarak) istenen izinleri otomatik olarak alması da mümkün mü -rwxrwx--- A G?
Öğrenci

106

Mümkünse, erişim kontrol listelerini (ACL) kullanın .

Linux altında, kullandığınız dosya sisteminin ACL'leri desteklediğinden emin olun (çoğu unix dosya sistemi yapar). Ext2 / ext3 / ext4 ile belirtmek gerekir: Sen ACL etkinleştirmek için bağlama seçenekleri değiştirmek gerekebilir aclaçıkça bağlama seçeneği, bu nedenle giriş /etc/fstabgibi görünmelidir /dev/sda1 / ext4 errors=remount-ro,acl 0 1. Run mount -o remount,acl /yeniden başlatmadan ACL etkinleştirmek için. Ayrıca ACL komut satırı araçlarını yüklemek getfaclve setfacltipik olarak adlandırılan bir paket içerisinde, acl.

Bir defalık kurulum sona erdiğinde, grubun yazma izinlerini vermek ve bu izinleri yeni oluşturulan dosyalar tarafından miras almak için müdürün ACL'sini değiştirin. Linux altında:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

EKL'ler bir seçenek değilse, dizini grubun GROUPNAMEsahibi yapın ve izinlerini 2775 veya 2770: olarak ayarlayın chmod g+rwxs /path/to/directory. sBurada setgid bit anlamına gelir; Bir dizin için, bu dizinde oluşturulan dosyaların dizinin sahibi olan gruba ait olacağı anlamına gelir.

Ayrıca , tüm dosyalarını varsayılan olarak grup halinde yazılabilir yapmak için Alice ve Bob'un maskesini ayarlamanız gerekir . Çoğu sistemde varsayılan umask, 022'dir; bu, dosyaların gruplara ve diğerlerine yazma dışındaki tüm izinlere sahip olabileceği anlamına gelir. Bunu 002 olarak değiştirin, sadece yazarak başka bir izni yasaklamak anlamına gelir. Bu ayarı genellikle içine koyarsınız ~/.profile:

umask 002    # or 007 to have files not readable by others

6
+1 - Çok kapsamlı cevap. Asla birisinin tekrar harekete geçebileceğini bilmiyordum. Bilmek güzel.
boehj

1
Bu setfacl -d komutu benim için çalışmıyor, çünkü bu dizinde yer alan dosyalar herhangi bir yazma izinlerini engelleyen bir r-- maskeye sahip. Biraz yardım isterdim. Unix.stackexchange.com/questions/71743/…
Ben McCann

2
@ its_me S1: Seçenekle mountbirlikte bir komut gösteriyorum remount, bu yüzden kullanmıyor fstab. İki aclkez sahip olmak, dosya sisteminin aclzaten bir seçeneğe bağlı olduğu ve zararsız olduğu anlamına gelir . Bu arada, son çekirdekte ext4'ün acl varsayılanı bu arada (bu cevabı yazdığımda yama yine yeniydi). S2: Komutları her iki sırada da çalıştırabilirsiniz.
Gilles

1
@ its_me Evet, anlayışınız doğru, girişleri hangi sırayla eklediğiniz önemli değil
Gilles

8
Kullanmak sonra cevap iyileştirmelidir GROUPNAMEyerine Gdaha iyi anlayabilmeleri için,
knocte

24

Bu soru linux için iyi bir seçimdir acl. İşletim sisteminizi belirtmediğiniz için, Linux’u izleyen bölümde varsayacağım. İşte örnek bir oturum.

Gerçekten iyi bir acleğitim bilmiyorum , ancak http://www.vanemery.com/Linux/ACL/linux-acl.html'den daha kötüsünü yapabilirsiniz.

Varsayılan acldeğerin yerel bir umask gibi davrandığını unutmayın . En azından Linux'ta, genel olarak dünya çapında uygulanmakta olan umasks, yerel bir umask'ın etkisini almayı bildiğim tek yol bu. Nedense bu biraz bilinen bir özellik. Ağ, halktan yerel bir umask geçersiz kılmayı istemekle doludur, fakat neredeyse hiç kimse kullanmayı düşünmüyor acl.

Ayrıca, çalıştığınız bölümü acldesteklediğiniz gibi monte etmeniz gerektiğini unutmayın , örn.

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

Oturum takip ediyor:

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

Grubunu ayarlayın fooolmak staffve grubun ve kullanıcının acl ayarlamak fooiçin rwx.

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

Kullanıcı ve grubun varsayılan oturumlarını da ayarlayın rwx. Bu, dosya ve dizinlerin miras aldığı izinleri tanımlar foo. Bu nedenle foo altında oluşturulan tüm dosya ve dizinlerin grup izinleri olacaktır rw.

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

Şimdi fookullanıcı olarak bazı dosyalar oluşturun faheemve john.

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

Dosyaları listele. Hem sahip olunan hem de sahip olunan faheemdosyaların johngrup izinleriyle oluşturulduğuna dikkat edin rw.

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
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.