Yazma okuma izni nasıl verilir, ancak dosya silinmez


12

Kullanıcılara diğer kullanıcı dizininde yazma ve okuma dosyaları oluşturma yeteneği vermek istiyorum, ancak oluşturulduktan sonra (silme biti burada çalışmayacak ...) dosyayı silme seçeneğine sahip olmamak istiyorum:

Ben kullanıcı var manager dizinle repository
ben kullanıcı var worker1ihtiyacı yazma için dosyaları bu /manager/repositoryancak dosyaları silemezsiniz
ben kullanıcı var worker2yazma dosyalarına ihtiyaç olduğunu /manager/repository dosyaları silmek olamaz ama
ben kullanıcı var worker3olduğunu yazma dosyalarına ihtiyaç /manager/repository ama yapamıyor dosyaları sil

ama worker 1-2-3sadece oluşturduktan sonra dosyaları silemiyor managerve rootdosyaları silebilirsiniz worker 1-2-3yarattı.

Ben birkaç denenmiş chownve chmodbaşarılı olamadı yapışkan bit uygulayarak ile hileler.


1
Do worker*Kullanıcıların belirli bir şekilde dizine yazma? Bir yorumda, günlük dosyalarının buraya gittiğinden bahsettiniz, bu, burada dosya oluşturmak için belirli bir yürütülebilir dosyanın başlatıldığı anlamına mı geliyor? Eğer öyleyse workergruba sudoçalıştırılabilir dosyayı çalıştırma izni verebilirsiniz manager. Sonra çalıştırılabilir managerkullanıcı işçiler tarafından okunabilir kullanıcı olarak günlükleri oluşturacaktı .
Centimane

Kullanıcı dosyayı değiştirebilirse içeriğini de silebilir, böylece dosyayı etkin bir şekilde "silebilir". Görünüşe göre dosya sistemlerine değil, bir çeşit "gönderim" arayüzüne ihtiyacınız var. E-postalar en basitleri olurdu.
ybungalobill

Yanıtlar:


8

Windows'tan farklı olarak Unix / Linux altında belirgin bir silme izni yoktur. Bir dosyayı silme (veya oluşturma veya yeniden adlandırma) hakkı, ilgili dizine bağlıdır. Çalışanların /manager/repository/dosya oluşturmasını, silmesini ve yeniden adlandırmasını reddetmek için çalışanların yazma iznini kaldırın .

Dosyaların oluşturulmasına izin vermek değil, bunların silinmesini reddetmek mümkün değildir.


günlük dosyası her zaman yazılacağı için yazma iznini nasıl kaldırabilirim
user63898

. Bu doğru eskiden olsa FreeBSD, Solaris veya benzer yeteneklere vermek Linux (Richacl yama) tarafından desteklenen, birçok modern sistemler genişletilmiş ACL (NFSv4 EDL desteklemeyen Windows NT ACL Kişisel stok Linux dağıtımı olsa ona sahip olmak değil muhtemeldir.
Stéphane Chazelas

@ user63898 yazma izinlerini dosyanın kendisinden değil, dizindeki dizinden kaldırırsınız.
GnP

6

Öncelikle sisteminizde ACL'nin etkinleştirildiğinden emin olun, ardından bu komutu çalıştırın

setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository

Nasıl çalışır

  • Bu komut, dizindeki sahip için okuma, yazma ve yürütme izinleri verir /manager/repository. Bu tüm izinleri iptal eder worker1, worker2ve worker3.

  • Bu, diğer kullanıcılara okuma ve yazma erişimi verir, ancak silme erişimini reddeder.


Gönderen man setfacl:

-d, --default
       All  operations  apply to the Default ACL.

-R, --recursive
       Apply operations to all files and directories recursively.

-m, --modify
       Options to modify the ACL of a file or directory.

teşekkürler, ama sorun kullanıcılar her zaman oluşturulur olmasıdır. ve bazıları yönetici tarafından silinir. yani her zaman dizini setfacl ile güncellemem gerekiyor mu? daha genel bir çözüm var mı?
user63898 7:16

evet worker1 öğesinden dosya oluşturmaya çalıştığımda touch /manager/repository/x.txt im getting: touch: `` /manager/repository/x.txt '' ye dokunamıyorum: İzin reddedildi
user63898

ls -ld deposu im i yaptığımda hala izin verilmedi: drwxrwxr-t 2 yönetici kullanıcı 4096 Eyl 7 11:30 depo /
user63898

setfacl -d -R -m kullanıcı :: rwx, kullanıcı: işçi1: --- depo / yaparken işçi1'den dosya oluşturmaya çalışırken /manager/repository/x.txt im getting: touch: dokunamıyorum `/ manager /repository/x.txt ': İzin verilmedi
user63898

5
bu hala birinin boş bir dosya yazmasına izin vermez mi? Gibi echo " " > $filedosya içeriği teknik olarak bir yazma, ama etkili bir şekilde siler "" ile clobber istiyorsunuz. Bu svn gibi gerçek bir repo burada en iyi bahis gibi görünüyor.
Centimane

3

Bunu izinlerle yapmak için, NFSv4 ACL'lerine benzer ACL'leri destekleyen bir sisteme ihtiyacınız olacaktır. Örneğin, FreeBSD'de, dosya sistemi nfsv4aclsbayrakla bağlanmışsa şunları yapabilirsiniz:

mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir

Grup üyelerine verilen izni açıkça reddetmek .delete_childworker-group

Ancak, işçiler oluşturdukları dosyaların sahibi olacağından, üzerlerindeki EKL'leri değiştirebileceklerini ve kendilerine deleteizin vererek , bunun delete_childana dizinin iznine göre öncelik taşıyacağını unutmayın. bunun bir yolu olduğundan emin olun (en azından FreeBSD'deki UFS dosya sistemlerinde). Örneğin:

$ touch file
$ rm -f file
rm: file: Operation not permitted
$ setfacl -m owner@:d::allow file
$ rm -f file
$

0

/manager/repositoryKlasörden yazma izinleri almak . Bu nedenle, root olmayan tüm kullanıcılar içindeki dosyalara yazabilir veya bu dosyaları silebilir /manager/repository, ancak bu dizindeki herhangi bir dosyayı silemez.

chmod 755 /manager/repository

0

dosyaları ve klasörleri değiştirebiliriz ancak silemeyiz.

Öznitelikleri kaldırmak için aşağıdaki komutları çalıştırın:

Dosyalar için:

$ sudo chattr -R -a file.txt

Dizinler için:

$ sudo chattr -R -a dir1/

(1) Belgelere göre, aözellik yalnızca ek anlamına gelir. Kullanıcılar bu dosyaları düzenleyebilir mi? (2) aÖzniteliğin bir dizine ayarlanmasının etkisi nedir ?
Scott
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.