chmod Ne İşe Yarar?
chmod (change mode, mod değiştir), bir dosya veya klasörü kimin okuyabileceğini, yazabileceğini ve çalıştırabileceğini belirleyen Linux ve Unix komutudur. Her dosyanın üç izin seti vardır: biri sahibi (owner), biri grubu (group) ve biri diğer herkes (others) için. Yukarıdaki hesaplayıcı bu dokuz onay kutusunu chmod'un beklediği sayıya veya harflere çevirir ve tersini yapar.
chmod'a modu iki şekilde verebilirsiniz: chmod 755 script.sh gibi sekizlik bir sayı olarak veya chmod u+x script.sh gibi sembolik biçimde. Bir dosyanın izinlerini yalnızca sahibi veya root değiştirebilir.

Linux Dosya İzinleri Nasıl Çalışır?
Her iznin bir değeri vardır: okuma (read) = 4, yazma (write) = 2 ve çalıştırma (execute) = 1. 0 ile 7 arasında bir basamak elde etmek için her sınıfın değerlerini toplayın, ardından üç basamağı sırayla yazın: sahip, grup, diğerleri. Yani rwx 4+2+1 = 7, r-x 4+0+1 = 5 ve rwxr-xr-x 755 olur.
ls -l çalıştırdığınızda aynı şeyi harflerle görürsünüz; örneğin -rwxr-xr-x. İlk karakter dosya türüdür (normal dosya için -, dizin için d, sembolik bağlantı için l); ardından sahip, grup ve diğerleri için üç rwx grubu gelir. Tire, o iznin kapalı olduğu anlamına gelir.
Harfler dosyalarda ve klasörlerde biraz farklı anlamlar taşır:
Dosya: açıp içeriğini okuma. Klasör: içindeki adları ls ile listeleme.
Dosya: içeriğini değiştirme. Klasör: içinde dosya oluşturma, silme ve yeniden adlandırma (bunun için klasörde çalıştırma izni de gerekir). Bir dosyayı silmek, dosyanın değil klasörün yazma iznine bağlıdır.
Dosya: program veya betik olarak çalıştırma. Klasör: cd ile içine girme ve içindeki dosyaları adıyla açma. Okuma izni olup çalıştırma izni olmadığında klasördeki adları listeleyebilirsiniz ama içindeki hiçbir şeyi açamazsınız.
u dosyanın sahibi (user), g grubu ve o diğer herkestir. Linux yalnızca sizinle eşleşen ilk sınıfı kullanır: sahipseniz, daha fazlasına izin verseler bile grup ve diğerleri izinleri size uygulanmaz.
Advertisement
Yaygın chmod İzinleri ve Ne Zaman Kullanılırlar?
Bu modlar gerçek hayattaki neredeyse her durumu kapsar. Çoğu, hesaplayıcıda hazır ayar düğmesi olarak da bulunur.
Çoğu dosya için varsayılan: web sayfaları, resimler ve gizli olmayan yapılandırma dosyaları. Sahip düzenleyebilir, diğer herkes yalnızca okuyabilir.
Dizinler ve herkesin çalıştırabileceği programlar veya betikler için varsayılan. Yalnızca sahip değiştirebilir.
Yalnızca sahip okuyabilir veya yazabilir. SSH özel anahtarları, .env dosyaları, API token'ları ve içinde şifre bulunan her şey için kullanın.
Klasörü yalnızca sahip açabilir veya listeleyebilir. ~/.ssh ve kişisel betik klasörleri için standarttır.
Sahip düzenler, bir grup (örneğin web sunucusunun grubu) okur ve başka kimse dosyayı göremez.
Sahibin tam erişimi vardır, grup klasörü açıp okuyabilir, diğerleri dışarıda kalır.
Hem sahip hem grup düzenleyebilir. Birkaç kullanıcının aynı grubu paylaştığı ekip sunucularında yaygındır.
Sahip ve grup içinde dosya oluşturup silebilir; diğerleri yalnızca bakabilir.
Yalnızca sahip okuyabilir ve kimse yazamaz. AWS, indirilen bir .pem anahtar çiftini SSH ile kullanmadan önce chmod 400 çalıştırmanızı söyler.
Makinedeki her kullanıcı ve işlem onu okuyabilir, değiştirebilir ve çalıştırabilir. Bir sonraki bölümde açıklandığı gibi, neredeyse hiçbir zaman doğru çözüm değildir.
chmod 755, 644 ve 777 Farkı
755 ve 644 yalnızca çalıştırma bitinde farklıdır: 755 herkesin dosyayı çalıştırmasına veya klasörü açmasına izin verir, 644 vermez. Bu yüzden genel kural klasörler 755, dosyalar 644 şeklindedir: klasörlerin içine girilebilmesi için çalıştırma izni gerekir, oysa çoğu dosya hiçbir zaman çalıştırılmamalıdır.
777, web sunucusunun kullanıcısı dahil makinedeki her hesaba yazma erişimi verir. Sunucudaki herhangi bir site veya betik ele geçirilirse saldırgan dosyalarınızı değiştirebilir ya da başkalarıyla değiştirebilir, sayfalarınıza zararlı yazılım enjekte edebilir veya bir arka kapı yerleştirebilir. Bir işlem "Permission denied" hatasıyla başarısız olduğunda gerçek çözüm genellikle 777 değil, doğru sahip (chown) veya gruptur.
En yaygın durumlar için önerilen izinler:
Web sitesi dosyaları (HTML, PHP, resimler):
644. Web sitesi klasörleri:755. WordPress ve çoğu hosting kontrol paneli bunu önerir.wp-config.php ve veritabanı şifreleri içeren diğer dosyalar: WordPress, sunucudaki diğer kullanıcıların okuyamaması için
440veya400önerir.600veya640da dosyayı gizli tutar ve sahibin düzenlemesine izin verir.Web sunucusunun yazması gereken yükleme veya önbellek klasörleri:
777kullanmak yerine web sunucusunun grubuna yazma erişimi verin (775) veya web sunucusunun kullanıcısını sahip yapın.~/.ssh klasörü:
700. Özel anahtarlar (id_ed25519,id_rsa):600veya400. authorized_keys:600. Açık anahtarlar (.pub):644.Çalıştırmak istediğiniz kabuk betikleri:
755veya yalnızca sizin çalıştırmanız gerekiyorsa700.chmod +x script.sh, diğer bitlere dokunmadan çalıştırma izni ekler.
Advertisement
SSH Anahtarlarında "Permissions 0644 are too open" Hatasını Düzeltme
SSH, diğer kullanıcıların okuyabildiği bir özel anahtarı yok sayar ve WARNING: UNPROTECTED PRIVATE KEY FILE! ile ardından Permissions 0644 for '/home/you/.ssh/id_rsa' are too open mesajını yazdırır. chmod 600 ~/.ssh/id_rsa (veya chmod 400) çalıştırın ve yeniden bağlanın. Sunucu tarafında, varsayılan StrictModes yes ayarıyla SSH sunucusu (daemon), authorized_keys dosyası, ~/.ssh veya ev klasörünüz grup ya da diğerleri tarafından yazılabiliyorsa authorized_keys dosyasını da yok sayar.
İzinler doğruysa ve bağlantı yine de başarısız oluyorsa sunucuda 22 numaralı portun açık olup olmadığını kontrol edin.
Özel İzinler: Setuid, Setgid ve Sticky Bit
Başa eklenen dördüncü bir basamak üç özel bit ekler: 4 = setuid, 2 = setgid ve 1 = sticky. Diğerleri gibi toplanırlar; yani 6755 setuid artı setgid demektir. ls -l çıktısında çalıştırma harfinin yerini alırlar: sahip veya grup konumunda s, diğerleri konumunda t.
Bir Linux tuhaflığı: GNU chmod 755 dir (ve chmod 0755 dir), bir dizindeki mevcut setuid veya setgid bitini yerinde bırakır. Temizlemek için bunu açıkça chmod g-s dir (iki bit için chmod a-s dir) ile belirtin veya beş basamak kullanın: chmod 00755 dir.
Setuid'li bir program sizin değil, sahibinin yetkileriyle çalışır. /usr/bin/passwd çoğu Linux sisteminde 4755 (-rwsr-xr-x) olduğundan normal kullanıcılar root'a ait şifre dosyasını güncelleyebilir. Linux, kabuk betiklerinde ve dizinlerde setuid'i yok sayar.
Bir programda, program dosyanın grubuyla çalışır. Klasörde daha kullanışlıdır: içinde oluşturulan yeni dosyalar klasörün grubunu alır ve yeni alt klasörler setgid'i devralır. 2775, paylaşılan bir ekip klasörü için klasik moddur.
Bir klasörde, herkes oraya yazabilse bile içindeki dosyaları yalnızca dosyanın sahibi, klasörün sahibi veya root silebilir ya da yeniden adlandırabilir. /tmp'nin 1777 (drwxrwxrwt) olmasının nedeni budur. Linux, dosyalardaki sticky bit'i yok sayar.
ls -l çıktısındaki büyük S veya T, özel bitin ayarlı olduğu ancak aynı konumdaki çalıştırma bitinin ayarlı olmadığı anlamına gelir. Örneğin 4644, rwSr--r-- ve 1666, rw-rw-rwT olarak görünür.
Advertisement
Sembolik Mod: +, - ve = ile u, g, o, a
Sembolik mod, izinleri mevcut duruma göre değiştirir; düz bir sekizlik sayı bunu yapamaz. Üç bölümü vardır: kim (u sahip, g grup, o diğerleri, a hepsi), bir operatör (+ ekle, - kaldır, = tam olarak ayarla) ve izinler (r, w, x ile s ve t). Birden fazla değişikliği boşluksuz virgüllerle ayırın.
Kim harfi olmadan chmod +x file, umask'ınızın engellediği bitler hariç üç sınıfın tamamı anlamına gelir. Olağan umask 022 ile bu, a+x ile aynıdır.
chmod u+x deploy.sh: sahibin betiği çalıştırmasına izin verir ve başka hiçbir şeyi değiştirmez.chmod go-w report.txt: gruptan ve diğerlerinden yazma iznini kaldırır.chmod o= secrets.txt: diğerlerinin tüm izinlerini alır.chmod a+r index.html: herkes dosyayı okuyabilir.chmod u=rwx,g=rx,o=rx app: 755'in sembolik yazımı. Hesaplayıcı her mod için bu biçimi gösterir.chmod -R u=rwX,go=rX public_html: büyük X, çalıştırma iznini yalnızca klasörlere ve zaten çalıştırılabilir olan dosyalara ekler; böylece klasörler 755, sıradan dosyalar 644 olur.
umask: Yeni Dosyalar İçin Varsayılan İzinler
umask, yeni dosya ve klasörlerin hangi izinleri alacağına karar verir. Çoğu program dosyaları 666 (rw-rw-rw-), klasörleri 777 ile oluşturur ve umask'ta ayarlı her bit kapatılır. Yaygın umask 022 ile yeni dosyalar 644, yeni klasörler 755 olur.
Bu bir çıkarma işlemi değil, bit düzeyinde bir maskedir. umask 027 ile dosyalar 640 alır; 666'dan 027'yi basamak basamak çıkarmak geçerli bir mod bile vermez. Herhangi bir değerin sonucunu görmek için hesaplayıcıdaki Umask sekmesini açın.
022: dosyalar 644, klasörler 755. Olağan varsayılan.002: dosyalar 664, klasörler 775. Grubunuzun oluşturduklarınızı düzenlemesine izin verir; her kullanıcının kendine ait bir grubu olduğu sistemlerde yaygındır.027: dosyalar 640, klasörler 750. Diğerlerine hiçbir izin yok; sunucularda iyi bir seçim.077: dosyalar 600, klasörler 700. Tamamen özel.Kendi değerinizi görmek için
umask, harflerle görmek içinumask -S, geçerli kabukta değiştirmek içinumask 027çalıştırın. Kalıcı olması için komutu~/.bashrcveya~/.profiledosyasına ekleyin.
Advertisement
Chmod Hesaplayıcı Nasıl Kullanılır?
Sahip, grup ve diğerleri için Okuma, Yazma ve Çalıştırma kutularını işaretleyin veya 644 ya da 755 gibi bir hazır ayara tıklayın. Her satır, siz ilerledikçe kendi basamağını gösterir.
750 veya 2775 gibi sekizlik bir sayı yazın ya da rwxr-x--- gibi sembolik bir dize yapıştırın. drwxr-sr-x gibi tam bir ls -l dizesi de çalışır ve dosya türü gösterilir.
4 basamaklı modu almak için Setuid, Setgid veya Sticky kutusunu işaretleyin. Bir mod sticky bit olmadan herkesin yazmasına izin verdiğinde bir uyarı görünür.
Dosya veya klasör adınızı girin, tüm dizin ağacı için Özyinelemeli kutusunu işaretleyin ve sayısal ya da sembolik chmod komutunu kopyalayın. Sayfa adresi modu saklar (örneğin ?mode=750); böylece yer imlerine ekleyebilir veya paylaşabilirsiniz.
chmod Komut Örnekleri
Bunları bir Linux veya macOS terminalinde çalıştırın. Dosya başka bir kullanıcıya veya root'a aitse başına sudo ekleyin.
chmod +x deploy.sh # çalıştırma izni ekle
chmod 755 deploy.sh # veya modun tamamını ayarla
./deploy.shfind /var/www/html -type d -exec chmod 755 {} +
find /var/www/html -type f -exec chmod 644 {} +chmod -R 755 folder # dosyalar da çalıştırılabilir olur
chmod -R u=rwX,go=rX folder # klasörler 755, dosyalar 644chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/id_ed25519.pubstat -c '%a %n' file # Linux: 644 file
stat -f '%Lp %N' file # macOS: 644 file
stat -f '%Mp%Lp %N' file # macOS, özel bitlerle: 0644 filechgrp developers /srv/project
chmod 2775 /srv/project # yeni dosyalar developers grubunu alırDiğer Geliştirici Araçları
Geliştiriciler ve sistem yöneticileri için, hepsi tarayıcınızda çalışan diğer ücretsiz araçlar. Dosyalar veya kayıtlar için benzersiz kimliklere mi ihtiyacınız var? UUID oluşturucuyu deneyin.
Görsel bit tablosuyla CIDR aralıkları, ağ maskeleri ve kullanılabilir host'lar.
22, 80, 443 veya başka herhangi bir portun açık olup olmadığını kontrol edin.
Entropi analiziyle güçlü, rastgele şifreler.
Unix timestamp'i tarihe ve tarihi timestamp'e, her saat diliminde çevirin.