Varsayılan bir sahibin "otomatik" olarak ayarlanması, setuidbenzer bir dizinin olmasını gerektirir setgid. Ancak, bu FreeBSD'de yapılandırılabilirken, diğer UNIX ve Linux sistemleri göz ardı ediyor u+s. Ancak sizin durumunuzda başka bir çözüm olabilir.
İstediğim, kullanıcıya grup ekleyerek paylaşılabilecek bir dizine sahip olmak. Bu dizinde oluşturulan her şey izin şemasını üst öğesinden devralır. Çalıştığımdan daha iyi bir yol varsa, hep kulağım.
Yani, temelde, gördüğümden itibaren, gruplar mekanizmasını kullanarak bir dizine erişimi kontrol etmek istiyorsunuz. Ancak, bu, tüm dizin yapısındaki izinleri kısıtlamanızı gerektirmez. Aslında, dizin --xyürütme biti sadece ihtiyacınız olan şey olabilir. Sana bir örnek vereyim. Varsayalım ki ...
group_dirDizine erişimi kontrol eden gruptur ourgroup.
- Yalnızca
ourgroupgruptaki kişiler erişebilir group_dir.
user1ve user2aittir ourgroup.
- Varsayılan umask 0022'dir.
... aşağıdaki kurulumu göz önünde bulundurun:
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
Burada, her öğenin sahibi tarafından oluşturulduğunu varsayalım.
Şimdi, bu kurulumda:
- Tüm dizinler içinde herkes tarafından serbestçe gezilebilir
ourgroup. Gruptaki herkes, içinde herhangi bir yerde dosya oluşturabilir, taşıyabilir, silebilir group_dir(ancak daha derinde değil).
- İçeride olmayan herkes
ourgroupengellenecek group_dirve bu nedenle altındaki herhangi bir şeyi manipüle edemeyecek. Örneğin user3(üyesi olmayan ourgroup), okuyamaz group_dir/user2_submission/README( r--dosyanın kendisinde izin olsa bile ).
Ancak, bu durumda küçük bir sorun var: tipik umask nedeniyle, kullanıcılar tarafından oluşturulan öğeler grubun diğer üyeleri tarafından manipüle edilemez. ACL'lerin girdiği yer burasıdır. Varsayılan izinleri ayarlayarak, umask değerine rağmen her şeyin yolunda olduğundan emin olursunuz:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
Bu çağrı ayarlar:
- Sahip için varsayılan
rw(x)izinler.
rw(x)Grup için varsayılan izinler.
- Diğerleri için varsayılan olarak izin yok. Beri Not olduğunu diğerleri erişemez
group_dirneyse, gerçekten onların izinleri altında ne olduğunu fark etmez.
Şimdi, eğer bir öğeyi şu şekilde oluşturursam user2:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
Bu ACL uygulandığında, önceki yapımızı yeniden oluşturmayı deneyebiliriz:
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
Burada yine her öğe sahibi tarafından yaratılır.
Ayrıca, dizini kullananlara biraz daha fazla güç / güvenlik vermek istiyorsanız, yapışkan bir bit düşünebilirsiniz. Bu, örneğin, user1silinmesini engeller user2_submission( -w-izin verdiği için group_dir):
$ chmod +t group_dir/
Şimdi, dizini user1kaldırmaya çalışırsa user2, çok hoşuna gidecek Operation not permitted. Ancak, bunun dizin yapısı değişikliklerini engellemesine karşın group_dir, altındaki dosya ve dizinlere hala erişilebilir olduğunu unutmayın:
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
Dikkate alınması gereken başka bir şey de, kullandığımız ACL'lerin varsayılan izinleri oluşturmasıdır. Bu nedenle, bir öğenin sahibinin kendisiyle ilişkili izinleri değiştirmesi mümkündür. Mesela, user2mükemmel koşabilirsin ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... bu nedenle, tam gönderme dizinini gruptaki hiç kimse için kullanılamıyor.
Ancak, başlangıçta rwsgruptaki kişilere tam erişim izni vermeye istekli olduğunuzdan , bu kullanıcılara güvendiğinizi ve onlardan çok fazla kötü amaçlı işlem beklemeyeceğinizi farz ediyorum.