Kısa cevap
Linux'ta dosya izinleri, dosyaları kimin okuyabileceğini, yazabileceğini veya çalıştırabileceğini kontrol eder. `chmod` ve `chown` komutları izinleri ve sahipliği değiştirir, ancak yanlış kullanım 403 Forbidden gibi hatalara veya erişim sorunlarına yol açabilir. Hatalardan kaçınmak için doğru sözdizimini ve en yaygın senaryoları öğrenin.
Sorun nasıl anlaşılır
- Web sunucusu, erişilebilir olması gereken dosyalar için 403 Forbidden hatası veriyor
- Kullanıcı olarak oturum açmış olmanıza rağmen dosyadaki değişiklikleri kaydedemiyorsunuz
- Betik veya program uygun izinlere sahip olmasına rağmen çalıştırılamıyor
- Dosyaları taşıdıktan sonra sahiplik ve izinler yanlış
- FTP/SFTP istemcisi üzerinden dosyaya erişim denemesi Permission denied hatası veriyor
En yaygın nedenler
Yanlış ayarlanmış izinler
777 veya 666 gibi izinler çok fazla yetki verir ve güvenlik sorunlarına veya web sunucusuyla çakışmalara neden olabilir.
Yanlış dosya sahibi
Dosya root veya yanlış kullanıcıya ait olduğundan web sunucusu veya uygulama dosyaya erişemiyor.
Uygun olmayan grup
Dosya, gerekli izinlere sahip olmayan bir gruba ait veya kullanıcı uygun grupta değil.
Kopyalama sırasında devralınan izinler
İzinleri korumadan dosya kopyalama (ör. `-p` olmadan `cp`), kopyaya yeni sahip ve umask değerine göre izinler atar.
Yanlış umask değeri
Sistem umask değeri, yeni dosya ve klasörlerin varsayılan izinlerini etkileyebilir.
Adım adım çözüm
- 1
Mevcut izinleri ve sahipliği kontrol edin
Dosyanın bulunduğu dizinde
ls -lkomutunu çalıştırın. Çıktı; izinleri, bağlantı sayısını, sahibi, grubu, boyutu ve tarihi gösterir. Örneğin,-rw-r--r-- 1 kullanici grup 1234 Oca 1 12:00 dosya.txtsahibin okuma/yazma, grubun okuma, diğerlerinin okuma izni olduğu anlamına gelir. - 2
İzin gösterimlerini anlayın
Standart izinler üç basamaktan oluşur (sahip, grup, diğerleri). Her basamak şu değerlerin toplamıdır: 4=okuma, 2=yazma, 1=çalıştırma. Örneğin, 644 sahip için rw-, grup ve diğerleri için r-- anlamına gelir. 755 sahip için rwx, grup ve diğerleri için r-x anlamına gelir.
- 3
chmod ile izinleri değiştirin
chmodkomutunu sekizlik veya sembolik gösterimle kullanın. İzinleri dosya sahibi veya root kullanıcısı değiştirebilir. Örneğin,chmod 644 dosya.txtizinleri rw-r--r-- olarak ayarlar. Herkesin erişebileceği ancak yalnızca sahibin yazabileceği bir klasör içinchmod 755 klasorkullanın. Sembolik olarak:chmod u+x betik.shsahibe çalıştırma izni ekler. - 4
chown ile sahipliği değiştirin
chownkomutu genellikle root veyasudogerektirir.chown kullanici:grup dosyasahibi ve grubu değiştirir. Örneğin,sudo chown www-data:www-data index.phpsahibi ve grubu www-data olarak ayarlar. Özyinelemeli değişiklik için-Rkullanın (ör.sudo chown -R www-data:www-data /var/www/html). Özyinelemeli değişiklik tüm dosya ve klasörleri kapsayacağından önce mevcut durumu kaydedin (ls -lR) veya yedek alın. - 5
Paylaşımlı erişim için grupları kullanın
Birden fazla kullanıcının bir dosyaya erişmesi gerekiyorsa, onları ortak bir gruba ekleyin ve grup izinlerini ayarlayın. Örneğin,
chmod 664 dosyavechgrp ortak_grup dosya. Bu gruptaki kullanıcılar okuma/yazma erişimine sahip olur. - 6
Özel izinleri ayarlayın (setuid, setgid, sticky)
Setuid (
chmod u+s) programın sahibinin ayrıcalıklarıyla çalıştırılmasını sağlar. Klasörde setgid (chmod g+s), yeni dosya ve alt klasörlerin klasörün grubunu devralmasını sağlar. Klasörde sticky bit (chmod +t), silme işlemine çoğunlukla dosya sahibi, klasör sahibi ve root kullanıcısının izin vermesini sağlar. Bunları dikkatli kullanın. - 7
umask ile varsayılan izinleri değiştirin
umaskkomutu mevcut maskeyi gösterir. Yeni değerumask 022ile ayarlanır; bu, yeni dosyaların 644, klasörlerin 755 alacağı anlamına gelir. Bu yalnızca geçerli oturumu etkiler; kalıcı yapmak için~/.bashrcveya/etc/profiledosyasını düzenleyin. - 8
Değişiklikleri kontrol edin ve test edin
Değişikliklerden sonra izinleri kontrol etmek için
ls -lkomutunu tekrar çalıştırın. İlgili kullanıcı olarak erişimi test edin (ör.sudo -u www-data ls /var/www/html). Uygulamanın hatasız çalıştığından emin olun.
Hiçbir şey işe yaramazsa
İzinlerle ilgili sorunlar devam ediyorsa, SELinux veya AppArmor'un etkin olup olmadığını ve erişimi engelleyip engellemediğini kontrol edin. getenforce (SELinux) veya aa-status (AppArmor) komutu durumu gösterebilir. Ayrıca, hata ayrıntıları için web sunucusu günlüklerini (/var/log/nginx/error.log veya /var/log/apache2/error.log) kontrol edin. 777 izinlerinden kaçının. Sorunun izinlerden kaynaklanıp kaynaklanmadığını test etmeniz gerekiyorsa, bunu sitenin bir kopyasında veya test ortamında yapın ve önceki izinleri hemen geri yükleyin. Gelişmiş durumlar için setfacl ve getfacl ile ACL (Erişim Kontrol Listeleri) belgelerine başvurun.
Tekrarlanmaması için
- 777 ve 666 izinlerinden kaçının; gereken en az izinleri kullanın.
- Web uygulamalarının dosyalarındaki sahipliği ve izinleri düzenli olarak kontrol edin.
- Herkese izin vermek yerine paylaşımlı erişim için grupları kullanın.
- Kopyalarken izinleri ve zaman damgalarını korumak için `cp -p` kullanın; sahipliği ise uygun yetkilere sahip olduğunuzda koruyun.
Ne zaman uzmana başvurmalı
Uygulamanız için hangi izinlerin gerektiğinden emin değilseniz veya izin değişiklikleri sitenin çalışmasını kesintiye uğratıyorsa, bir IT uzmanına başvurun. Ayrıca, izinlerle ilgili bir güvenlik olayından şüpheleniyorsanız, bunun bir profesyonel tarafından incelenmesi daha iyidir.
BT altyapı bakımı · Sunucular, ağlar, yedekleme, güvenlik ve yardım masasıSık sorulan sorular
chmod ve chown arasındaki fark nedir?
`chmod` sahip, grup ve diğerleri için erişim izinlerini (okuma, yazma, çalıştırma) değiştirir. `chown` dosyanın sahibini ve grubunu değiştirir. Erişimin doğru yönetimi için her iki komut da gereklidir.
Neden chmod 777 kullanmamalısınız?
777 izinleri herkesin dosyayı okumasına, yazmasına ve çalıştırmasına olanak tanır; bu büyük bir güvenlik riskidir. Saldırganlar dosyayı değiştirebilir veya kötüye kullanabilir. Her zaman çalışma için gereken en az izinleri kullanın.
Yalnızca klasörlerin izinlerini, dosyaların değil, nasıl değiştiririm?
Klasörler için `-type d` ile `find` kullanın: `find /yol -type d -exec chmod 755 {} \;`. Dosyalar için `-type f` ve `chmod 644` kullanın.