Giriş: Dosya İzinlerinin Önemi
Linux tabanlı sistemlerde dosya ve dizin izinleri, sistem güvenliğinin ve kararlılığının temel taşlarından biridir. Yanlış yapılandırılmış izinler, yetkisiz erişimlere, veri sızıntılarına veya sistemin tamamen çökmesine neden olabilir. Bu detaylı rehberde, Linux dosya izinlerinin ne anlama geldiğini, nasıl yönetildiğini ve güvenli bir sistem için doğru izin ayarlarının nasıl yapılması gerektiğini baştan sona inceleyeceğiz.
Sistem yöneticileri ve geliştiriciler için dosya izinlerini tam olarak anlamak bir zorunluluktur. Her dosya ve dizin, belirli kullanıcılar, gruplar ve 'diğerleri' için farklı erişim haklarına sahiptir. Bu haklar; okuma, yazma ve çalıştırma eylemlerini kapsar. Doğru izin politikası uygulandığında, hassas veriler korunur, yetkisiz kullanıcılar sisteminize zarar veremez ve uygulamalarınız sorunsuz çalışır.
Temel Dosya İzinleri: rwx Kavramı
Linux'ta her dosya ve dizinin üç temel erişim izni vardır:
Bu izinler, üç farklı varlık kategorisi için ayrı ayrı atanır:
Bu izinler genellikle `ls -l` komutunun çıktısında şu formatta görünür:
Yukarıdaki örnekte:
İzinleri Değiştirme: chmod Komutu
Dosya ve dizin izinlerini değiştirmek için chmod (change mode) komutu kullanılır. Bu komut hem sembolik (rwx) hem de oktal (sayısal) modda kullanılabilir.
1. Sembolik Mod (ugo+rwx):
* Kimler: `u` (user), `g` (group), `o` (others), `a` (all - hepsi)
* İşlem: `+` (izin ekle), `-` (izin çıkar), `=` (izinleri tam olarak ata)
* İzinler: `r` (read), `w` (write), `x` (execute)
Örnekler:
2. Oktal (Sayısal) Mod (421):
Bu modda izinler sayısal değerlerle ifade edilir:
Her üç varlık kategorisi (sahip, grup, diğerleri) için bu değerler toplanarak üç basamaklı bir sayı elde edilir. Örneğin, `rwx` (4+2+1=7), `rw-` (4+2+0=6), `r-x` (4+0+1=5), `--x` (0+0+1=1) gibi.
Yaygın Oktal İzinler:
Örnekler:
Dizinler için `-R` (recursive) seçeneği ile alt dizin ve dosyaların izinleri de aynı anda değiştirilebilir:
Sahiplik Ayarları: chown ve chgrp Komutları
Dosya ve dizinlerin sahipliğini değiştirmek için `chown` (change owner) ve `chgrp` (change group) komutları kullanılır.
* chown: Dosyanın sahibini değiştirir.
* chgrp: Dosyanın grubunu değiştirir.
Özel İzinler: SUID, SGID ve Sticky Bit
Bunlar, standart rwx izinlerine ek olarak dosya ve dizinlere özel davranışlar kazandıran önemli güvenlik özellikleridir. Oktal modda, bu özel izinler için dördüncü bir basamak kullanılır.
Umask: Varsayılan İzinleri Yönetme
Umask, yeni oluşturulan dosya ve dizinler için varsayılan izinleri belirleyen bir ayardır. `umask` değeri, maksimum izinlerden (dosyalar için 666, dizinler için 777) çıkarılarak uygulanır. Örneğin, yaygın bir `umask` değeri `0022`'dir.
* Dosyalar için: 666 - 022 = 644 (rw-r--r--)
* Dizinler için: 777 - 022 = 755 (rwxr-xr-x)
`umask` değerinizi görüntülemek için:
`umask` değerini değiştirmek için:
Örnek Senaryolar ve İyi Uygulamalar
İzin Denetimi ve Sorun Giderme İpuçları
* `ls -l` komutunu kullanarak izinleri kontrol etmek.
* `namei -mo /path/to/file` komutu ile bir dosyanın veya dizinin tam yolundaki her elemanın izinlerini görsel olarak incelemek.
* `find` komutunu kullanarak belirli izinlere sahip dosyaları bulmak:
* Bir uygulamanın veya servisin yetkilendirme hatası vermesi durumunda ilk bakılacak yerlerden biri dosya izinleridir. Hata mesajları genellikle `Permission denied` veya `Access denied` şeklinde olur.
Yukarıdaki şematik görsel, dosya izinlerinin kullanıcı, grup ve diğerleri arasındaki ilişkisini açıklamaktadır. İzin yönetimi, sistem güvenliğinin kritik bir bileşenidir.
İleri Seviye: ACL'ler (Erişim Kontrol Listeleri)
Standart Linux izinleri, bazen karmaşık senaryolar için yeterli olmayabilir (örneğin, birden fazla kullanıcının veya grubun belirli bir dosyaya özel erişimi olması gerektiğinde). Bu tür durumlar için ACL'ler (Access Control Lists) devreye girer. ACL'ler, daha granüler izin yönetimi sağlar ve `getfacl` ile `setfacl` komutlarıyla yönetilir.
ACL'ler, çoğu durumda standart izinlerin yetersiz kaldığı durumlarda güçlü bir alternatiftir, ancak kullanımı daha karmaşık olabilir ve tüm dosya sistemleri tarafından desteklenmeyebilir.
Sonuç
Linux dosya izinlerini doğru bir şekilde anlamak ve uygulamak, herhangi bir Linux tabanlı sistemin güvenliği ve istikrarı için vazgeçilmezdir. Bu rehberde ele aldığımız temel ve özel izinler, sahiplik ayarları ve iyi uygulama örnekleri, sistemlerinizi güvence altına almanızda size yardımcı olacaktır. Her zaman en az ayrıcalık prensibini benimseyin ve gereksiz izinlerden kaçının. Düzenli olarak izin denetimi yaparak sisteminizin güvenliğini sürekli olarak sağlayın.
Daha fazla bilgi ve güncel en iyi uygulamalar için resmi dokümantasyonları ve güvenilir kaynakları takip etmenizi öneririz: Linux Dosya İzinleri Temelleri.
Linux tabanlı sistemlerde dosya ve dizin izinleri, sistem güvenliğinin ve kararlılığının temel taşlarından biridir. Yanlış yapılandırılmış izinler, yetkisiz erişimlere, veri sızıntılarına veya sistemin tamamen çökmesine neden olabilir. Bu detaylı rehberde, Linux dosya izinlerinin ne anlama geldiğini, nasıl yönetildiğini ve güvenli bir sistem için doğru izin ayarlarının nasıl yapılması gerektiğini baştan sona inceleyeceğiz.
Sistem yöneticileri ve geliştiriciler için dosya izinlerini tam olarak anlamak bir zorunluluktur. Her dosya ve dizin, belirli kullanıcılar, gruplar ve 'diğerleri' için farklı erişim haklarına sahiptir. Bu haklar; okuma, yazma ve çalıştırma eylemlerini kapsar. Doğru izin politikası uygulandığında, hassas veriler korunur, yetkisiz kullanıcılar sisteminize zarar veremez ve uygulamalarınız sorunsuz çalışır.
Temel Dosya İzinleri: rwx Kavramı
Linux'ta her dosya ve dizinin üç temel erişim izni vardır:
- Okuma (r): Dosyanın içeriğini görüntüleme veya dizinin içeriğini listeleme hakkı. (Değer: 4)
- Yazma (w): Dosyanın içeriğini değiştirme, silme veya dizinde dosya oluşturma/silme hakkı. (Değer: 2)
- Çalıştırma (x): Dosyayı bir program olarak çalıştırma veya dizine erişip içinde gezinme hakkı. (Değer: 1)
Bu izinler, üç farklı varlık kategorisi için ayrı ayrı atanır:
- Sahip (u - user): Dosyayı veya dizini oluşturan kullanıcı.
- Grup (g - group): Dosyanın veya dizinin ait olduğu grup.
- Diğerleri (o - others): Dosyanın sahibi veya grubunda olmayan tüm diğer kullanıcılar.
Bu izinler genellikle `ls -l` komutunun çıktısında şu formatta görünür:
Kod:
-rwxr-xr-- 1 user group 4096 Jan 1 10:00 filename.txt
Yukarıdaki örnekte:
- İlk karakter (`-`) dosya tipini belirtir (d: dizin, -: normal dosya, l: sembolik link vb.).
- Sonraki dokuz karakter (rwxr-xr--) izinleri gösterir:
- İlk üç (`rwx`): Dosya sahibinin izinleri (okuma, yazma, çalıştırma).
- İkinci üç (`r-x`): Grubun izinleri (okuma, çalıştırma, yazma yok).
- Üçüncü üç (`r--`): Diğerlerinin izinleri (okuma, yazma ve çalıştırma yok).
İzinleri Değiştirme: chmod Komutu
Dosya ve dizin izinlerini değiştirmek için chmod (change mode) komutu kullanılır. Bu komut hem sembolik (rwx) hem de oktal (sayısal) modda kullanılabilir.
1. Sembolik Mod (ugo+rwx):
Kod:
chmod [kimler][işlem][izinler] dosya/dizin
* Kimler: `u` (user), `g` (group), `o` (others), `a` (all - hepsi)
* İşlem: `+` (izin ekle), `-` (izin çıkar), `=` (izinleri tam olarak ata)
* İzinler: `r` (read), `w` (write), `x` (execute)
Örnekler:
Kod:
chmod u+x script.sh # Sahibine çalıştırma izni ekler
chmod g-w data.txt # Grubun yazma iznini kaldırır
chmod o=r index.html # Diğerlerine sadece okuma izni verir
chmod a+rw myfile.txt # Herkese okuma ve yazma izni ekler
chmod ug+rw,o-rwx config.ini # Kullanıcı ve gruba okuma/yazma, diğerlerinden tüm izinleri kaldırır
2. Oktal (Sayısal) Mod (421):
Bu modda izinler sayısal değerlerle ifade edilir:
- r (okuma) = 4
- w (yazma) = 2
- x (çalıştırma) = 1
- Hiçbir izin = 0
Her üç varlık kategorisi (sahip, grup, diğerleri) için bu değerler toplanarak üç basamaklı bir sayı elde edilir. Örneğin, `rwx` (4+2+1=7), `rw-` (4+2+0=6), `r-x` (4+0+1=5), `--x` (0+0+1=1) gibi.
Yaygın Oktal İzinler:
- 777 (rwxrwxrwx): Herkese tam erişim. Güvenlik açısından genellikle tavsiye edilmez!
- 755 (rwxr-xr-x): Sahibi tam erişim, grup ve diğerleri okuma ve çalıştırma (dizinler için ideal).
- 644 (rw-r--r--): Sahibi okuma/yazma, grup ve diğerleri sadece okuma (dosyalar için ideal).
- 700 (rwx------): Sadece sahibi tam erişim.
- 600 (rw-------): Sadece sahibi okuma/yazma.
Örnekler:
Kod:
chmod 755 public_html # public_html dizinine 755 izni verir
chmod 644 index.php # index.php dosyasına 644 izni verir
chmod 700 ~/.ssh # SSH dizinini sadece sahibine açık hale getirir
chmod 600 ~/.ssh/id_rsa # SSH özel anahtar dosyasını sadece sahibine açık hale getirir
Dizinler için `-R` (recursive) seçeneği ile alt dizin ve dosyaların izinleri de aynı anda değiştirilebilir:
Kod:
chmod -R 755 my_project/
Sahiplik Ayarları: chown ve chgrp Komutları
Dosya ve dizinlerin sahipliğini değiştirmek için `chown` (change owner) ve `chgrp` (change group) komutları kullanılır.
* chown: Dosyanın sahibini değiştirir.
Kod:
chown yeni_sahip dosya.txt
chown yeni_sahip:yeni_grup dosya.txt
chown -R www-data:www-data /var/www/html # Web sunucusu için yaygın kullanım
* chgrp: Dosyanın grubunu değiştirir.
Kod:
chgrp yeni_grup dosya.txt
Özel İzinler: SUID, SGID ve Sticky Bit
Bunlar, standart rwx izinlerine ek olarak dosya ve dizinlere özel davranışlar kazandıran önemli güvenlik özellikleridir. Oktal modda, bu özel izinler için dördüncü bir basamak kullanılır.
- SUID (Set User ID): Dosya çalıştırıldığında, o dosyayı çalıştıran kullanıcının yetkileri yerine, dosyanın sahibinin yetkileriyle çalışmasını sağlar. Genellikle `s` harfi ile gösterilir. Örneğin, `passwd` komutu SUID bitine sahiptir çünkü kullanıcı şifre değiştirmek için root yetkisine ihtiyaç duyar. Oktal değeri 4000'dir.
Kod:chmod u+s my_script.sh # veya chmod 4755 my_script.sh
- SGID (Set Group ID): Dosya çalıştırıldığında, o dosyayı çalıştıran kullanıcının birincil grubu yerine, dosyanın grubunun yetkileriyle çalışmasını sağlar. Dizinlerde uygulandığında, o dizinde oluşturulan yeni dosyalar ve alt dizinler otomatik olarak üst dizinin grubuna sahip olur. Oktal değeri 2000'dir.
Kod:chmod g+s shared_dir/ # veya chmod 2775 shared_dir/
- Sticky Bit: Yalnızca dizinler için geçerlidir. Bu dizinde dosya oluşturabilen herkes, o dosyaları silemez veya taşıyamaz. Sadece dosyanın sahibi veya root kullanıcısı dosyayı silebilir. Genellikle `/tmp` dizininde kullanılır. Oktal değeri 1000'dir.
Kod:chmod +t /tmp/shared_uploads # veya chmod 1777 /tmp/shared_uploads
Umask: Varsayılan İzinleri Yönetme
Umask, yeni oluşturulan dosya ve dizinler için varsayılan izinleri belirleyen bir ayardır. `umask` değeri, maksimum izinlerden (dosyalar için 666, dizinler için 777) çıkarılarak uygulanır. Örneğin, yaygın bir `umask` değeri `0022`'dir.
* Dosyalar için: 666 - 022 = 644 (rw-r--r--)
* Dizinler için: 777 - 022 = 755 (rwxr-xr-x)
`umask` değerinizi görüntülemek için:
Kod:
umask
`umask` değerini değiştirmek için:
Kod:
umask 0077 # Yeni oluşturulan dosya/dizinler sadece sahibine açık olur
Örnek Senaryolar ve İyi Uygulamalar
Güvenlik her zaman en düşük ayrıcalık prensibine dayanmalıdır: Bir kullanıcıya veya uygulamaya sadece işini yapması için kesinlikle ihtiyaç duyduğu minimum izinleri verin.
- Web Sunucusu İçerikleri (Apache/Nginx):
Web dizinleri (`/var/www/html` gibi) ve dosyalar genellikle `www-data` kullanıcısına ve grubuna ait olmalı ve izinleri titizlikle ayarlanmalıdır.
Kod:chown -R www-data:www-data /var/www/html find /var/www/html -type d -exec chmod 755 {} \; # Dizinler 755 find /var/www/html -type f -exec chmod 644 {} \; # Dosyalar 644
- SSH Anahtarları:
SSH özel anahtarlarınızın izinsiz erişime kapalı olması hayati önem taşır.
Kod:chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa
- Log Dosyaları:
Log dosyaları genellikle sadece okunabilir olmalı ve uygulamaların yazma iznine sahip olduğu bir log dizininde bulunmalıdır.
Kod:chmod 640 /var/log/myapp/error.log chown root:adm /var/log/myapp/error.log # veya uygulamayı çalıştıran kullanıcı:grup
- Veritabanı Yapılandırma Dosyaları:
Hassas bilgiler (şifreler, bağlantı bilgileri) içeren dosyalar sadece ilgili uygulama tarafından okunabilir olmalıdır.
Kod:chmod 600 /etc/myapp/database.conf chown myappuser:myappgroup /etc/myapp/database.conf
İzin Denetimi ve Sorun Giderme İpuçları
* `ls -l` komutunu kullanarak izinleri kontrol etmek.
* `namei -mo /path/to/file` komutu ile bir dosyanın veya dizinin tam yolundaki her elemanın izinlerini görsel olarak incelemek.
* `find` komutunu kullanarak belirli izinlere sahip dosyaları bulmak:
Kod:
find . -perm 777 -print # 777 iznine sahip tüm dosyaları bul
find . -perm /u=w -print # Sahibi için yazma izni olan tüm dosyaları bul

Yukarıdaki şematik görsel, dosya izinlerinin kullanıcı, grup ve diğerleri arasındaki ilişkisini açıklamaktadır. İzin yönetimi, sistem güvenliğinin kritik bir bileşenidir.
İleri Seviye: ACL'ler (Erişim Kontrol Listeleri)
Standart Linux izinleri, bazen karmaşık senaryolar için yeterli olmayabilir (örneğin, birden fazla kullanıcının veya grubun belirli bir dosyaya özel erişimi olması gerektiğinde). Bu tür durumlar için ACL'ler (Access Control Lists) devreye girer. ACL'ler, daha granüler izin yönetimi sağlar ve `getfacl` ile `setfacl` komutlarıyla yönetilir.
Kod:
getfacl dosya.txt # Bir dosyanın ACL'lerini gösterir
setfacl -m u:john:rwx dosya.txt # John kullanıcısına rwx izni ekler
ACL'ler, çoğu durumda standart izinlerin yetersiz kaldığı durumlarda güçlü bir alternatiftir, ancak kullanımı daha karmaşık olabilir ve tüm dosya sistemleri tarafından desteklenmeyebilir.
Sonuç
Linux dosya izinlerini doğru bir şekilde anlamak ve uygulamak, herhangi bir Linux tabanlı sistemin güvenliği ve istikrarı için vazgeçilmezdir. Bu rehberde ele aldığımız temel ve özel izinler, sahiplik ayarları ve iyi uygulama örnekleri, sistemlerinizi güvence altına almanızda size yardımcı olacaktır. Her zaman en az ayrıcalık prensibini benimseyin ve gereksiz izinlerden kaçının. Düzenli olarak izin denetimi yaparak sisteminizin güvenliğini sürekli olarak sağlayın.
Daha fazla bilgi ve güncel en iyi uygulamalar için resmi dokümantasyonları ve güvenilir kaynakları takip etmenizi öneririz: Linux Dosya İzinleri Temelleri.