Linux dosya izinleri: chmod, chown ve 755, 644 rakamlarının anlamı
Linux'ta her dosya ve klasörün bir sahibi, bir grubu ve üç tür kullanıcı için izinleri vardır. "Permission denied" hatasının, web sitesinde 403'ün ya da bir betiğin çalışmamasının çoğu zaman sebebi bu izinlerdir. Rakamlar ilk bakışta gizemli görünür ama mantığı basittir.
İzinleri okumak
ls -l /var/www/ornek.com
-rw-r--r-- 1 www-data www-data 1234 Oct 20 12:00 index.php
drwxr-xr-x 2 www-data www-data 4096 Oct 20 12:00 resimler
İlk sütun 10 karakterdir. İlk karakter türü söyler (- dosya, d klasör). Sonraki üçlü gruplar sırasıyla sahip, grup ve diğerleri içindir. Her grupta r okuma, w yazma, x çalıştırma (klasörde: içine girme) hakkıdır; - hak yok demektir. Yani rw-r--r--: sahip okuyup yazar, grup ve diğerleri yalnızca okur. Sonraki iki sütun sahip ve grup adıdır (www-data www-data).
Rakamlar
Her hak bir sayıdır: okuma 4, yazma 2, çalıştırma 1. Üçlüyü toplarsınız:
rwx= 4+2+1 = 7rw-= 4+2 = 6r-x= 4+1 = 5r--= 4
Üç rakam sırasıyla sahip, grup, diğerleri için yazılır: 755 = rwxr-xr-x (sahip her şeyi yapar, diğerleri okur ve girer); 644 = rw-r--r--; 600 = yalnızca sahip okur/yazar; 777 herkese her hakkı verir ve güvensizdir.
chmod: izni değiştirme
chmod 644 dosya.txt # rakamla
chmod +x betik.sh # çalıştırma hakkı ekle
chmod -R 755 klasor # klasörü ve içindekileri
chmod u+w,go-w dosya # sahibe yaz ekle, gruptan ve diğerlerinden yazmayı al
Web siteleri için standart: klasörler 755, dosyalar 644. Bir klasöre girmek için x hakkı gerekir; chmod -R 644 klasörleri de 644 yaparsa içine kimse giremez. Doğru yöntem klasör ve dosyaları ayırmaktır:
find /var/www/ornek.com -type d -exec chmod 755 {} \;
find /var/www/ornek.com -type f -exec chmod 644 {} \;
chown: sahibi değiştirme
sudo chown www-data:www-data dosya.php
sudo chown -R www-data:www-data /var/www/ornek.com
Sahip, "kullanıcı:grup" biçiminde yazılır. Web sunucusu (Nginx, PHP-FPM) çoğu dağıtımda www-data kullanıcısıyla çalışır; sitenin dosyalarını okuyabilmesi, yükleme ve önbellek klasörlerine yazabilmesi için sahiplik buna uygun olmalıdır. Çalışan kullanıcıyı ps aux | grep -E "nginx|php-fpm" ile öğrenin.
Sık sorunlar
- "Permission denied" betik çalıştırırken: Dosyanın
xhakkı yoktur:chmod +x betik.sh. Ya da dosyanoexecbağlanmış bir diskte durur. - Nginx 403: Yolun üzerindeki herhangi bir klasörün
xhakkı eksiktir:namei -l /tam/yol/dosyakomutu tüm yoldaki izinleri gösterir: Nginx 403. - WordPress güncelleyemiyor: Sahiplik yanlıştır: WordPress dosya izinleri.
- SSH anahtarı çalışmıyor:
~/.ssh700,authorized_keys600 olmalı: publickey hatası. - Her şeyi 777 yapmak: Çözmüş gibi görünür ama herkesin dosyalarınızı değiştirmesine izin verir. Doğru sahip ve izni ayarlayın.
Hosting paketinde dosya sahipliği ve izinler genellikle sorunsuzdur; sorun yaşarsanız Dosya Yöneticisi'nden izinleri düzeltebilirsiniz: 403, 404, 500 hataları.
Sık sorulanlar
Sticky bit ve setuid nedir?
Üç rakamın başına eklenen dördüncü rakamlardır (1755, 4755). Özel durumlar içindir (ortak klasörler, yetki yükselten programlar). Normal bir web sitesi için gerekmez.
umask nedir?
Yeni oluşturulan dosyaların varsayılan izinlerini belirler. Genelde 022'dir; yani yeni dosya 644, yeni klasör 755 olur.
Sahibi root olan bir dosyayı düzenleyemiyorum.
sudo ile düzenleyin ya da sahibini değiştirin. Sistem dosyalarının sahibini değiştirmeyin.
İlgili makaleler
- Nginx 403 Forbidden hatası: nedenleri ve çözümü
- WordPress güncellerken FTP bilgisi soruyor ve "Could not create directory" hatası
- Yeni Linux sunucuda ilk yapılması gerekenler
Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.
Geri bildiriminiz için teşekkürler!