Bir eklenti yükledikten sonra 403 Forbidden hatası veya izinleri elle değiştirdikten sonra 500 Internal Server Error; her ikisinin de genellikle tek bir kökü vardır: chmod içinde yazdığınız sayı, dosya türü veya çalıştıran kullanıcıyla uyuşmuyordur. Belirli bir dosya için tam değeri arıyorsanız, bu referansı sonuna kadar okuyun; adım adım FTP hesabı oluşturma eğitimi arıyorsanız, FTP hesabı oluşturma ve yönetme kılavuzu daha doğru bir yoldur.
Her chmod rakamı tam olarak neyi kontrol eder
chmod değeri, her rakamı bir kullanıcı grubuna ait olan üç basamaklı bir sekizlik sayıdır: dosya sahibi, dosya grubu ve diğerleri. Her rakam kendi içinde üç bitin toplamıdır:
- 4 = okuma (read)
- 2 = yazma (write)
- 1 = çalıştırma (execute)
Yani 6 okuma ve yazma, 5 okuma ve çalıştırma, 7 ise üçü anlamına gelir. 644 sayısını açalım: sahip 6 (okuma+yazma), grup 4 (yalnızca okuma), diğerleri 4 (yalnızca okuma). Hepsi bu.
Çoğu kişinin unuttuğu dördüncü rakam
Bazen 2755 veya 1777 gibi dört rakam görürsünüz. İlk rakam özel bitlerdir:
| Rakam | Ad | Gerçek etki |
|---|---|---|
| 4 | setuid | Program, çalıştıran kullanıcı olarak değil, dosya sahibinin kimliğiyle çalışır |
| 2 | setgid | Klasörde: yeni dosyalar oluşturanın grubunu değil, klasörün grubunu alır |
| 1 | sticky bit | Dosyayı yalnızca sahibi silebilir; kullanım yeri /tmp'dir |
Paylaşımlı hostingde PHP dosyalarında setuid neredeyse her zaman devre dışıdır ve buna güvenirseniz, betik yanlış kullanıcıyla çalışır ve yüklenen dosyalar tutarsız sahiplik kazanır.
Her dosya türü için doğru chmod değeri
Bu tablo çoğu Linux hostingde temel alınabilir:
| Tür | Değer | Açıklama |
|---|---|---|
| Normal dosya (HTML, CSS, resim) | 644 | Sahip yazar, diğerleri yalnızca okur |
| Klasör | 755 | Çalıştırma biti olmadan web sunucusu klasörün içini açamaz |
Şifre içeren yapılandırma dosyası (wp-config.php) | 600 veya 640 | Grubun veya diğerlerinin bunu okuması için hiçbir neden yok |
| CGI betiği veya çalıştırılabilir dosya | 755 | Çalıştırma gerekli, diğerleri için yazma değil |
| WordPress yükleme klasörü | 755 | 777 verirseniz, enjekte edilen her betik yazabilir |
| Paylaşımlı geçici klasör | 1777 | sticky bit başkalarının dosyalarının silinmesini engeller |
PHP dosyalarına asla çalıştırma biti koymayın. Web sunucusu bunları doğrudan çalıştırarak değil, interpreter aracılığıyla okur; bir PHP dosyasında 755 yalnızca ekstra bir saldırı yüzeyidir.
777 neden işe yarasa bile yanlış cevaptır
Erişim hatası aldığınızda en hızlı yol chmod -R 777'dir ve genellikle de işe yarar. Sorun şu ki, aynı sunucudaki her süreç, herhangi bir kullanıcıyla, o dosyalar üzerinde yazma ve çalıştırma izni bulur. Paylaşımlı hostingde bu, basit bir güvenlik açığına sahip komşu bir hesabın dosyalarınızı yeniden yazabileceği anlamına gelir. Geçici olarak 777 vermek zorunda kalırsanız, testten sonra hemen 755'e döndürün ve asıl nedeni bulun.
Gerçek komutlar ve işe yarayan bayraklar
Pratikte en çok kullanılan üç komut:
chmod 644 index.php
chmod -R 755 wp-content/uploads
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
Son iki komut dosya ve klasör ayrımını gözetir ve chmod -R 755'in her şeyi bozduğu nokta tam da budur: dosyalar çalıştırma biti alır ve klasörler doğru kalır, ancak yapılandırma dosyaları da 755 olur.
Mevcut değeri görmek için ls -l sembolik çıktı verir (-rw-r--r--) ve stat -c "%a %n" wp-config.php saf sayıyı. Sahiplik yanlışsa, chmod yardımcı olmaz; chown user:group file çalıştırmanız gerekir ve paylaşımlı hostingde bu genellikle yalnızca destek ile mümkündür.
umask: Yeni dosya neden 644 ile oluşturulur
Yeni dosyaların varsayılan değeri umask'tan gelir. umask 022 ise, yeni dosya 666 - 022 = 644 ve yeni klasör 777 - 022 = 755 olur. umask değeri 027 ile dosyalar 640 ve klasörler 750 oluşturulur. Her yüklemeden sonra elle chmod yapmak zorunda kalıyorsanız, sorun büyük olasılıkla dosya izni değil, umask veya PHP sürecinin sahipliğidir.
Burada hata yapıyorlar
En sık gördüğüm hata, birinin 500 hatasını gidermek için tüm site klasörüne chmod -R 777 uygulamasıdır. Hata giderilir, site açılır ve iki hafta sonra site bilinmeyen bir yönlendirme ile başka bir alan adına veya wp-content içinde bilinmeyen dosyalarla ortaya çıkar. Teşhis işareti: kendinizin dokunmadığı bir klasörde aynı değişiklik tarihli dosyalar veya ls -l çıktısında 777 değerli wp-config.php. Bunu görürseniz, önce izinleri geri alın, sonra dosyaları sağlam sürümle karşılaştırın.
İkinci hata daha incedir: bazıları chmod'un sahipliğe etki ettiğini düşünür. Etmez. Sahibi root ve izni 777 olan bir dosya, www-data kullanıcısı için hâlâ yazılabilirdir, ancak başka bir kullanıcıyla çalışan bir betik için silme veya yeniden adlandırmada sorun yaşayabilir. Silme işleminde Permission denied hatası alıyorsanız, sorun dosyanın kendi izni değil, üst klasörün sahipliğidir.
İzin doğru ama site hâlâ hata veriyorsa
İzinler 644 ve 755 olarak ayarlanmışsa ve hâlâ beyaz ekran görüyorsanız, sorun başka bir yerdedir. WordPress ve PHP'de beyaz ekran giderme kılavuzu hata ayıklama yolunu adım adım ele alır. Site yavaşsa ve kaynak sınırına çarpıyorsanız, Hosting kaynak sınırları referansı her sayının neyi saydığını açıklar.
Herkese açık olmasını istemediğiniz bir test ortamı veya yönetim paneli için, web sunucusu kimlik doğrulaması chmod'un yerini alır; yöntemi Hostingde klasör şifreleme bölümünde anlatılmıştır. Ve özel bir sunucuda çalışıyorsanız, setfacl ve ACL, üç basamaklı modelden daha kesin seçenekler sunar ve özel sunucu üzerinde kullanılabilir.
Pratik bir not: Her toplu değişiklikten önce find . -printf "%m %p\n" | sort çıktısını kaydedin. İzinleri başlangıç durumunun yedeği olmadan geri almak, hatanın kendisinden daha acı vericidir.
Sık sorulan sorular
Bir dosya için chmod 755 doğru mu yoksa 644 mü?
Normal bir dosya için 644 doğrudur ve 755 yalnızca çalıştırılabilir betikler veya klasörler içindir. Bir PHP dosyasını 755 yaparsanız, site çalışır ancak çalıştırma biti herkese açılır ve bu saldırı yüzeyini artırır.
755 ile 775 arasındaki fark nedir?
755'te grup yalnızca okur ve çalıştırır; 775'te grubun yazma izni de vardır. Dosya grubunun diğer kullanıcılarla paylaşıldığı bir hostingde 775, onların dosyanızı değiştirebileceği anlamına gelir. 755 daha güvenli seçimdir.
chmod 777'den sonra neden hâlâ erişim hatası alıyorum?
Çünkü sorun izin değil, sahipliktir. Dosya başka bir kullanıcıya aitse veya üst klasörün çalıştırma biti yoksa, 777 de yardımcı olmaz. ls -l ve namei -l /path/to/file çıktısını kontrol edin.
wp-config.php için chmod değeri ne olmalı?
600 veya 640 yeterlidir. Bu dosya veritabanı şifresini tutar ve başka hiçbir kullanıcı onu okumamalıdır. WordPress 600 ile hata verirse, bu dosya sahipliğinin PHP'yi çalıştıran kullanıcıyla aynı olmadığı anlamına gelir ve izni açmak yerine sahipliği düzeltmelisiniz.