Diğerleri tarafından belirtildiği gibi, dosya izinleri bir bit maskesidir. Sistem garip ya da işe yaramaz kombinasyonların kullanımını engelleme yolundan çıkmaz: işe yaramaz, zararlı anlamına gelmez.
Yalnızca yazma iznim varsa, bu, dosyanın içeriğini ekleyebileceğim veya değiştirebileceğim, ancak geçerli içeriği okuyamadığım anlamına mı geliyor?
Evet.
Yalnızca okumuyorsam, neden dosyayı kopyalayıp sonra uygulayamıyorum?
İstisnalarla yapabilirsiniz. "Ayrıcalıklı" bir dosyayı (setuid / setgid bit veya Linux dosya yeteneklerine sahip) kopyalamak bu özellikleri kopyalamaz. Ayrıca, kopyalanacak bir yere de ihtiyacınız vardır ve / home bölümünün dosya yürütme işlemine izin vermediği bir sisteme sahip olabilirsiniz.
Aynısı, ilgili yorumlayıcıyı manuel olarak çağırarak kopyalanmadan da yapılabilir. Örneğin, kabuk komut dosyalarını çalıştırılabilir sh /path/to/script
olmasalar bile çalıştırabilirsiniz. Linux'taki ikili dosyaların da bir tercümanı var /lib/ld-linux.so
.
Ve eğer sadece izinlerini yerine getirmişlerse, bunun anlamı ne? Bir dosyayı çalıştırmak onu görmenizi gerektirmiyor mu?
Bunu yapar - ancak bu setuid biti işlendikten sonra kontrol edilir . Bir setuid programı yürütüyorsanız, sahibinin ayrıcalıklarına sahip olacak, bu nedenle sadece sahibinin + r'ye ihtiyacı var.
Dizinler için, + x farklı bir anlama sahiptir (klasörü dolaşmanıza, yani içindeki öğelere erişmenize izin verir). İçinde bir dosyanın tam adını biliyorsanız, dizinde + + değil + x ile erişebilirsiniz.
Yürütme izni verilmiş olması nerelerde fark yaratır? Bir .txt dosyası çalıştırmak mantıklı değil. Windows'da örneğin .exes, .bats ve benzeri vardır. Unix sistemlerinde sadece .sh yi biliyorum. Yürütülebilir dosyaları tanımlayan belirli sayıda uzantı var mı?
Yürütülebilirlik, dosya adıyla değil, içeriğiyle tanımlanır. (Ne de olsa , içeriği değil adını uyguluyorsunuz .)
Çekirdek bir dosya olarak nasıl yükleneceğini bildiğinde bir dosya çalıştırılabilir. Linux çekirdeği ELF ikili dosyalarını ve başlıklı "script" dosyalarını #!
ilk satır olarak anlar . (Diğer Unix benzeri işletim sistemlerinde aynıdır.) Bu nedenle, yalnızca bu iki tür dosyada + x kullanmak mantıklıdır.
Örneğin, bir komut dosyası dosyası ile başlarsa #!/bin/sh
, o zaman yürütme el ile çalışan ile aynı yapar /bin/sh myscript.sh
. Aynısı Python veya Perl veya Ruby veya TCL veya C # veya Node / JavaScript veya başka herhangi bir dile uygulanabilir. (Yine, dosya adının sonekinin alaka düzeyi olmadığını unutmayın - yalnızca sihirli başlık yapar.)
Bunun avantajı, sisteminizin çeşitli dillerde yazılmış komutlara sahip olabilmesi ve her komutun hangi tercümanı kullandığına dikkat etmeden bunları kullanabilmenizdir.
Windows benzer bir durumda. Aynı zamanda 'çalıştırılabilir' izin bitine sahiptir ve grafik arayüzü dosya adlarında .exe sonekini isterken, asıl çekirdek sadece dosyanın içeriğini önemser. (Windows, MZ / PE ikili çalıştırılabilir dosyalarını kullanır ve komut dosyaları için #! Öğesini desteklemez.)