Yeni dosya iznini ana dizinden miras almak nasıl yapılır?


85

Bende bir dizin var data. Sonra 'robot' kullanıcı kimliği altında bir script çalıştırıyorum. robot datadizine yazar ve içindeki dosyaları günceller. Fikir datahem benim hem de robotun güncellenmesi için açık.

Böylece izin ve sahip grubunu bu şekilde kurarım

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

robotun hem ben hem de robotun olduğu yer. İzni ve sahip grubunu üst dizin gibi tekrarlı olarak değiştiririm.

Düzenli olarak yeni dosyaları datakullanarak dizine yüklerim rsync. Maalesef, yüklenen yeni dosyalar ana direktörlüğün umduğum gibi iznini devralmaz. Bunun yerine bu gibi görünüyor

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

Robot güncellemeye çalıştığında new-file.txt, dosya izni olmadığından başarısız olur.

Umask ayarının işe yarayıp yaramadığından emin değilim. Her durumda, yeni dosyalar gerçekten onu takip etmiyor.

$ umask -S
u=rwx,g=rx,o=rx

Sık sık Unix dosya izniyle şaşırdım. Doğru bir planım var mı? Debian Lenny kullanıyorum.

Yanıtlar:


53

Sisteminizin varsayılan umask'ını değiştirmek istemezsiniz, bu bir güvenlik riskidir. Yapışkan bit seçeneği bir dereceye kadar çalışacaktır, ancak ACL'leri kullanmak en iyi yoldur. Bu düşündüğünden daha kolaydır. Temel ACL'lerin sorunu, varsayılan olarak özyinelemeli olmadıklarıdır. Bir dizine bir ACL belirlerseniz, yalnızca bu dizinin içindeki dosyalar ACL'yi devralır. Bir alt dizin oluşturursanız, ACL yinelenecek şekilde ayarlanmadıkça ana ACL'yi almaz.

İlk önce, dizinin açık olduğu birim için ACL'lerin etkinleştirildiğinden emin olun. Eğer varsa tune2fs, aşağıdakileri yapabilirsiniz:

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

Eğer yoksa tune2fs, inceleyin fstabs:

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

"Varsayılan" yazan dördüncü sütun sistemimde (CentOS 5.5) anlamına geliyor, ACL'ler açık. Şüphe durumunda, varsayılan olarak bırakın. Eğer ACL ve It hatalarını yola çalışırsanız, geri dönüp vb / için acl seçeneği eklemek / fstab doğru varsayılan sonra: defaults,acl.

Anladığım kadarıyla, kullanıcı grubundaki herkesin veri dizinine yazma erişimi olmasını istiyorsunuz. Bu, aşağıdakiler tarafından gerçekleştirilir:

setfacl -Rm g:users:rwX,d:g:users:rwX data/

Bu komutu kullandım ancak sorunumu çözmedi, bu komutu nasıl geri alabilirim?
Itai Ganot

İle ubuntu üzerinde hile mü sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something. PHPUnit testlerinde sorun vardı. Çalışan testlerden günlük dosyaları oluşturduktan sonra apache kullanıcısı www-databunları yazamadı / okuyamadı.
s3m3n

2
@Itai Ganot - setfaclman sayfasına göre -bveya --remove-allgenişletilmiş ACL'leri kaldırır.
jww

Yani, sadece setfacl -Rm g:users:rwX,d:g:users:rwX data/sonunda ekleyeceksin /etc/fstab?
425nesp

@ piña no. / etc yapmak tek değişiklik / fstab değiştirmektir defaultsiçin defaults,acl. setfaclterminalden çalıştırmanız gereken bir komuttur. data/değiştirmek istediğiniz dizinin yolu ile değiştirilmelidir.
Segfault,

32

Bir dizini setgid ( g+s) işaretlemek yeni dosyaları dizinin grup sahipliğini devralır, ancak -grsync seçeneği bunu geçersiz kılmaya çalışır.


11
Setgid biti sadece yaratılan dosyaları gruba devreder / if / yeni dosyayı oluşturan kişi o grubun bir üyesidir; Eğer yaratan kullanıcı sahibi ise ama grubun bir üyesi değilse veya dizin dünyaya yazılabilirse, setgid biti hiçbir şey yapmaz. Ve tüm dosya oluşturan kullanıcılar için umask'ın hala uygun grup erişimine izin verecek şekilde ayarlanması gerekir.
dannysauer 12:13

1
@ dannysauer "eğer oluşturma kullanıcısı sahip ancak grubun bir üyesi değilse ... setgid bit hiçbir şey yapmaz" - teşekkür ederim. Şimdi mantıklı geliyor - ama rsync'in geri bildirimi olmadan neden işe yaramadığını merak ediyordu.
user12345

4

Diğer cevaplar genel bir durumda geçerlidir, ancak rsync'in sorunun kaynağı olduğunu belirttiğiniz gibi, sadece çağrısını ayarlamanız gerekebilir.

Başlangıç ​​için, popüler -abayrak rsync kopyalama izinlerini verir; -ristead kullanın -aveya ekleyin -no-p(izinsiz senkronizasyon yok) ve -no-g(grup senkronizasyon yok). Ayrıca rsync --chmod, yeni oluşturulan dosyalardaki izinleri değiştirmek için bayrağını da destekler .


3

Umask, istediğiniz izinler için yanlış. 002 umask istiyorsunuz. Halen 022 umask var. Ayrıca, setgid dizini yapmayla ilgili yorumların doğru, ancak dosya grubu sahipliğini değiştirmek istediğiniz bir şey olup olmadığından emin değilim.

Unix dosya izinleri aslında çok basit bir model. ACL'leri kendimi şaşkına çeviriyorum. :-)


4
"Unix dosya izinleri aslında çok basit bir model. ACL'leri kendimi tamamen karıştırıyorum." - Ben tersini hissediyorum (ama yine de +1). ACL'ler (ve ACE'lere İzin Ver / Reddet) basit ve Unix izinleri anlamsız. Ama bu bir Postfix / Dovecot / Clam / SpamAssassin kurulumundan muzdarip bir adamdan geliyor.
jww
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.