SADECE yazma iznine sahip klasör işe yaramaz… değil mi?


10

Yıllarca Linux ile çalışıp boş zamanımı kendim bularak bazı temel bilgileri tekrar gözden geçirmeye karar verdim. Bu yüzden izinler (kaynak kodunu kontrol etmeden) ve klasörler için özel durumlarıyla ilgili bilgileri yeniden okudum ve klasör izinleri hakkında (belirli bir kullanıcı için / group / others): Bir klasörü iki sütunlu bir tablo olarak hayal ediyorum, şöyle:

filename | inode    
foo      | 111  
bar      | 222 

Okuma tablonun sol sütun okumak (ve liste) olabilir izni araçları, yazma ekleme ve masaya girdileri kaldırma ve izni karşılık yürütmek inode'a dosya adından çevirmek mümkün izni karşılık gelir; yani klasörün içeriğine erişebilirsiniz .

Bazı deneyler yaptım ve sonuçların hepsi benim bu "dünya görüşü" ile tutarlı, ama bir sonuç kaçınılmaz görünüyor: izinleri olan bir klasör d-w-------tamamen işe yaramaz. Ayrıntılı: içeriğini listeleyemezsiniz, içeride olduğunu bildiğiniz hiçbir dosyayı okuyamazsınız (çünkü adları inode'lara çeviremezsiniz), dosyaları kaldıramaz veya yeniden adlandıramaz veya ekleyemezsiniz, çünkü yine çeviri anlamına gelir ve hardlinks bile ekleyemezsiniz (çünkü, sanırım, bu bir isim ve bir inode numarası eklemek anlamına gelir, bu da her ikisini de bileceğiniz anlamına gelir, bu da yine surma yaparak, izin izninin ayarını kaldırma amacını ihlal eder) . Orada eğer Ve tabii ki, vardır böyle bir klasörün içinde dosyaların içindekileri silemediğinden, o zaman, ya bu klasörü silemezsiniz.

Yani ... iki soru sormak istiyorum:

  1. Bu benim benzetimim doğru mu, yoksa büyük bir gaf mı?
  2. Önceki yanıttan bağımsız olarak, açıklandığı gibi izinlere sahip bir klasöre sahip olmanın uygun olduğu herhangi bir durum var mı?

3
Her kombinasyon yararlı olmayabilir. Örneğin, İngilizce kelimelerimiz var, bu kelimeler harflerden oluşuyor, tüm kombinasyonlar geçerli kelimeleri oluşturmuyor. örneğin aoeuidhtns
ctrl-alt-delor

Bu şekilde örneğin bir dosya oluşturamazdınız mı? Sen istemek dosya sistemi uzay ve inode'a ve dizin tablosundaki isim ve düğüm yazma sonra. Aynı adda ancak aynı dizinde farklı inode ile 2 dosyaya sahip olmak için sadece probleminiz olmalı ...
Hastur

@Hastur: Ben de öyle düşündüm ama sonra mkdir foo ; chmod 200 foo ; touch foo/barben olsun touch: cannot touch ‘foo/bar’: Permission denied. Foo / bar zaten mevcut olsa bile bu olur. Ben bash (Arch Linux) test ediyorum.
wmnorth

Benim hatam, sistem kaynak kodundan yeniden yazdığını düşünüyordum ... aynı dizinde aynı ada sahip iki dosyamız olamaz, bu yüzden onu oluşturma imkanı vermek mantıktır.
Hastur

Evet, işe yaramaz. İnode çözünürlüğü de "x" ve "r" gerektirir, bu nedenle dizinlerde tek bir "rw" bile işe yaramaz.
peterh - Monica'yı geri

Yanıtlar:


3

Anlayışınız hemen hemen doğrudur. Yürütme iznini düşünmenin daha iyi bir yolu, dizinde bir dosya veya dizin adıyla (yalnızca adın kendisini okumak dışında) bir şeyler yapmanıza izin vermesidir . Bu şeylerin çoğu adın bir inode'a çevrilmesini içerir, ancak aynı zamanda yeni adlar oluşturmayı ve mevcut adları kaldırmayı içerir.

Bu nedenle, yürütme olmadan dizine yazma izni oldukça işe yaramaz, çünkü içindeki dosyalara erişemezseniz gerçekten yazabileceğiniz bir şey yoktur.


1
  1. Bu benim benzetimim doğru mu, yoksa büyük bir gaf mı?

Bence doğru, bir klasöre yazabilmek için wx iznine ihtiyacınız var.

  1. Önceki yanıttan bağımsız olarak, açıklandığı gibi izinlere sahip bir klasöre sahip olmanın uygun olduğu herhangi bir durum var mı?

Bir klasöre bilgi yazan bir işleminiz olabilir ve başka bir klasör onu tüketir, ancak yazarın o yerde depolanan diğer bilgileri okumasını önlemeniz gerekir.

Daha önce açıklanan durum otomatik hız denetim birimlerinde yararlıdır. Bu birimler, devlet memurunun tağşiş olasılıklarını en aza indirmesi gereken bir doğrulama sürecinden geçmelidir. Bazı otomatik hız denetim birimlerinde, sistemin ihlal kayıtlarını depoladığı harici bir sd bellek kartı bulunur. Ancak, doğrulanan birimin davranışını yasadışı olarak değiştiren bir "sihirli" yapılandırma dosyası da saklayabilir. Bu nedenle, ihlal kaydını yazan işlemin sd hafıza kartından hiçbir şey okuyamaması gerekir.

Burada sadece yazma ile bir örnek, o zaman wx ile çalışmak için nasıl bir örnek:

Bir cihaz monte edin

root@leon:/media# mount -o umask=527,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/media# ls /media/pen/ -la
total 44
d-w-r-x--- 10 enforcer ftp  4096 Dec 31  1969 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..

sonra kullanıcı uygulayıcısı ile yeni bir dosya yazmaya çalışın

enforcer@leon:~$ touch /media/pen/hola
touch: cannot touch ‘/media/pen/hola’: Permission denied

wx ile bağlantısını kesin ve yeniden takın

root@leon:/media# umount /dev/sdb1
root@leon:/media# mount -o umask=427,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/home/jjorge# ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer wim  4096 Dec 31  1969 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..

Tekrar deneyin

enforcer@leon:~$ touch /media/pen/hola
enforcer@leon:~$ ls /media/pen/
ls: cannot open directory /media/pen/: Permission denied
enforcer@leon:~$ cat /media/pen/hola
cat: /media/pen/hola: Permission denied

ftp@leon:/home/jjorge$ ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer ftp  4096 Oct 20 10:20 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..
--wxr-x---  1 enforcer wim     0 Oct 20 10:20 hola

Bu yapılandırma ile artık yazabilirsiniz

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.