"Permission denied" hatasıyla karşılaşmayan Linux kullanıcısı neredeyse yok. Hata ilk bakışta ürkütücü görünür ama arkasındaki mantık basittir: her dosya ve dizin, kimin ne yapabileceğini belirleyen üç katmanlı bir izin sistemine sahiptir. Bu rehberde o sistemi ve onu yöneten chmod komutunu gerçek örneklerle anlatıyorum.
İzinleri yanlış ayarlamak iki yönden sorun çıkarır: ya güvenlik açığı doğurur ya da programın çalışmasını engeller. Doğru dengeyi bulmak biraz deneyim ister.
Bir dosyanın izinleri, kimin onu görebileceğini, değiştirebileceğini ve çalıştırabileceğini belirler. Bu üç eylem birbirinden bağımsızdır; her biri ayrı ayrı açılıp kapatılabilir.
Üç Kullanıcı Kategorisi, Üç İzin Türü
Linux'ta her dosya, üç ayrı kategori için izin tanımlar: sahip (owner), grup (group) ve diğerleri (others). Her kategori için üç izin türü ayrı ayrı belirlenir: okuma (r), yazma (w) ve çalıştırma (x). Bu 3x3 yapı, ls -l çıktısında dokuz karakterlik bir dizi olarak görünür.
ls -l dosya.txt
-rw-r--r-- 1 celil celil 220 May 7 09:12 dosya.txt
İlk karakter dosya türünü gösterir (- normal dosya, d dizin). Sonraki üç karakter sahibin, ortadaki üç grubun, son üç ise diğerlerinin iznini gösterir. Yukarıdaki örnekte sahip okuyup yazabilir; grup ve diğerleri yalnızca okuyabilir.
Bu dokuz karakteri soldan sağa okumak alışkanlık hâline getirilmeli: önce tür, sonra sahip, sonra grup, en son diğerleri. Bir dosyanın güvenlik durumunu anlamak için genelde bu tek bakış yeterlidir.
chmod: Sembolik ve Sayısal Mod
İzinleri değiştirmek için chmod komutu iki farklı yöntem sunar. Sembolik mod harflerle çalışır: u sahibi, g grubu, o diğerlerini, a hepsini temsil eder. + izin ekler, - izin kaldırır, = izni tam olarak belirler.

chmod u+x script.sh
chmod g-w dosya.txt
chmod a=r rapor.txt
Sayısal (octal) mod ise her izni bir sayıyla temsil eder: okuma 4, yazma 2, çalıştırma 1. Bu değerler toplanarak her kategori için tek bir rakam elde edilir. Örneğin okuma ve yazma toplamı 6, tüm izinlerin toplamı 7 eder.
chmod 755 script.sh
chmod 644 dosya.txt
chmod 600 gizli-anahtar.pem
755, sahibe tam yetki (7) verirken gruba ve diğerlerine okuma ve çalıştırma izni (5) tanır; script'ler için en yaygın kalıptır. 644 sahibe okuma-yazma, geri kalanına yalnızca okuma izni verir; normal dosyalarda standart kullanım budur. 600 ise yalnızca sahibin okuyup yazabildiği en kısıtlı kalıptır ve SSH anahtarları gibi hassas dosyalarda tercih edilir.
Dizinlerde Çalıştırma İzni Farklı Anlama Gelir
Dizinlerde çalıştırma izni (x) en çok karıştırılan kavramdır; çünkü bir dosyayı çalıştırmak değil, dizine girmek anlamına gelir. Bir dizinde x izniniz yoksa, o dizine cd ile giremezsiniz. Tam dosya yolunu bilseniz bile erişemezsiniz.
Okuma izni (r) dizindeki dosyaları listelemenizi sağlar; ama x olmadan işe yaramaz. İlginç bir ayrıntı: bir dizinde yalnızca x izniniz varsa (r yok), dizini listeleyemezsiniz ama tam dosya adını biliyorsanız o dosyaya yine de erişebilirsiniz. Bu ayrım, özellikle web sunucusu yapılandırmalarında önemli sonuçlar doğurur.
chmod 711 paylasim/
Bu komut sahibe tam yetki verir; gruba ve diğerlerine yalnızca x (dizine girme) izni tanır. Bu kullanıcılar dizini listeleyemez ama doğru dosya adını bilenler dosyaya erişebilir.
chown ile Sahiplik Değiştirmek
İzinlerin yanında, bir dosyanın kime ait olduğu da güvenliği doğrudan etkiler. Sahipliği değiştirmek için chown kullanılır; bu komut genelde sudo gerektirir, çünkü sahiplik değişimi sistem güvenliğini doğrudan ilgilendirir.

sudo chown celil:developers proje.txt
sudo chown -R www-data:www-data /var/www/site
-R seçeneği, değişikliği bir dizine ve altındaki tüm dosyalara uygular. Web sunucusu dosyalarının doğru kullanıcıya (genelde www-data veya nginx) ait olması hem sunucunun çalışması hem de güvenlik için gereklidir. Yanlış sahiplik, "403 Forbidden" hatalarının en sık nedenlerinden biridir.
Grup yönetimi de bu sistemin bir parçasıdır. Bir kullanıcıyı bir gruba eklemek, o gruba tanımlı tüm dosya izinlerini otomatik olarak devralmasını sağlar. Ekip hâlinde çalışılan sunucularda bu yaklaşım, her dosya için ayrı ayrı izin tanımlamaktan çok daha sürdürülebilirdir.
Özel İzin Bitleri: SetUID, SetGID, Sticky Bit
Temel üç iznin ötesinde, Linux üç özel bit daha sunar. SetUID, bir çalıştırılabilir dosyaya uygulandığında, dosyayı kim çalıştırırsa çalıştırsın dosyanın sahibinin yetkileriyle çalışmasını sağlar. passwd komutu buna klasik bir örnektir.

SetGID, dizinlere uygulandığında özellikle kullanışlıdır: o dizinde oluşturulan her yeni dosya, dizinin grubunu otomatik olarak devralır. Bu, ekip çalışmasında ortak dizinlerin tutarlı grup sahipliğini korumasını sağlar.
SetUID ve SetGID dikkatli kullanılmadığında güvenlik açığına dönüşebilir. Bu yüzden çoğu sistem yöneticisi bu bitleri yalnızca gerçekten gerekli olan az sayıda sistem programında bırakır, geri kalanında kapalı tutar.
chmod g+s paylasilan-klasor/
chmod +t /tmp
Sticky bit ise bir dizine uygulandığında, dosyaları yalnızca sahibinin silebilmesini garanti eder; /tmp dizini bu yüzden varsayılan olarak sticky bit ile gelir. Sayısal modda bu üç özel bit, izin rakamının önüne dördüncü bir hane olarak eklenir: SetUID 4000, SetGID 2000, sticky bit 1000.
Yaygın İzin Senaryoları
Pratikte belirli izin kalıpları sürekli tekrarlanır. Çalıştırılabilir bir betik için chmod 755, hassas bir yapılandırma dosyası için chmod 600 neredeyse standart hâline gelmiştir. chmod komutunun tüm kullanım biçimleri chmod kılavuz sayfasında açıklanır. Aşağıdaki tablo, sık karşılaşılan senaryoları özetliyor:
| Senaryo | Komut | Mantık |
|---|---|---|
| Çalıştırılabilir betik | chmod 755 script.sh | Sahip düzenler, herkes çalıştırır |
| SSH özel anahtarı | chmod 600 id_rsa | Yalnızca sahip okur/yazar |
| Paylaşılan proje dizini | chmod 775 proje/ | Sahip ve grup tam yetkili |
| Web kök dizini | chmod 755 /var/www/html | Sunucu okur, sahip düzenler |
En az ayrıcalık ilkesi burada kritik önemdedir: bir dosyaya gerçekten ihtiyaç duyulandan fazla izin vermek, "çalışsın da nasıl olursa olsun" mantığıyla chmod 777 yazmak, açık bir güvenlik açığı yaratır. Herkesin yazabildiği bir dosya, kötü niyetli bir değişikliğe karşı savunmasızdır.
Düzenli izin denetimi de gözden kaçırılan bir alışkanlıktır. Özellikle hassas dosyaların izinlerini belirli aralıklarla kontrol etmek, aşırı geniş yetkilerin fark edilmeden kalmasını önler.
Pratikte Öğrenmenin Yolu
İzin sistemini gerçekten kavramanın yolu, bir test dizininde deneme yapmaktan geçer. Birkaç dosya oluşturup farklı chmod kombinasyonları deneyin, sonra ls -l ile sonucu kontrol edin:
mkdir test && cd test
touch a.txt && chmod 640 a.txt
ls -l a.txt
Her denemeden sonra izin gösterimini okumaya çalışmak, harflerin ne anlama geldiğini kalıcı biçimde öğretir. Zamanla rwxr-xr-- gibi bir diziyi görür görmez hangi kullanıcının ne yapabileceğini çözebilirsiniz. Bu, sunucu yönetimi ve web geliştirme gibi alanlarda günlük olarak işe yarayan bir beceridir.
Bu pratik tekrarlandıkça hız kazandırır. Birkaç haftalık düzenli kullanımdan sonra izin gösterimini okumak, dosya adını okumak kadar doğal hâle gelir.
Henüz yorum yok.
Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.