Hizmetler Hosting & Sunucu Araçlar Blog Ara Kurumsal EnglishEN
Teklif Alın

Bir sunucuda barındırılan her dosya ve dizin, kimin okuyabileceğini, kimin değiştirebileceğini ve kimin çalıştırabileceğini belirleyen bir izin kümesiyle birlikte gelir. Bu izinler doğru ayarlanmadığında iki senaryodan biri yaşanır: ya meşru bir işlem (örneğin bir web sunucu sürecinin bir dosyayı okuması) başarısız olur ve Permission denied hatası alınır, ya da gereğinden fazla yetki verilir ve dosyaya sunucudaki başka kullanıcılar, kötü amaçlı betikler ya da bir güvenlik açığı üzerinden erişim kazanan saldırganlar tarafından müdahale edilebilir hale gelir. İkinci durum ilkinden daha risklidir, çünkü genellikle fark edilmeden uzun süre devam eder.

Uygulama bir türlü çalışmayınca chmod 777 ile tüm izinleri açmak yaygın bir kestirme yoldur. Bu komut, ilgili dosyayı sahip, grup ve diğer herkes için okunabilir, yazılabilir ve çalıştırılabilir hale getirir; yani sunucuya herhangi bir şekilde erişimi olan herkes o dosyayı değiştirebilir hale gelir. chmod'un ve oktal izin sisteminin nasıl işlediğini anlamak, bu tür kestirmelere başvurmadan doğru izni doğrudan hesaplayabilmeyi sağlar.

rwx: Okuma, Yazma, Çalıştırma İzinleri

Linux'ta her dosya ve dizinin üç ayrı izin öbeği vardır: sahip (owner), grup (group) ve diğerleri (other). Bu üç öbeğin her biri için ayrı ayrı üç izin tanımlanır: okuma (r), yazma (w) ve çalıştırma (x). ls -l çıktısında görülen rwxr-xr-x gibi on karakterlik dizi tam olarak bunu ifade eder: ilk karakter dosya tipini gösterir (dizin için d, normal dosya için -), sonraki üç karakter sahibin, ardından gelen üç karakter grubun, son üç karakter ise diğerlerinin izinlerini belirtir.

Dosyalarda bu izinlerin anlamı nettir: okuma dosya içeriğini görüntülemeyi, yazma içeriği değiştirmeyi, çalıştırma ise dosyayı bir program olarak çalıştırabilmeyi sağlar. Dizinlerde durum biraz farklıdır: okuma dizin içeriğini listeleyebilmeyi (ls), yazma dizin içinde dosya oluşturup silebilmeyi, çalıştırma ise dizine girebilmeyi (cd) ifade eder. Bir dizinde çalıştırma biti yoksa, içindeki dosyaların adını bilseniz bile onlara erişemezsiniz; bu, nedeni sık sık yanlış anlaşılan bir hatadır.

Oktal Notasyon Nasıl Hesaplanır?

Her izin türüne sabit bir sayısal değer karşılık gelir: okuma 4, yazma 2, çalıştırma 1. Bir öbek için istenen izinler bu değerlerin toplanmasıyla tek bir rakama indirgenir. Örneğin okuma ve yazma açık, çalıştırma kapalıysa 4+2=6; üçü de açıksa 4+2+1=7; sadece okuma açıksa 4 olur. Sahip, grup ve diğerleri için ayrı ayrı hesaplanan bu üç rakam yan yana yazıldığında üç haneli oktal izin kodu ortaya çıkar.

Örnek olarak rwxr-xr-x izni sahip için rwx (7), grup için r-x (5), diğerleri için r-x (5) anlamına gelir; bu da 755 oktal koduna karşılık gelir. Bu kod doğrudan chmod komutuna verilebilir. Sembolik gösterim (u+x, g-w gibi) de kullanılabilir, ancak oktal notasyon tek satırda tüm izinleri net biçimde ifade ettiği için sunucu yönetiminde daha yaygın tercih edilir.

chmod [oktal_kod] [dosya_veya_dizin]

Bir dosya veya dizinin izinlerini üç ya da dört haneli oktal kodla doğrudan ayarlar.

Örnek: chmod 755 deploy.sh

setuid, setgid ve Sticky Bit

Standart rwx izinlerinin ötesinde, dördüncü bir oktal hane olarak ifade edilen üç özel bit daha vardır. setuid (4000) bir çalıştırılabilir dosyaya uygulandığında, dosya kim tarafından çalıştırılırsa çalıştırılsın işlemin dosya sahibinin yetkileriyle çalışmasını sağlar; sistem genelinde passwd komutu buna klasik bir örnektir. setgid (2000) bir dizine uygulandığında, o dizin içinde oluşturulan yeni dosyaların otomatik olarak dizinin grubunu miras almasını sağlar; bu, birden fazla kullanıcının ortak çalıştığı proje dizinlerinde grup izinlerini tutarlı tutmak için kullanılır. Sticky bit (1000) ise paylaşımlı, herkesin yazabildiği bir dizinde (/tmp klasik örnektir) kullanıcıların yalnızca kendi oluşturdukları dosyaları silebilmesini garanti eder; böylece herkesin yazma izni olsa bile başkasının dosyasını silmek mümkün olmaz.

Bu özel bitler devredeyken oktal kod dört haneli yazılır: ilk hane özel bitlerin toplamını, kalan üç hane ise her zamanki sahip/grup/diğer izinlerini taşır. Örneğin paylaşımlı bir proje dizininde setgid ile birlikte 2775, ya da herkese açık geçici bir dizinde sticky bit ile birlikte 1777 kullanılabilir.

chmod [özel_bit][oktal_kod] [dizin]

Dört haneli oktal kod ile setuid, setgid veya sticky bit tek komutla ayarlanır.

Örnek: chmod 2775 paylasimli-proje/

Yaygın Oktal İzin Kombinasyonları

Aşağıdaki tablo, sunucu yönetiminde en sık karşılaşılan oktal izin kombinasyonlarını ve tipik kullanım alanlarını özetler.

OktalSembolikTipik Kullanım
755rwxr-xr-xÇalıştırılabilir betikler ve çoğu dizin; sahip tam yetkili, grup ve diğerleri sadece okuyup çalıştırabilir.
644rw-r--r--Normal metin ve konfigürasyon dosyaları; sahip okuyup yazabilir, diğerleri sadece okuyabilir.
700rwx------Yalnızca sahibin erişebildiği özel dizinler, örneğin SSH anahtar dizinleri.
600rw-------Yalnızca sahibin okuyup yazabildiği hassas dosyalar; özel anahtarlar, kimlik bilgisi dosyaları.
775rwxrwxr-xSahip ve grubun birlikte yazabildiği paylaşımlı çalışma dizinleri.
664rw-rw-r--Sahip ve grubun ortaklaşa düzenlediği, diğerlerinin yalnızca okuduğu dosyalar.

Sık Yapılan Hatalar

  • chmod 777 ile sorunu geçiştirmek: Dosyayı herkes için okunabilir, yazılabilir ve çalıştırılabilir yapmak izin hatasını ortadan kaldırır, ama dosyayı sunucudaki (veya bir açık üzerinden erişim kazanan) herkesin değiştirebileceği bir hedefe dönüştürür.
  • -R ile toptan recursive chmod uygulamak: chmod -R 755 gibi bir komut, dizinler için gerekli olan çalıştırma bitini normal dosyalara (örneğin .php veya .html dosyalarına) da uygular; bu dosyaların çalıştırılabilir olması gerekmez ve gereksiz bir risktir.
  • Dizinlerde çalıştırma bitini unutmak: Bir dizine sadece okuma izni (r) verip çalıştırma izni (x) vermemek, dizin içeriği listelenebilse bile içindeki dosyalara erişilememesine yol açar; bu genelde 'dosya orada ama erişilemiyor' şeklinde kafa karıştıran bir hataya dönüşür.
  • İzin ile sahiplik sorununu karıştırmak: chmod izinleri değiştirir, dosyanın sahibini veya grubunu değiştirmez; sahiplik sorunu chown ile çözülür. Yanlış kullanıcıya ait bir dosyaya 777 vermek sorunu gizler, çözmez.
  • Hassas dosyaları grup veya diğerleri için okunabilir bırakmak: Veritabanı bağlantı bilgisi, API anahtarı veya SSL özel anahtarı içeren dosyaların 644 veya daha açık bir izinle bırakılması, sunucudaki diğer kullanıcıların bu bilgilere erişmesine izin verir; bu tür dosyalar genellikle 600 ile sınırlandırılmalıdır.

Doğru İzni Hızlıca Hesaplamak

Doğru oktal kodu elle hesaplamak, özellikle setuid, setgid veya sticky bit devredeyken rakamları toplarken hata yapmaya açıktır. Sahip, grup ve diğerleri için ayrı ayrı hangi kutucukların işaretli olduğunu takip etmek yerine, izinleri görsel olarak işaretleyip karşılığındaki oktal kodu ve çalıştırılacak komutu anında görmek daha güvenlidir.

WhatsApp