Blog’a Dön

Linux Dosya İzinleri: chmod ve chown Rehberi

Linux dosya izinleri nasıl okunur ve değiştirilir? rwx, 755 ve 644, chmod ve chown, site ve SSH dosyaları için doğru izinler ve Permission denied hatası.

Nodesty Ekibi5 dk okumaSunucular
Koyu Nodesty arka planında File Permissions yazısı ile chmod, chown ve 755 ifadeleri

Linux dosya izinleri, sunucudaki her dosya ve klasör için kimin okuyabileceğini, yazabileceğini ve çalıştırabileceğini belirler. "Permission denied" hatalarının, yüklenmeyen dosyaların, çalışmayan scriptlerin ve reddedilen SSH anahtarlarının büyük kısmı yanlış izinlerden ya da yanlış dosya sahibinden kaynaklanır. İzinleri okumayı bir kez öğrendiğinizde bu sorunların çoğunu birkaç komutla çözebilirsiniz.

Bu rehberde izinlerin nasıl okunduğunu, chmod ve chown komutlarını, web siteleri ve SSH dosyaları için doğru izinleri ve "Permission denied" hatasının nasıl çözüleceğini anlatıyoruz.

İzinleri okuma: ls -l

Sunucunuza SSH ile bağlandıktan sonra bir klasördeki dosyaların izinlerini görmek için:

ls -l

Çıktı şuna benzer:

-rw-r--r-- 1 ahmet www-data  4120 Oct 29 10:12 index.php
drwxr-xr-x 3 ahmet www-data  4096 Oct 29 10:10 uploads

İlk sütun izinleri gösterir:

  • İlk karakter: - sıradan dosya, d klasör, l sembolik bağlantı.
  • Sonraki üç karakter: Dosya sahibinin (user) izinleri.
  • Ortadaki üç karakter: Grubun (group) izinleri.
  • Son üç karakter: Diğer herkesin (others) izinleri.

Üçüncü ve dördüncü sütunlar dosyanın sahibini ve grubunu gösterir; yukarıdaki örnekte sahip ahmet, grup www-data.

r, w ve x ne demek?

HarfDosyadaKlasörde
rİçeriği okumaİçindeki dosyaları listeleme
wİçeriği değiştirmeİçinde dosya oluşturma, silme, yeniden adlandırma
xProgram ya da script çalıştırmaKlasöre girme ve içindeki dosyalara erişme

Klasörlerdeki x izni sık gözden kaçar: Bir klasörde x yoksa içindeki dosyaların izinleri ne olursa olsun onlara erişilemez.

Sayısal izinler: 755, 644, 600

Her izin bir sayıya karşılık gelir: r = 4, w = 2, x = 1. Sahip, grup ve diğerleri için bu sayılar toplanır:

SayıHarflerleAnlamıNerede kullanılır?
755rwxr-xr-xSahip her şeyi yapar, diğerleri okur ve girerKlasörler, çalıştırılabilir scriptler
644rw-r--r--Sahip okur ve yazar, diğerleri yalnızca okurWeb sitesi dosyaları
700rwx------Yalnızca sahip erişir~/.ssh gibi özel klasörler
600rw-------Yalnızca sahip okur ve yazarŞifre ve anahtar dosyaları
640rw-r-----Sahip okur ve yazar, grup yalnızca okurUygulamanın okuması gereken ayar dosyaları

Örneğin 7 = 4 + 2 + 1 (rwx), 5 = 4 + 1 (r-x), 6 = 4 + 2 (rw-).

chmod: izinleri değiştirme

chmod 644 index.php
chmod 755 uploads
chmod 600 .env

Harflerle de değiştirebilirsiniz. u sahip, g grup, o diğerleri, a herkes demektir:

chmod u+x deploy.sh     # sahibe çalıştırma izni ekle
chmod g-w config.php    # gruptan yazma iznini kaldır
chmod o-rwx yedekler    # diğerlerinin bütün izinlerini kaldır

Bir klasörün içindekilerle birlikte izinlerini değiştirmek için -R kullanılabilir, ama chmod -R 755 dosyaları da çalıştırılabilir yapar. Klasörlere ve dosyalara farklı izin vermek için find daha doğrudur:

find /var/www/site -type d -exec chmod 755 {} \;
find /var/www/site -type f -exec chmod 644 {} \;

chown: dosya sahibini değiştirme

sudo chown ahmet index.php
sudo chown ahmet:www-data index.php
sudo chown -R ahmet:www-data /var/www/site

kullanıcı:grup biçimi sahibi ve grubu birlikte değiştirir. Web sitelerindeki izin sorunlarının çoğu, dosyaların root'a ait olmasından kaynaklanır; örneğin dosyaları sudo ile kopyaladığınızda ya da git clone'u root olarak çalıştırdığınızda.

Web sitesi dosyaları için doğru izinler

Ubuntu ve Debian'da Nginx ve Apache www-data kullanıcısıyla, AlmaLinux'ta Nginx nginx, Apache ise apache kullanıcısıyla çalışır. Kendi VDS'inizde yaygın ve güvenli bir düzen:

  • Dosyaların sahibi sizin kullanıcınız, grubu web sunucusunun grubu olur: chown -R ahmet:www-data /var/www/site
  • Klasörler 755, dosyalar 644 olur.
  • Uygulamanın yazması gereken klasörler (WordPress'te wp-content/uploads, Laravel'de storage ve bootstrap/cache) grup yazma izni alır: chmod -R 775 storage
  • Veritabanı şifresi içeren ayar dosyaları (wp-config.php, .env) 640 ya da 600 olur.

PHP-FPM'i kendi kullanıcınızla çalıştırıyorsanız grup yazma iznine gerek kalmaz; dosyaların sahibi zaten PHP'nin çalıştığı kullanıcıdır. Laravel'in kurulumunu Laravel sunucuya kurulum, Nginx'i Nginx kurulumu rehberimizde anlattık.

Paylaşımlı web hostingde PHP sizin hesabınızın kullanıcısıyla çalıştığı için klasörlerde 755, dosyalarda 644 yeterlidir. İzinleri cPanel ya da DirectAdmin dosya yöneticisinden ya da FTP programınızdan değiştirebilirsiniz; ayrıntılar FTP ve SFTP nedir? yazımızda.

Asla chmod 777 kullanmayın

777, sunucudaki her kullanıcının ve her sürecin o dosyayı değiştirebileceği anlamına gelir. Bir web sitesinde ele geçirilen tek bir eklenti bile bu dosyalara zararlı kod yazabilir. Bir şey yalnızca 777 ile çalışıyorsa sorun izin değil, dosyanın sahibidir; chown ile dosyayı doğru kullanıcıya verin. Saldırıya uğramış bir sitede yapılacakları Site hacklendi, ne yapmalı? rehberimizde anlattık.

SSH dosyaları için izinler

SSH, anahtar dosyalarının izinleri fazla açıksa onları kullanmayı reddeder:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Kendi bilgisayarınızdaki özel anahtar dosyası (~/.ssh/id_ed25519) da 600 olmalıdır. Klasörün ve dosyanın sizin kullanıcınıza ait olduğunu da kontrol edin; root olarak oluşturulan bir authorized_keys dosyası anahtarla girişi bozar.

"Permission denied" hatasını çözme

  1. Dosyanın sahibine ve izinlerine bakın: ls -l dosya
  2. Yol üzerindeki bütün klasörleri kontrol edin. Aradaki tek bir klasörde x izni yoksa dosyaya erişilemez. namei -l bütün yolu tek seferde gösterir:
namei -l /var/www/site/public/index.php
  1. İşlemin hangi kullanıcıyla çalıştığını öğrenin. Web sunucusu, PHP-FPM ya da bir systemd servisi sizden farklı bir kullanıcıyla çalışıyor olabilir: ps -eo user,comm | grep -E 'nginx|php|apache'
  2. Sahibi ya da izni düzeltin; 777 vermeyin.

Temel Linux komutlarını Linux komutları yazımızda topladık.

Özel izinler: setuid, setgid ve sticky bit

Bazen dört haneli izinlerle karşılaşırsınız:

  • Sticky bit (1777): /tmp gibi herkesin yazabildiği klasörlerde, kullanıcıların yalnızca kendi dosyalarını silebilmesini sağlar.
  • setgid (2775) klasörlerde: Klasörde oluşturulan yeni dosyalar klasörün grubunu alır. Birden fazla kullanıcının aynı proje klasöründe çalıştığı durumlarda kullanışlıdır.
  • setuid: Bir programın, onu çalıştıranın değil dosya sahibinin yetkisiyle çalışmasını sağlar. passwd gibi sistem programlarında kullanılır; kendi dosyalarınıza vermeyin.

Nodesty sunucularında dosya izinleri

Nodesty AMD Ryzen 9 9950X VDS ve AMD EPYC 7763 VDS paketlerinde tam root erişimiyle dosya sahiplerini ve izinleri dilediğiniz gibi düzenleyebilirsiniz. Sunucu yönetimiyle uğraşmak istemiyorsanız web hosting paketlerimizde PHP sizin hesabınızın kullanıcısıyla çalışır; izinleri cPanel ya da DirectAdmin dosya yöneticisinden birkaç tıkla değiştirebilirsiniz.

Sıkça Sorulan Sorular

755 ve 644 ne anlama gelir?

755, dosya sahibinin okuyup yazıp çalıştırabildiği, grubun ve diğer herkesin yalnızca okuyup çalıştırabildiği anlamına gelir; klasörler için yaygın izindir. 644 ise sahibin okuyup yazabildiği, diğerlerinin yalnızca okuyabildiği anlamına gelir; web sitelerindeki sıradan dosyalar için doğru izindir.

Neden chmod 777 kullanmamalıyım?

777, sunucudaki her kullanıcının ve her sürecin o dosyayı değiştirebileceği anlamına gelir. Bir web sitesinde ele geçirilen tek bir eklenti bile bu dosyalara zararlı kod yazabilir. Bir şey 777 olmadan çalışmıyorsa sorun izinde değil, dosyanın sahibindedir; chown ile doğru kullanıcıya verin.

chmod ile chown arasındaki fark nedir?

chmod, bir dosyada kimin ne yapabileceğini, yani okuma, yazma ve çalıştırma izinlerini değiştirir. chown ise dosyanın sahibini ve grubunu değiştirir. Web sitelerindeki izin sorunlarının çoğu yanlış izinden değil, dosyaların yanlış kullanıcıya ait olmasından kaynaklanır.

Web hostingde dosya izinlerini nasıl değiştiririm?

cPanel ve DirectAdmin dosya yöneticilerinde bir dosyaya sağ tıklayıp izinleri değiştirebilir ya da FTP programınızda dosya özelliklerinden izin değerini yazabilirsiniz. Paylaşımlı hostingde klasörler için 755, dosyalar için 644 genellikle doğru değerdir.

SSH anahtarım neden reddediliyor?

SSH, anahtar dosyalarının izinleri fazla açıksa onları güvensiz sayıp kullanmaz. Sunucuda ~/.ssh klasörünün 700, authorized_keys dosyasının 600 izninde ve ikisinin de sizin kullanıcınıza ait olduğundan emin olun. Kendi bilgisayarınızdaki özel anahtar dosyası da 600 olmalıdır.

Sudo kullanmadan dosyayı değiştiremiyorum, ne yapmalıyım?

Dosya root ya da başka bir kullanıcıya ait olabilir. Düzenli olarak sizin ya da uygulamanızın değiştirmesi gereken dosyaları chown ile ilgili kullanıcıya verin. Sistem dosyalarını ise sudo ile düzenlemeye devam edin; onları normal kullanıcıya vermeyin.

Nodesty

Yazar hakkında

Nodesty Ekibi · Altyapı ve Destek

Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.

İlgili yazılar

Sunucunuzu şimdi başlatın.

Nodesty'nin üstün altyapısı ile projelerinizi özgürce inşa edin ve sınır tanımadan ölçeklendirin.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································