0111 veya 0333 gibi izinlerin amacı


17

Böyle 111 veya 333 olarak Linux izinleri amacı nedir (yani kullanıcı yürütebileceği , ama okuyamaz dosyası), otomatik okuma yeteneği anlamına gelmez yürütmek yeteneği olur?


1
Böyle bir ortama örnek var mı? Bence haklısın. Okuyamayacağınız şeyi yürütemezsiniz. Bu kombinasyonlar sadece 0000 ile 0777 arasındaki izinler alanında teoriktir. Sayının sekizlik tabanını göstermek için baştaki 0 ​​eklenmelidir.
ikrabbe

6
Bir komut dosyası (örn. Kabuk-komut dosyası) olmadığı sürece, aslında bir komutu yürütmek için okuma iznine ihtiyacınız yoktur . "Normal" bir yürütülebilir dosya - ör. su, bash veya vi - kullanıcının çalıştırmasına izin vermek için çalıştırılabilir bitin ayarlanması yeterlidir. Okunamayan, kopyalanamayan bir dosya . Bu nedenle, kullanıcının güvenlik açısından önemli bir komutu (su gibi) kopyalamasına izin vermeyerek, kendi kopyasını yapması ve ayrıca sökmeye çalışması engellenir. * BSD, yürütme ancak okuma izni olmayan birkaç komut içerir.
Baard Kopperud

Yanıtlar:


25

Onunla oynadım ve görünüşe göre, yürütme izinleri okuma izinleri anlamına gelmiyor. İkili dosyalar okunabilir olmadan yürütülebilir:

$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw 
hello world
$ cat hw
/bin/cat: hw: Permission denied

Üzerinde hem okuma hem de yürütme izni bitleri olmadığı sürece, komut dosyaları çalıştıramıyorum:

$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh 
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied

4
İkinci örnekte # kullanıldığından bu doğrudur. ELF başlığını kaçırdığı için başlamak ve böylece hangi yürütülebilir dosyayı kullanacağını tahmin etmesi için dosyanın okunabilir olmasını gerektirir. Bu, dosyaların içeriğinin başka konumlara kopyalanmasını önlemek istediğiniz yaygın bir durumdur. Lisans yöneticisi bunu görebileceğiniz yaygın bir örnektir.
hspaans

1
Yine de yalnızca yürütülebilir bir ikili dosyayı okuyabileceğinizi unutmayın: unix.stackexchange.com/a/34294
小 太郎

6
@hspaans: Mesele çekirdek tarafından işlenir ve çekirdek izinler gibi ilginç küçük şeyleri umursamaz. Bu var kabuk okuma erişimi gerekiyor (veya yorumlayıcı). Çekirdek çalışır (diyelim) /bin/bash hw.shve sonra bash hw.shokumaya açılmaya çalışır (ve başarısız olur).
Kevin

2
Ben çekirdek bu bir çok umut yok izinleri hakkında dikkat. Başka bir şey yapmaz. @ Kevin'in gönderisindeki korkunç cümlenin anlamı, çekirdeği kullanmasına bakılmaksızın, çekirdeğin yalnızca dosyaları yürütmek için yürütme izinleri gerektirmesidir.
Emil Jeřábek

2
@ EmilJeřábek Çekirdek, bir başvuru sürecinin neler yapabileceğine karar verirken izinleri önemser. Ancak izinleri uygulayan bileşen olduğu için, bunları dahili olarak da göz ardı edebilir. Böylece, yorumlanmış bir dosyanın nasıl yürütüleceğini belirlerken shebang satırını okuyabilir veya yalnızca çalıştırılabilir bir ikili dosyanın içeriğini belleğe okuyabilir.
Barmar

16

dizinler için mantıklıdır, örneğin, belirli bir dizinde yürütülebilir dosyaları (gizli) tutarsanız ve daha sonra kullanıcıların dizin içeriğini görmeden bu dosyaları çağırmasına izin verirseniz (ancak onları bilgilendirdikten sonra belirli bir dosyanın orada olduğunu bilmeleri!). 111 ile karşılaştırıldığında 333, dizinin içeriğini görmeden bu dizinlere / dizinlerinden dosya yazmanıza / silmenize izin verir.


5
Benim Uni'mde, bu izinler ödevleri öğrencilerden birinin çalıştığını görmeden bir dizine bırakmak için kullanıldı. Öğretim görevlisi eski skool'du.
DarkHeart

@DarkHeart İlginç. Umarım dosya adlarına rastgele bir bileşen eklemeniz gerekiyordu, çünkü aksi takdirde, sınıf arkadaşlarınızdan denemek ve kopyalamak için bir teşvik değilse, ne olduğunu bilmiyorum.
PSkocik

5

Açıkçası tüm kombinasyonlar Aslında gerek yok ... bu faydalıdır, ancak özellikle belirtilen adresle almamaya readsadece - bir dosya yürütme izni executesöz konusu dosya bir komut dosyası (örneğin bir kabuk yazılımıdır sürece - izni ( .sh), perl-script ( .pl) vb.). Normal ikili dosyalar sadece executeizinle yürütülebilir . * BSD sistemlerinde, birkaç yürütülebilir dosya executeizinsiz izin verir read, özellikle "güvenlik açısından önemli" komutlarda - ör su.

Öyleyse neden kullanıcılara read-permisyon (ve sadece execute-permisson) vermiyorsunuz? Bir kullanıcı tarafından okunamayan bir dosya olduğundan, o kullanıcı tarafından da kopyalanamaz ! İznin kaldırılması, readkullanıcıların daha sonra kötüye kullanabilecekleri (örn SUID=root on. Alma) kendi "kişisel" yürütülebilir dosya kopyalarını oluşturmalarını engeller .

Ve write-permission'a sahip olmamak, bir dosyanın acilen silinmesini önler.

Unutmayın, sahibine ne read-nor-izin writevermezse biraz nadirdir, ancak bazen bile ownersadece bir dosyayı silmeyi önlemek iyi bir fikir olabilir . Tabii ki owner- bahsetmemek root- bu tür önlemleri, başka yollarla değilse de, her zaman sadece chmoddosyadaki izinle atlayabilir.


"iyi bir fikir olabilir. owner sadece bir dosyayı silmeyi ." - bir dosyayı silmek için herhangi bir izne (okuma, yazma veya yürütme) gerek duymamanız.
Celada

Yalnızca çalıştırılabilir dosyalar, örneğin yürütülebilir dosya bir veritabanına bağlanmak ve işini yapmak için çalıştırıldığında kullandığı bir veritabanı parolası gömer, ancak parolayı göstermek istemiyorsa kullanılabilir.
Celada

@Celada, bu eski bir soru, ama bu tür bir yaklaşım, bellek bölgesi ofsetlerini arayarak /proc/${PID}/mapsve daha sonra belleğin ilgili bölümlerini okuyarak belleğe dökülmeye yatkın olmaz /proc/${PID}/memmı? Veya yürütülebilir dosyadaki izinlerin kısıtlanması, yürütme sırasında bellekteki ilgili bölümlerindeki okuma izinlerini de kısıtlıyor mu? (İkincisi olası görünmüyor, IMO.)
Spencer D
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.