Linux'ta Permission denied: /dev/null dahil 10 durum
Permission denied, Linux'ta geçerli hesabınızın o dosyayı, klasörü veya komutu kullanma izni olmadığında çıkan bir hatadır. Hata satırının başındaki komut adı ve yola bakarak hangi durum olduğunu seçin, ls -l ile izinleri ve sahibi kontrol edin, ardından o duruma uygun izinler veya hesapla yeniden çalıştırarak sorunu çözün.
Aşağıdaki çıktı, bir AlmaLinux 9.8 sunucusundaki root hesabında ve bir Debian 12 sunucusundaki normal bir hesapta alınan sonuçlardır; hesap ve ana makine adları ile /dev/null çıktısındaki saatler örnek değerlerdir.
1️⃣ Permission denied nedenini bulma
Hata satırı [komut: hedef: Permission denied] biçiminde biter ve önündeki komut adı ile yoldan nerede engellendiğini görebilirsiniz. Aşağıdaki şemada ekranınızdakine benzeyen hata mesajını seçerseniz önce kontrol edeceğiniz komut ve bu yazıda okuyacağınız bölüm görünür.
2️⃣ Sık görülen Permission denied hataları
🔲 Dosya okuma ve yazma izinleri
Bir dosyayı okumak için hesabın okuma (r) iznine, değiştirmek veya yeni oluşturmak için yazma (w) iznine ihtiyacı vardır. İzinleri 600 olan secret.txt dosyasını yalnızca sahibi root okuyup yazabilir.
ls -l secret.txt-rw------- 1 root root 16 Oct 29 00:29 secret.txtrunuser -u daemon -- cat secret.txtcat: secret.txt: Permission deniedAynı dosyayı başka bir hesap olan daemon ile okumak hemen reddedildi. Yazma izni olmayan bir klasörün içinde dosya oluştururken de aynı hata çıkar; Debian 12 sunucusundaki normal hesapta, izinleri 000 olan lock klasöründe touch engellendi.
touch ~/touchtest/lock/x.txttouch: cannot touch '/home/user/touchtest/lock/x.txt': Permission deniedls -l çıktısının ilk sütununda sırasıyla sahip, grup ve diğer hesaplar için r ve w olup olmadığına bakın, ardından yalnızca ihtiyacı olan hesaba chmod ile izin ekleyin ya da chown ile sahibi değiştirin.
🔲 Klasörden geçiş izni
Dosya izinleri doğru olsa bile yolun ortasındaki bir klasörde x izni yoksa içindeki dosyaya ulaşamazsınız. Bir klasörde x, o klasörden geçip içeri girme izni, r ise içindeki adların listesini okuma iznidir.
ls -ld web web/cssdrw-r--r-- 3 root root 35 Oct 29 00:29 web
drw-r--r-- 2 root root 23 Oct 29 00:29 web/cssrunuser -u daemon -- ls -l webls: cannot access 'web/css': Permission denied
ls: cannot access 'web/index.html': Permission denied
total 0
d????????? ? ? ? ? ? css
-????????? ? ? ? ? ? index.htmlweb klasöründe yalnızca r olduğu için daemon içindeki css ve index.html adlarını okuyabildi, ancak x olmadığından izinler ve boyutlar soru işareti olarak kaldı. Tersine, x olup r olmayan site klasöründe listeleme engellendi, adı bilinen dosya ise okunabildi.
ls -ld sitedrwx--x--x 2 root root 24 Oct 29 00:29 siterunuser -u daemon -- ls sitels: cannot open directory 'site': Permission deniedrunuser -u daemon -- cat site/index.html<h1>index</h1>Yol uzunsa ls -ld ile en üstteki klasörden başlayarak tek tek x olup olmadığını kontrol edin ve engellenen klasöre yalnızca hesabın geçmesi için gereken x iznini ekleyin.
🔲 Çalıştırma izni
Bir betiği ./dosya adı biçiminde çalıştırmak için o dosyada x izni olmalıdır. İzinleri 644 olan deploy.sh dosyasının çalıştırılması reddedildi.
ls -l deploy.sh-rw-r--r-- 1 root root 8 Oct 29 00:29 deploy.sh./deploy.shbash: line 1: ./deploy.sh: Permission deniedchmod u+x ile sahibe x eklenince ilk sütun [-rwxr--r--] oldu.
chmod u+x deploy.shls -l deploy.sh-rwxr--r-- 1 root root 8 Oct 29 00:29 deploy.shx izni olduğu hâlde çalıştırma reddedilirse dosyanın bulunduğu dosya sisteminin noexec ile bağlanıp bağlanmadığını kontrol edin.
🔲 root'a ayrılmış bilgileri okuma
Normal bir hesap, root'un başlattığı süreçler veya diğer hesapların parola bilgileri gibi sistemin root'a ayırdığı bilgileri okuyamaz. Debian 12 sunucusundaki normal hesapla 1 numaralı sürecin fd klasörü açılınca izin hatası çıktı.
ls /proc/1/fdls: cannot open directory '/proc/1/fd': Permission deniedchage -l daemonchage: Permission denied.Başka bir hesabın parola süresi bilgileri de aynı nedenle engellendi; bu bilgileri içeren /etc/shadow, normal kullanıcıların okuyamayacağı şekilde tutulan bir dosyadır. Bu tür hatalarda izinleri genişletmeyin, komutu sudo ile veya root hesabıyla yeniden çalıştırın.
🔲 sudo eklenmesine rağmen > engellendiğinde
sudo yalnızca arkasına yazılan komutu root olarak çalıştırır; yönlendirme (>) için dosyayı açma işini ise komut çalışmadan önce geçerli hesabın kabuğu yapar. Bu yüzden sudo echo çıktısını yalnızca root'un yazabildiği bir dosyaya yönlendirirseniz hata satırı kabuk adıyla başlayan [bash: dosya yolu: Permission denied] biçiminde çıkar.
sudo echo x > /root/test.txtYönlendirmeyi de root olarak yapmak için satırın tamamını sh -c ile sarıp kabuğu da sudo ile çalıştırın; sudo resmî kılavuzu da yönlendirmenin çalışması için sh -c içinde çalıştırma örneği verir.
sudo sh -c 'echo x > /root/test.txt'tee standart girdiyi alıp verilen dosyalara doğrudan yazar; bu yüzden tee'yi sudo ile çalıştırırsanız dosyayı root yetkisiyle çalışan tee açar. tee aldığı içeriği ekrana da bir kez daha yazdırır.
echo x | sudo tee /root/test.txt🔲 SSH girişinin reddedilmesi
Permission denied ifadesinin önünde [hesap@sunucu adresi:] varsa ve parantez içinde publickey gibi bir kimlik doğrulama yöntemi yazıyorsa giriş, kimlik doğrulama aşamasında reddedilmiştir ve kontrol edilecek yer dosya izinlerinden farklıdır. Sunucudaki sshd'de StrictModes ayarı varsayılan değer olan yes olduğundan, girişi kabul etmeden önce o hesabın ev klasörünün ve dosyalarının izinlerini ve sahibini denetler. Ev klasörü, ~/.ssh klasörü ve ~/.ssh/authorized_keys dosyasından biri bile başka bir hesap tarafından yazılabiliyorsa sshd o anahtar dosyasını kullanmaz; bu yüzden ls -ld ile üçünde de diğer hesaplara w izni verilmediğini kontrol edin.
⌨️ Permission denied simülatörü
Aşağıdaki simülatör root hesabıyla başlar; runuser ile başka bir hesap olan daemon'a geçip dosya okuma, klasörden geçiş ve çalıştırma izninde engellenen çıktıları kendiniz görebilirsiniz.
3️⃣ Nadir görülen Permission denied hataları
İzin sütunu doğru olduğu hâlde reddedilirseniz, SELinux politikası veya noexec bağlaması gibi izin bitlerinin dışında bir şey engellemiştir. root olarak çalıştırdığınız hâlde çalıştırma reddedilirse dosyada hiç x biti olup olmadığını kontrol edin.
SELinux etkin bir sunucuda izin bitleri doğru olsa bile SELinux politikası engellerse Permission denied çıkar; bu durumda önce SELinux'un reddetme kayıtlarını kontrol edin. audit arka plan programının çalıştığı sunucularda reddetmeler /var/log/audit/audit.log dosyasına [avc: denied] olarak, engellenen işlem, komut adı (comm) ve hedef adı (name) ile birlikte kaydedilir.
getenforce ile SELinux'un etkin olup olmadığına bakın ve root olarak ausearch çalıştırıp bugünkü reddetme kayıtlarını kontrol edin.
getenforceausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts todayrsync arka plan programı ile alırken çıkan [Permission denied (13)] de SELinux'un modül yoluna erişimi engellediği bir durumdu.
noexec ile bağlanmış bir dosya sisteminde dosyalar doğrudan çalıştırılamaz; bu yüzden ls -l çıktısında x görünse bile [bash: betik yolu: Permission denied] ile reddedilir. findmnt -T komutuna o klasörü verirseniz klasörün bağlandığı yer ve seçenekler görünür; seçeneklerde noexec varsa durum budur.
findmnt -T /tmp -o TARGET,OPTIONSroot izin denetimlerinin çoğunu aşar, ancak çalıştırma yalnızca sahip, grup ve diğer hesaplardan en az birinde x olduğunda izinlidir. Bu yüzden hiç x olmayan bir betik, root ./ ile çalıştırsa bile reddedilir.
İlk sütunu [-rw-r--r-- 1 root root] olan deploy.sh dosyası root hesabında ./ ile çalıştırılınca [bash: line 1: ./deploy.sh: Permission denied] çıktı.
🔲 /dev/null normal bir dosyaya dönüştüğünde
Normal bir hesapla SSH'a girer girmez kabuk isteminden önce aşağıdaki satırlar art arda çıkıyorsa, önce tüm hesapların çıktıyı atmak için kullandığı karakter aygıtı /dev/null dosyasının root'a ait normal bir dosyaya dönüşüp dönüşmediğini kontrol edin. Satır sayısı, girişte okunan profile betiklerinin sayısına göre sunucudan sunucuya değişir; aynı sunucuda root'a geçtikten sonra bu hata çıkmadı.
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
...ls -l /dev/null-rw-r--r-- 1 root root 55 Jan 10 09:00 /dev/nullstat -c %F /dev/nullregular fileİlk sütun [-rw-r--r--] idi ve boyut yerinde 55 yazıyordu; diğer komutların attığı hata metinleri dosyada birikmişti. Temizlik komut satırına aşağıdaki biçim karışıp root olarak çalıştırılırsa rm aygıt dosyasını siler, sonraki komutun 2>/dev/null yönlendirmesi de aynı adla root'a ait yeni bir normal dosya oluşturur.
rm -f /dev/null 2>/dev/nullAşağıdaki satırı root olarak çalıştırın. Yeni aygıtı yan taraftaki bir adla oluşturup ardından mv ile üzerine yazarsanız adın boş kaldığı bir an olmaz; böylece silme ile oluşturma arasında başka bir yönlendirmenin yine normal dosya oluşturacağı bir boşluk kalmaz.
mknod -m 666 /dev/null.new c 1 3 && mv -f /dev/null.new /dev/null && ls -l /dev/nullcrw-rw-rw- 1 root root 1, 3 Jan 10 09:05 /dev/nullstat -c %F /dev/nullcharacter special filemknod komutundaki [c 1 3], çekirdeğin aygıt numarası listesinde /dev/null'un numarasıdır. Kurtarmadan sonra normal hesaptaki echo x > /dev/null da hatasız bitti. Yeniden başlatma da onu geri getirebilir, ancak sunucuyu durdurmayan yukarıdaki tek satır daha hızlıdır.
| Kontrol et | Düzeltmeden önce | Düzeltmeden sonra |
|---|---|---|
| ls -l ilk sütunu | -rw-r--r-- | crw-rw-rw- |
| ls -l boyut yeri | 55 | 1, 3 |
| stat -c %F | regular file | character special file |
| Normal hesapla yazma | Permission denied | Hata yok |
Atılacak çıktıyı yalnızca >/dev/null veya 2>/dev/null ile göndermekle yetinin; kurtarma dışında /dev/null'u asla rm veya mv hedefi olarak yazmayın.
🔢 SSS & önerilen içerikler
Web sunucusu · 403
APM kurulumundan sonra Apache 403 hatası (403 Forbidden)
Web sunucusunun web klasörünü okuyamadığı, error_log'a Permission denied yazıp 403 verdiği durumu anlatan yazı.
Web sunucusu · 503
APM kurulumundan sonra 503 hatası
Apache'nin php-fpm soketine bağlanamayıp 503 verdiği durumu error.log ile inceleyen yazı.
ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.