Linux'ta bir dizin altında yeni oluşturulan dosyalar ve alt dizinler için varsayılan izinler mi ayarlıyorsunuz?


99

Çıktı sonuçlarını birkaç kullanıcı arasında paylaşılan bir dizinde depolayan bir sürü uzun süredir çalışan komut dosyam ve uygulamalarım var. Bu paylaşılan dizin altında oluşturulan her dosya ve dizinin otomatik olarak u=rwxg=rwxo=rizinlere sahip olduğundan emin olmanın bir yolunu istiyorum .

umask 006Çeşitli senaryolarımın başında kullanabileceğimi biliyorum , ancak birçok kullanıcı kendi komut dosyalarını yazdığı ve umask'ı kendileri ayarlamayı unutabileceği için bu yaklaşımı sevmiyorum.

Dosya sisteminin yeni oluşturulan dosyaları ve dizinleri belirli bir klasördeyse belirli bir izinle ayarlamasını gerçekten istiyorum. Bu mümkün mü?

Güncelleme : Varsayılan ACL işlevi kullanılarak POSIX ACL'lerle yapılabileceğini düşünüyorum , ancak şu anda hepsi kafamın biraz üzerinde. Varsayılan ACL'lerin nasıl kullanılacağını açıklayabilecek biri varsa, muhtemelen bu soruyu güzelce yanıtlayacaktır.


1
POSIX ACL'leri güzeldir, ancak karşılaştığınız makinelerin% 60'ı, dağıtıma bağlı olarak belirli dosya sistemleri için bunları açmaz. İşte çok iyi bir giriş ve örnek: suse.de/~agruen/acl/linux-acls/online
Tim Post

1
Bağlandığım aynı belgeyi mi kastediyorsunuz :) Henüz okumam için bir değişiklik yapmadım ama mevcudiyet sorunu konusunda kafa kafaya verdiğiniz için teşekkürler.
David Dean

1
Tim Post'un yorumundaki bağlantı ölü gibi görünüyor, ancak İnternet Arşivi sayesinde onu görüntüleyebildim ve vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html'nin tam olarak aynı belgeyi içerdiğini doğrulayabildim . Bağlantıyı güncellemek için soruyu düzenleyeceğim.
rmunn

Yanıtlar:


78

Doğru sahipliği elde etmek için, dizindeki grup setuid bitini şu şekilde ayarlayabilirsiniz:

chmod g+rwxs dirname

Bu, dizinde oluşturulan dosyaların gruba ait olmasını sağlayacaktır. Daha sonra herkesin umask 002 veya 007 veya bu türden bir şeyle çalıştığından emin olmalısınız --- bu nedenle Debian ve diğer birçok linux sistemi varsayılan olarak kullanıcı başına gruplarla yapılandırılmıştır.

Kullanıcının umask değeri çok güçlüyse, istediğiniz izinleri zorlamanın bir yolunu bilmiyorum.


23
Bu gerçekten bir çözüm sağlamıyor - sahiplik değil izinleri soruyor ve bunu yapmanın tek yolu ACL'lerle
Yarin

3
"... herkesin umask 002 veya 007 veya benzer bir şeyle çalıştığından emin olun" - bu biraz zor ... Postfix, Dovecot, Clam ve Spam Assassin'i nasıl yaparsınız?
jww

2
Bölüm ne yapıyor +s? Teşekkürler.
tommy.carstensen

1
Bu durumda grup kimliğini ayarlamak anlamına gelir. Yani SGID bitini ayarlamak için g + s kullanıyoruz. "Bu durumda" diyorum çünkü + s, grup için g ile birleştirildi. + s, SUID bitini (setuid) ayarlamak için de kullanılabilir.
Bastion

57

En azından Linux altında, varsayılan ACL'leri kullanarak bunu nasıl yapacağınız aşağıda açıklanmıştır.

Öncelikle, dosya sisteminizde ACL desteğini etkinleştirmeniz gerekebilir . Ext4 kullanıyorsanız, o zaman zaten etkindir. Diğer dosya sistemlerinin (örn. Ext3) seçenekle bağlanması gerekir acl. Bu durumda, seçeneği /etc/fstab. Örneğin, dizin kök dosya sisteminizde bulunuyorsa:

/dev/mapper/qz-root   /    ext3    errors=remount-ro,acl   0  1

Ardından yeniden bağlayın:

mount -oremount /

Şimdi, varsayılan ACL'yi ayarlamak için aşağıdaki komutu kullanın:

setfacl -dm u::rwx,g::rwx,o::r /shared/directory

İçindeki tüm yeni dosyalar /shared/directoryartık istenen izinleri almalıdır. Elbette dosyayı oluşturan uygulamaya da bağlıdır. Örneğin, çoğu dosya, tıpkı umask kullanılırken olduğu gibi, başlangıçtan itibaren (open (2) veya creat (2) çağrısının mod argümanına bağlı olarak) tarafından çalıştırılamaz. Bazı araçlar gibi cp, tarve rsynckaynak dosya grup yazılabilir değilse varsayılan ACL maskelemek edecek kaynak dosya (lar) izinlerini korumaya çalışacaktır.

Bu yardımcı olur umarım!


Görünüşe göre bu hala umasktüm kullanıcılar için uygun . = / unix.stackexchange.com/questions/71743/…
anatoly techtonik

1
@techtonik Yazdığım gibi, dosyayı oluşturan uygulamaya bağlı. Örneğin, kullanırsanız cp, kaynak dosyanın izinlerini kopyalamaya çalışacaktır. umaskKullanırken bile yardımcı olmuyor cp. Aynı sorunu ile gördüm tar. Bu soruya bakın .
pelle

@techtonik Şimdi cevabıma bununla ilgili bir cümle ekledim.
pelle

1
evet, ACL ve POSIX doğru kurulumum 664 için olduğunda, sorun uygulamada hakları zorla 644'e ayarlıyor gibi görünüyor. Sorunu gideren kişiler için bu geri dönüş mekanizmasını açıklığa kavuşturmak güzel olurdu. Birçoğunun bundan haberi bile yok umask.
anatoly techtonik

Demek istediğim, mount bayraklarının doğru ayarlanıp ayarlanmadığını görmek için biraz zaman harcadım (ve ext4'te ayarlanamıyorlar çünkü otomatik olarak çalışıyorlar gibi görünüyor). Nasıl kontrol edileceğine dair hiçbir bilgi yok setfacl works correctly- Başarısız olması gerektiğini varsayıyorum, ancak emin değilim, çünkü cevap bu noktayı kaçırıyor.
anatoly techtonik

4

Bu çirkin, ancak tam olarak istediğinizi elde etmek için setfacl komutunu kullanabilirsiniz.

Solaris makinesinde, kullanıcılar ve gruplar için ACL'leri içeren bir dosyam var. Maalesef, tüm kullanıcıları listelemelisiniz (en azından bunu başka türlü çalıştırmanın bir yolunu bulamadım):

user::rwx
user:user_a:rwx
user:user_b:rwx
...
group::rwx
mask:rwx
other:r-x
default:user:user_a:rwx
default:user:user_b:rwx
....
default:group::rwx
default:user::rwx
default:mask:rwx
default:other:r-x

Acl.lst dosyasını adlandırın ve user_X yerine gerçek kullanıcı adlarınızı girin.

Artık aşağıdaki komutu vererek bu acl'leri dizininizde ayarlayabilirsiniz:

setfacl -f acl.lst /your/dir/here

Hepsi aynı grubun üyesiyse ve sadece grup izinlerini kullanıyorsa kullanıcı listesinin dışında bırakabilir misiniz?
David Dean

Ben de kendime aynı soruyu soruyordum. Bunu ben kurmayalı epey oldu. Ancak her yeni kullanıcı aldığımda (diğerleriyle aynı grupta) listeyi güncellemeyi unutuyorum ve yeni kullanıcının dosya yazamaması / silememesi ile ilgili şikayetler alıyorum. Yani cevap şu: Hayır, yapamazsınız.
innaM

4

kabuk betiğinizde (veya .bashrc) aşağıdaki gibi bir şey kullanabilirsiniz:

umask 022

umask yeni oluşturulan dosyalar için dosya izinlerinin nasıl ayarlanacağını kontrol eden bir maskenin ayarlarını belirleyen bir komuttur.


1
Bu doğru değil çünkü umask, izin ekleyemediği izinleri sınırlıyor
ACV

@ACV detaylandırır mısınız? Bu benim için çalışıyor, yeni oluşturulan dosyalar artık umask 002.bashrc dosyamda yaptığım zaman grup üyelerinin rw izinlerine sahip olmasına izin veriyor .
Arthur Dent

3
@ArthurDent umask 002, grubu değiştirmeden bırakarak başkalarına erişimi sınırlar. Unutmayın, bu ugo- diğerlerinin kullanıcı grubu. Ayrıca umask'ın temelde varsayılanlardan çıkarmak anlamına geldiğini unutmayın. Dosyalar için: 666 - 002664 anlamına gelir, bu da grubun etkilenmediği anlamına gelir.
ACV
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.