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.
| Sınıf | Okuma | Yazma | Çalıştırma |
|---|---|---|---|
| Sahip | |||
| Grup | |||
| Diğer |
chmod 644 filechmod u=rw,g=r,o=r file-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.
chmod 755 ne anlama gelir
Neredeyse her betiğin, her programın ve her dizinin vardığı moddur ve her seferinde bir grup olarak okunur. Her basamak, o grubun üç izninin toplamıdır — okuma 4, yazma 2, çalıştırma 1 — yani 7 üçünün hepsi, 5 ise yazma dışarıda bırakılmış okuma ile çalıştırmadır.
- Sahip — 7 = 4+2+1. Okuma, yazma ve çalıştırma: dosyayı düzenleyebilir ve çalıştırabilirsiniz.
- Grup — 5 = 4+0+1. Yazma olmadan okuma ve çalıştırma: dosyanın grubundakiler onu okuyup çalıştırabilir, değiştiremez.
- Diğer — 5 = 4+0+1. Yine aynısı: makinedeki her başka hesap onu okuyup çalıştırabilir ve hiçbiri değiştiremez.
Tam yazıldığında bu rwxr-xr-x olur ve komut chmod 755 file — ya da harfler size daha kolay geliyorsa chmod u=rwx,g=rx,o=rx file. Bir dizinde aynı bitler başka türlü okunur, çünkü orada çalıştırma içine girip içindekine ulaşabilmek anlamına gelir: 755, herkesin listeleyip içine girebildiği, girdi ekleyip çıkarmayı ise yalnızca sahibinin yapabildiği bir dizindir. Hesap makinesi 755 hakkında hiçbir şey söylemez, bu da bilerektir — başka hesapların yazdığınızı hâlâ çalıştırabildiği en dar moddur. Grubun da dosyayı düzenlemesi gerekiyorsa grup yazmasını ekleyen mod 775 olur, 777 değil.
chmod 644 ne anlama gelir ve dosyalarınızda neden zaten var
644, çalıştırma bitlerinin tümü çıkarılmış 755 demektir: sahibe 6 = 4+2, sonra gruba 4 = 4+0+0 ve diğere yine 4, yani rw-r--r--. Kimse onu çalıştıramaz ve bu, yalnızca okunan her şey için tam olarak doğrudur — bir belge, bir HTML sayfası, bir yapılandırma dosyası, başka bir programın derlediği bir kaynak dosyası. Bir dizinde ise kısıtlayıcı değil bozuktur: çalıştırma olmadan hiçbir şey içine giremez, dolayısıyla içindeki adlar listelenir ve hiçbiri açılmaz.
Ayrıca kimse dokunmadan önce yeni bir dosyanın genellikle taşıdığı moddur ve nedeni umask. Dosya oluşturan bir program normalde 666 ister, dizin oluşturan bir program 777; sonra umask, dosya var olmadan önce adını verdiği bitleri siler. Yaygın umask 022 ile — yazma gruptan ve diğerden alınmış — 666 644 olur ve 777 755 olur; bu yüzden bu ikisi her yerdedir ve bu yüzden bu aracın sunduğu ilk iki moddur. Kendi değerinizi görmek için kabukta umask yazın.
- umask 022, alışıldık öntanımlı değer — yeni bir dosya 644, yeni bir dizin 755 olarak çıkar.
- umask 002, her kullanıcının kendi grubu olduğu yerlerde ayarlanır — 664 ve 775, böylece gruptakiler de düzenleyebilir.
- umask 077, özel ayar — 600 ve 700, sahibinden başkasının okumasına bile izin vermez.
Altısı da burada hazır modlar ve bu tesadüf değil: insanların gerçekten ayarladığı üç umask, bir kez dosyaya ve bir kez dizine uygulanmış hâlidir. Onları altı değer değil üç çift olarak okumak, modları aramayı bırakmanın en hızlı yolu.
chmod 711 ne anlama gelir: gir, ama bakma
711, okuma olmadan çalıştırma veren yaygın moddur: sahibe 7 = 4+2+1, sonra iki kez 1 = 0+0+1, yani rwx--x--x. Ancak dizinin iki iznini yeniden ayırınca anlam kazanır — okuma adları listeler, çalıştırma içinden geçirir — bu yüzden 711 olan bir dizine, aradığı şeyin adını zaten bilen herkes girebilir ve onu kimse listeleyemez.
- Bir dizinde bu gerçekten işe yarar. 711 olan bir ev dizini, bir web sunucusunun ya da paylaşılan bir makinedeki başka bir hesabın /home/you/public/report.pdf dosyasını açmasına izin verirken ls /home/you reddedilir. Sahibinden hiçbir şey gizlenmez; adlar yalnızca dışarıdan sayılamaz.
- Bir dosyada neredeyse işe yaramaz. Bir kabuk betiğini çalıştırmak, bir yorumlayıcının dosyayı açıp okuması demektir; dolayısıyla okuma olmadan çalıştırma başarısız olur. Yalnızca çekirdeğin kendisinin yüklediği, derlenmiş bir ikili dosya hâlâ çalışır. Başkalarının çalıştırabileceği bir betik istediyseniz istediğiniz 755 idi.
Hesap makinesi 711 hakkında da bir şey söylemez, çünkü 755’ten daha geniş değil daha dardır: 755’in vermediği hiçbir şeyi vermez. Komşuları aynı nedenle ortaya çıkar — 751 diğere kapatılan listelemeyi gruba verir ve 700 geçişi bile geri alır; tek bir hesap için düşünülmüş bir dizinin istediği de budur.
777 ve 1777: bir bit fark ve aynı öğüt değil
Paylaşılan bir dizinin kendine çektiği iki mod tek bir bitle ayrılır ve bu araç onlara bilerek farklı yanıt verir. 777, rwxrwxrwx’tur ve tehlike olarak işaretlenmiş döner; 1777, rwxrwxrwt’tur, sade bir not olarak döner ve yukarıdaki hazır modlardan biridir — /tmp’nin gerçekten taşıdığı moddur.
- 777 — her basamak 4+2+1: sahibe, gruba ve diğer herkese okuma, yazma ve çalıştırma. Bir şeyi koruyacak hiçbir şey kalmaz: her hesap dosyayı yeniden yazabilir ve her hesap bu modu taşıyan bir dizindeki bir girdiyi silebilir ya da değiştirebilir. Bir izin sorununa verilen refleks çözümdür ve neredeyse her zaman küçük bir sorunu gerçek bir sorunla değiştirir.
- 1777 — aynı dokuz bit, artı yapışkan bit; o da bir girdinin silinmesine ve yeniden adlandırılmasına yalnızca o girdinin sahibine izin verir. Bu tek kısıtlama, bir dizini herkese yazılabilir bırakmayı güvenli kılan şeydir ve /tmp’nin çalışmasının nedenidir: oraya herkes bir dosya oluşturabilir ve kimse başkasının dosyasını kaldıramaz.
Bu ayrım yalnızca diğerin de çalıştırması olduğu yerde geçerlidir ve araç bu konuda katıdır. 1666, rw-rw-rwT’tur — hiçbir grubun çalıştırması olmayan bir yere konmuş yapışkan bit — ve bu biçimde hiçbir şey kullanılabilir bir dizin olamaz; dolayısıyla yapışkan bit hiçbir şeyi korumaz ve mod, tam olarak 666 gibi, herkesin yazabildiği olarak en yüksek ağırlıkla işaretlenir. Büyük T aynı şeyi tek karakterde söyler.
Yani: paylaşılması gereken bir dizinin istediği 1777, hatta daha iyisi doğru grupla birlikte 775’tir; ve açılmayan bir dosya neredeyse her zaman bir sahiplik sorunudur, 777 gerektiren bir durum değil.
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.
- chmod 711 ne yapar?
- Sahibe her şeyi verir, gruba ve diğer herkese yalnızca çalıştırma verir — rwx--x--x. Bir dizinde bu, zaten bildikleri bir yola oradan geçebilecekleri ama içinde ne olduğunu listeleyemeyecekleri anlamına gelir; paylaşılan bir makinedeki bir ev dizininin genellikle istediği de budur. Bir dosyada işe yaramaz: bir kabuk betiğinin çalışması için yorumlayıcısı tarafından okunması gerekir, bu yüzden okuma olmadan çalıştırma yalnızca başarısız olur.
- chmod 777 ile chmod 1777 arasındaki fark nedir?
- Bir bit — baştaki 1 olarak yazılan yapışkan bit; son karakteri x’ten t’ye çevirir. İkisi de her hesaba okuma, yazma ve çalıştırma verir; 1777 ayrıca bir girdiyi silmeye ya da yeniden adlandırmaya yalnızca sahibine izin verir. Bu yüzden bu araç 777’yi neredeyse hiçbir zaman doğru değil diye işaretlerken 1777’ye /tmp gibi paylaşılan bir dizinin standart modu der.
- Yeni dosyalar neden 644, yeni dizinler neden 755 olarak çıkıyor?
- umask yüzünden. Dosya oluşturan bir program 666 ister, dizin oluşturan bir program 777 ister ve umask, dosya var olmadan önce bundan bitleri siler. Alışıldık değer olan 022, yazmayı gruptan ve diğerden alır, geriye 644 ile 755 kalır. Kendinizinkini görmek için kabukta umask çalıştırın: 002, 664 ile 775 verir; 077 ise 600 ile 700 verir.
- rwxr-xr-x ne anlama gelir?
- Tam yazılmış 755’tir. Üç karakterde bir okuyun: rwx sahiptir, okuma, yazma ve çalıştırma ile; r-x gruptur, okuma ve çalıştırma var ama yazma yok; yine r-x diğer herkestir. Bir tire, o iznin kapalı olduğu anlamına gelir. Dizeyi buradaki «Simgesel» alanına yapıştırın, «Sekizlik» kutusu 755 gösterir.
İlgili araçlar
- CIDR / alt ağ hesaplayıcı
Bir ağı ayrıştırın, üyeliği denetleyin ve onu bölün.
- Cron ifadesi açıklayıcı
Bir cron ifadesini okuyun ve gerçekte ne zaman çalıştığını görün.
- IP adresim nedir
Genel IPv4 ve IPv6 adresleriniz ve tarayıcınızın seçtiği aile.
- Unix zaman damgası dönüştürücü
Epoch zamanını tarihe ve geri dönüştürün.