Sekizlik ve sembolik chmod modları nedir?

chmod, Linux, macOS ve diğer Unix sistemlerinde bir dosyanın izinlerini ayarlar ve izinleri iki gösterim biçiminde kabul eder. 755 gibi bir sekizlik mod, sahip, grup ve diğer herkes için birer basamak içerir; burada okuma 4, yazma 2 ve çalıştırma 1 değerindedir. u=rwx,g=rx,o=rx gibi bir sembolik mod ise bunun yerine sınıfları (u sahip, g grup, o diğerleri, a herkes) ve izinleri (r, w, x) adlandırır.

Sembolik modlar, izinleri tamamen ayarlamak yerine değiştirebilir de: u+x sahip için çalıştırma izni ekler, go-w grup ve diğerleri için yazma iznini kaldırır, g=u ise sahibin izinlerini gruba kopyalar. Sekizlik mod her izni her zaman ayarladığından, bir değişikliğin sekizlik sonucu dosyanın önceki moduna bağlıdır.

Araç açıklaması

Bu araç, chmod modlarını sekizlik ve sembolik gösterim arasında dönüştürür. Kaynak ve hedef gösterimi seçin veya kaynağı otomatik algılamada bırakın: sembolik mod olarak u=rwx,g=rx,o=rx elde etmek için 755 girin ya da sekizlik değeri elde etmek için sembolik bir mod girin. u+x veya a+X gibi değişiklikler için dosyanın mevcut modunu girin ve chmod komutunun dosyayı hangi modda bırakacağını görün. Ayrıca ls -l çıktısından -rwxr-xr-x gibi bir izin dizesini veya tüm bir chmod komutunu yapıştırabilirsiniz.

Örnekler

Sekizlik Sembolik ls -l Tipik kullanım
644 u=rw,go=r -rw-r--r-- Normal dosyalar
755 u=rwx,go=rx -rwxr-xr-x Betikler, programlar ve dizinler
600 u=rw,go= -rw------- SSH anahtarları gibi özel dosyalar
2775 u=rwx,g=rwxs,o=rx drwxrwsr-x Gruplarını koruyan paylaşımlı dizinler
1777 a=rwx,+t drwxrwxrwt /tmp ve diğer paylaşımlı geçici klasörler
4755 u=rwxs,go=rx -rwsr-xr-x passwd gibi programlar

Özellikler

  • Sekizlik gösterimi sembolik gösterime ve sembolik gösterimi sekizlik gösterime dönüştürür; yönü değiştirmek için bir değiştirme düğmesi sunar
  • Girdiğiniz modun gösterim biçimini algılar veya seçtiğiniz gösterim biçiminden dönüştürür
  • u+x, go-w, a=r,u+w, g=u ve a+X gibi göreli değişiklikleri mevcut bir moda uygular
  • setuid, setgid ve sticky bit'i (s, t ve 4 basamaklı sekizlik modlar) destekler
  • Sembolik modu tam (u=rwx,g=rx,o=rx) veya kısa (u=rwx,go=rx) biçimde yazar
  • s, S, t ve T dahil olmak üzere ls -l izin dizelerini okur ve yazar
  • sudo chmod -R 755 dir gibi yapıştırılmış komutları kabul eder
  • Bir mod geçersiz olduğunda tam olarak hangi karakterde hata olduğunu gösterir

Nasıl çalışır?

Sekizlik mod en fazla dört basamak olarak okunur: isteğe bağlı ilk basamak setuid (4), setgid (2) ve sticky bit (1) değerlerini; diğer üç basamak ise sahip, grup ve diğerlerinin izinlerini içerir. Sembolik mod, POSIX söz dizimini izleyerek yan tümce yan tümce okunur ve Linux'taki GNU chmod davranışına uygun olarak mevcut moda uygulanır:

  • + izin ekler, - izin kaldırır ve = izinleri ayarlar; ayrıca adı belirtilen sınıflar için geri kalan izinleri temizler.
  • X, yalnızca dizinlere ve bir kullanıcıda zaten çalıştırma izni bulunan dosyalara çalıştırma izni ekler.
  • s, u ile setuid'yi ve g ile setgid'yi ayarlar. t, o, a veya sınıf belirtilmediğinde sticky bit'i ayarlar.
  • +x örneğinde olduğu gibi sınıf belirtilmediğinde değişiklik, umask tarafından engellenen bitler dışında herkes için uygulanır.
  • Dizinlerde setuid ve setgid, g-s örneğinde olduğu gibi modda belirtilmedikçe mevcut durumlarını korur.

Sembolik çıktı her biti açıkça ayarlar; bu nedenle bir dosya için dosyanın önceki modu ne olursa olsun aynı sonucu verir. GNU ve BSD chmod bu biçimi kabul ettiğinden, sticky bit ayrı bir +t yan tümcesi olarak yazılır.

İpuçları

  • Her dosyayı çalıştırılabilir yapmadan dizinlerde gezinmeyi mümkün kılmak için chmod -R ile a+X kullanın.
  • GNU chmod ile bir dizinde chmod 755 kullanmak setgid'yi temizlemez. Kaldırmak için chmod 00755 veya g-s kullanın.
  • Ansible ve birçok yapılandırma dosyası 0755 örneğinde olduğu gibi başında sıfır bulunan bir değer bekler. Bu değeri almak için "Her zaman 4 sekizlik basamak göster" seçeneğini etkinleştirin.
  • Bir ls -l dizesinden sonra gelen . veya +, bir SELinux bağlamını veya ACL'yi belirtir. Modun göstermediği ACL girdilerini görmek için getfacl kullanın.