Chmod hesaplayıcı

Unix dosya izinlerini sekizlik (755), simgesel (rwxr-xr-x) ve bir onay kutusu ızgarası arasında dönüştürür; setuid, setgid ve yapışkan bit ile.

Yaygın modlar
SınıfOkumaYazmaÇalıştırma
Sahip
Grup
Diğer
Sekizlik
Simgesel
Sekizlik komut
chmod 644 file
Simgesel komut
chmod u=rw,g=r,o=r file
ls -l biçimi
-rw-r--r--

Bu araç ne yapar

Bir Unix sistemindeki her dosya, onu kimin okuyabileceğine, değiştirebileceğine ya da çalıştırabileceğine karar veren bir izin kümesi taşır. chmod komutu onları ayarlar ve bu izinleri, tam olarak aynı şeyi tanımlayan iki oldukça farklı yazımla kabul eder — üç basamaklı bir sekizlik sayı ve bir harf dizesi. Bu araç, her iki yazımı ve bir onay kutuları ızgarasını eşzamanlı tutar; böylece elinizde hangisi varsa ondan başlayıp ihtiyacınız olanı kopyalayabilirsiniz.

Tümüyle tarayıcınızda çalışır ve saf aritmetiktir: sunucu yoktur ve yazdığınız hiçbir şey hiçbir yere gönderilmez. Bir hesap makinesi ve bir başvurudur, gerçek bir makinede izinleri değiştirmenin bir yolu değil — bunun için ürettiği chmod komutunu kopyalar ve kendiniz çalıştırırsınız.

Üç grup, üç izin

İzinler üçlü üç grup olarak düzenlenir. Üç grup, dosyanın sahibi, ona sahip olan grup ve diğer herkes — «diğer». Her grubun içinde üç izin vardır: okuma, yazma ve çalıştırma.

  • Okuma (r) — dosyanın içeriğini görüntülemek ya da bir dizinin girdilerini listelemek.
  • Yazma (w) — dosyayı değiştirmek ya da bir dizinde girdi eklemek ve kaldırmak.
  • Çalıştırma (x) — dosyayı bir program olarak çalıştırmak ya da bir dizine girip içindeki dosyalara erişmek.

Çalıştırma, bir dizin için bir dosyadan farklı bir şey ifade eder ve bu insanları yakalar: okuyabildiğiniz ama çalıştıramadığınız bir dizin, içindekilerin adlarını görmenize izin verir ama hiçbirini açmanıza değil.

Sekizlik sayı nasıl çalışır

Her grubun üç izni, sabit değerleri toplayarak tek bir sekizlik basamağa paketlenir: okuma 4, yazma 2, çalıştırma 1'dir. Okuma-yazma-çalıştırma 4+2+1 = 7'dir; okuma-çalıştırma 4+1 = 5'tir; okuma-yazma 4+2 = 6'dır. Üç grup üç basamak verir.

755
7 = 4+2+1   # owner: read + write + execute
5 = 4+0+1   # group: read + execute
5 = 4+0+1   # other: read + execute

Yani 755, «sahip her şeyi yapabilir, diğer herkes okuyup çalıştırabilir ama değiştiremez» demektir; bu, bir program ya da bir dizin için olağan moddur. 644 — sahip okuma-yazma, diğer herkes yalnızca okuma — sıradan bir dosya için olağan moddur. Desen tanıdık olduğunda yaygın modlar bir bakışta okunur.

Simgesel dize

Diğer yazım, ls -l'in yazdırdığıdır: dokuz karakter, grup başına üç, her biri ya harfi ya da bir tire. 755, rwxr-xr-x'tir; 644, rw-r--r--'dir. Sekizlik sayıyla tam olarak aynı bilgiyi taşır, yalnızca kafanızda basamak toplamak yerine her izni görebilesiniz diye düzenlenmiş.

Bir ls -l satırının önünde onuncu bir karakter vardır — bir dizin için d, sıradan bir dosya için bir tire, simgesel bir bağlantı için l. O baştaki karakter dosyanın türüdür, bir izin değil ve chmod onu değiştiremez. Buraya bütün bir ls -l izin alanını yapıştırabilirsiniz ve tür karakteri yalnızca yok sayılır.

Özel bitler: setuid, setgid ve sticky

Dokuz sıradan bitin üstünde, önde isteğe bağlı bir dördüncü sekizlik basamak olarak yazılan üç özel bit oturur — setuid (4), setgid (2) ve yapışkan bit (1). Kendilerine bir sütun almazlar; bunun yerine her biri simgesel dizede bir çalıştırma yuvasını yükler; bu, insanların şaşırtıcı bulduğu büyük harflerin kaynağıdır.

  • Bir çalıştırılabilir dosyada setuid, onu başlatan kullanıcı olarak değil, dosyanın sahibi olarak çalıştırır. passwd'nin doğrudan yazamadığınız bir sistem dosyasını nasıl güncelleyebildiği budur — ve hatası olan bir setuid programının neden ciddi bir açık olduğu.
  • Bir çalıştırılabilir dosyada setgid, onu dosyanın grubu olarak çalıştırır. Bir dizinde daha yararlı ve daha güvenli bir şey yapar: içinde oluşturulan yeni dosyalar, oluşturucunun grubu yerine o dizinin grubunu devralır.
  • Bir dizinde yapışkan bit, herkes dizine yazabildiğinde bile, bir dosyayı yalnızca sahibinin silebileceği ya da yeniden adlandırabileceği anlamına gelir. /tmp'yi paylaşılan ama güvenli tutan budur. Düz bir dosyada hiçbir şey yapmaz.

Simgesel dizede ayarlı bir özel bit, çalıştırma yuvasını bir harfe çevirir: setuid için sahip yuvasında s, setgid için grup yuvasında s, sticky için diğer yuvasında t. Büyük/küçük harf, çalıştırmanın da açık olup olmadığını söyler — küçük harf evet, büyük harf hayır demektir.

rwsr-xr-x  4755   # setuid, owner executes
rwSr-xr-x  4655   # setuid, owner does NOT execute
rwxrwxrwt  1777   # sticky, other executes
rwxrwxrwT  1776   # sticky, other does NOT execute

Büyük bir S ya da T neredeyse her zaman bir hatadır: çalıştırılabilir olmayan bir dosyada bir özel bitin ayarlandığı anlamına gelir; böylece bitin üzerine hareket edeceği bir şey yoktur.

Komut satırında sekizlik ya da simgesel

chmod her iki biçimi de kabul eder ve bu araç ikisini de yazar. Sekizlik biçim her biti aynı anda ayarlar: chmod 755 file. Simgesel = biçimi aynı şeyi mutlak biçimde yapar — chmod u=rwx,g=rx,o=rx file — her grubu listeleyerek; böylece sonuç dosyanın neyle başladığına bağlı olmaz.

Hesap makinesinin gerek duymadığı ama karşılaşacağınız üçüncü, göreli bir biçim vardır: chmod +x file herkes için çalıştırma ekler, chmod g-w file grup yazmasını kaldırır, chmod o= file diğer için her şeyi temizler. O biçim, tüm şeyi ayarlamak yerine bitleri geçerli moda göre değiştirir; bu komut satırında kullanışlıdır ama gösterilecek tek bir «sonuç» yoktur.

Ayarlamamaya değer modlar

Bir izin aracı, bir modun kötü bir fikir olduğunu da söylemelidir. İkisi sürekli ortaya çıkar:

  • 777, her kullanıcıya okuma, yazma ve çalıştırma verir. Bir şey «çalışmadığında» refleks çözümdür ve neredeyse her zaman küçük bir sorunu gerçek bir güvenlik açığıyla takas eder. Doğru mod neredeyse her zaman daha dardır — genellikle 755 ya da 644.
  • Herkesin yazabildiği herhangi bir dosya (son basamak 2'yi içerir), makinedeki herhangi bir hesabın içeriğini yeniden yazmasına izin verir. Çalıştırılan, kaynaklanan ya da güvenilen herhangi bir şey için bu bir giriş yoludur. Bunun yerine bir gruba yazma verin ya da onu sahibe saklayın.

Araç bunları oluştukça işaretler. Hedefinizin bir dosya mı yoksa bir dizin mi olduğunu bilemez; bu yüzden onları hata olarak değil, ikinci bir bakışa değer şeyler olarak ifade eder — yapışkan bit bir dizinde doğru ve bir dosyada anlamsızdır ve hangisine sahip olduğunuzu yalnızca siz bilirsiniz.

Sıkça sorulan sorular

644 ile 755 arasındaki fark nedir?
644, sahip için okuma-yazma ve diğer herkes için yalnızca okumadır; sıradan bir dosya için olağan mod. 755, üç grubun hepsi için çalıştırma ekler; bir programın çalışması ve bir dizinin girilmesi için gereken budur. Belgeler ve kaynak dosyaları için 644, betikler ve dizinler için 755 kullanın.
Modum neden büyük bir S ya da T gösterdi?
Çünkü çalıştırma izni olmayan bir grupta bir özel bit ayarlandı. Küçük bir s ya da t, özel bitin ve çalıştırmanın ikisinin de açık olduğu anlamına gelir; büyük biçim, özel bitin açık ama çalıştırmanın kapalı olduğu anlamına gelir; bu genellikle modun amaçlanan şey olmadığı anlamına gelir — örneğin 4644 (rwSr--r--), kimsenin çalıştıramayacağı bir dosyada setuid'dir.
chmod 777 gerçekte ne yapar ve neden önerilmez?
Sahibe, gruba ve diğer herkese okuma, yazma ve çalıştırma verir — sistemdeki her hesap için tam erişim. Önerilmez, çünkü her korumayı bir anda kaldırır; herkesin yazabildiği bir dosya, herkesin kurcalayabileceği bir dosyadır ve herkesin yazabildiği bir dizin, herkesin dosya yerleştirebileceği bir dizindir. 777'ye başvuran neredeyse her durum, 755 ya da 644 artı doğru sahiplikle çözülür.
Baştaki basamağın orada olması gerekir mi?
Hayır. Özel bitlerin hiçbiri ayarlı olmadığında, mod yalnızca üç basamaktır — 0755 değil, 755 — ve bu aracın gösterdiği budur. Baştaki bir sıfır kabul edilir ve aynı şeyi ifade eder; baştaki bir 4, 2 ya da 1 sırasıyla setuid, setgid ya da yapışkan biti açar.
ls -l'den doğrudan bir satır yapıştırabilir miyim?
Evet. -rwxr-xr-x ya da drwxr-xr-x gibi on karakterlik izin alanını yapıştırın; araç baştaki tür karakterini soyar ve geri kalanı okur. Tür (dosya, dizin, bağlantı) bir izin değildir ve chmod onu değiştiremez; bu yüzden yok sayılır.
Girdiğim herhangi bir şey bir sunucuya gönderiliyor mu?
Hayır. Aracın tümü tarayıcınızda çalışan aritmetiktir. Hiçbir şey yüklenmez, günlüğe yazılmaz ya da saklanmaz; hiç ağ bağlantısı olmadan çalışmasının nedeni de budur.