it-swarm-tr.com

Bir dizindeki tüm yeni dosyaları bir grup için erişilebilir hale getirme

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

Alice kullanıcısı olarak foo altında bir dosya kaydedersem, izinler şunlardır: -rw-r--r-- Alice Alice. Ancak, foo 'ın bazı alt dizinleri altında kaydedilen her dosyanın -rwxrwx--- Alice GROUPNAME (yani sahibi Alice, GROUPNAME grubu)?

132
student

Atanmış izin bitlerini umask ve grupla setgid öğesini GROUPNAME yaparak kontrol edebilirsiniz. .

$ 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 dizin için chgrp/chmod yapmanız gerektiğini unutmayın; setgid dizini altında ne var ne de sonradan oluşturulan dizinler otomatik olarak yayılmaz setgid , ancak ikincisi GROUPNAME grubunda olacak).

Ayrıca, umask öğesinin bir işlem özniteliği olduğunu ve bu işlem ve alt öğeleri tarafından oluşturulan (fork() adresindeki üst öğelerinde geçerli olan umask kaynağını devralan tüm dosyalar için geçerli olduğunu unutmayın. süresi). Kullanıcıların bunu ~/.profile İçinde ayarlaması gerekebilir ve dizininizle ilgili olmayan ve farklı izinlere ihtiyaç duyan şeylere dikkat etmeleri gerekebilir. modüller farklı şeyler yaparken farklı ayarlara ihtiyacınız varsa 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 anlamlı bir şekilde yayılmasını sağlamak mümkün olmalıdır. POSIX ACL'leri için destek biraz değişkendir.

96
geekosaur

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

Linux altında, kullandığınız dosya sisteminin ACL'leri desteklediğinden emin olun (çoğu unix dosya sistemi bunu destekler). ACL'leri etkinleştirmek için bağlama seçeneklerini değiştirmeniz gerekebilir: ext2/ext3/ext4 ile acl mount seçeneğini açıkça belirtmeniz gerekir, böylece /etc/fstab/dev/sda1 / ext4 errors=remount-ro,acl 0 1. Çalıştırmak mount -o remount,acl / yeniden başlatmadan ACL'leri etkinleştirmek için. Ayrıca, genellikle getfacl adlı bir pakette sağlanan setfacl ve acl ACL komut satırı araçlarını da yükleyin.

Tek seferlik kurulum sona erdiğine göre, grubun yazma izinlerini vermek ve bu izinleri yeni oluşturulan dosyalar tarafından devralmak üzere dizinin 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, GROUPNAME grubuna ait dizini yapın ve izinlerini 2775 veya 2770 olarak ayarlayın: chmod g+rwxs /path/to/directory. s burada setgid biti anlamına gelir; bir dizin için, bu dizinde oluşturulan dosyaların dizinin sahibi olan gruba ait olacağı anlamına gelir.

Tüm dosyaları varsayılan olarak grup yazılabilir yapmak için Alice ve Bob'un mask ayarını da yapmanız gerekir. Çoğu sistemdeki varsayılan umask 022'dir, yani dosyalar grup ve diğerlerine göre yazma dışındaki tüm izinlere sahip olabilir. Bunu yalnızca diğer yazma iznini yasaklamak anlamına gelen 002 olarak değiştirin. Genellikle bu ayarı ~/.profile:

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

Bu soru linux için çok uygundur acl . İşletim sisteminizi belirtmediğiniz için, Linux'u aşağıdaki konularda varsayacağım. İşte örnek bir oturum.

Gerçekten iyi bir acl öğreticisini bilmiyorum, ancak http://www.vanemery.com/Linux/ACL/linux-acl.html

Varsayılan acl öğesinin yerel bir umask gibi davrandığını unutmayın. En azından Linux'ta, umasks küresel olarak uygulandığından, yerel bir umask'ın etkisini elde etmenin tek yolu budur. Nedense bu biraz bilinen bir özellik. Ağ, yerel bir umask geçersiz kılma hakkında sorular soran insanlarla doludur, ancak neredeyse hiç kimse acl kullanmayı düşünmemektedir.

Ayrıca, çalıştığınız bölümü acl desteğiyle bağlamanız gerektiğini unutmayın, örn.

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

Oturum şu şekildedir:

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

foo grubunu staff olacak şekilde ayarlayın ve foo grubunun ve kullanıcısının acl değerini rwx olarak ayarlayın.

/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 değişikliklerini rwx olarak ayarlayın. Bu, dosya ve dizinlerin foo öğesinden devralındığı izinleri tanımlar. Böylece foo altında oluşturulan tüm dosya ve dizinlerin grup izinleri rw olacaktır.

/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 foo içinde faheem ve john olarak dosya oluşturun.

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

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

Dosyaları listele. faheem'in sahip olduğu dosyaların ve john'in sahip olduğu dosyaların rw grup izinleriyle oluşturulduğuna dikkat edin.

/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
24
Faheem Mitha