Neler yeni

Yazılım Forum

Tüm özelliklerimize erişmek için şimdi bize katılın. Kayıt olduktan ve giriş yaptıktan sonra konu oluşturabilecek, mevcut konulara yanıt gönderebilecek, itibar kazanabilecek, özel mesajlaşmaya erişebilecek ve çok daha fazlasını yapabileceksiniz! Bu hizmetlerimiz ise tamamen ücretsiz ve kurallara uyulduğu sürece sınırsızdır, o zaman ne bekliyorsunuz? Hadi, sizde aramıza katılın!

Linux Dosya İzinleri: Temel Kavramlardan Gelişmiş Ayarlara Detaylı Rehber

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:

  • 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
    SUID kötüye kullanıma açık olduğu için dikkatle kullanılmalıdır.
  • 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.

  1. 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
    PHP veya diğer dinamik komut dosyaları için `755` izinleri genellikle yeterlidir. Ancak, yükleme dizinleri gibi yazılabilir olması gereken yerler için `775` veya özel durumlarda `777` (çok dikkatli kullanılmalı ve mümkünse kaçınılmalı) gerekebilir. Yükleme dizinleri için SGID bitini kullanmak da iyi bir yaklaşımdır.
  2. 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
    Bu izinler, anahtar dosyalarının sadece sizin tarafınızdan okunabilmesini sağlar.
  3. 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
  4. 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
* 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.

example_file_permissions_diagram.png

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.
 
shape1
shape2
shape3
shape4
shape5
shape6
Üst

Bu web sitenin performansı Hazal Host tarafından sağlanmaktadır.

YazilimForum.com.tr internet sitesi, 5651 sayılı Kanun’un 2. maddesinin 1. fıkrasının (m) bendi ve aynı Kanun’un 5. maddesi kapsamında Yer Sağlayıcı konumundadır. Sitede yer alan içerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır.

YazilimForum.com.tr, kullanıcılar tarafından paylaşılan içeriklerin doğruluğunu, güncelliğini veya hukuka uygunluğunu garanti etmez ve içeriklerin kontrolü veya araştırılması ile yükümlü değildir. Kullanıcılar, paylaştıkları içeriklerden tamamen kendileri sorumludur.

Hukuka aykırı içerikleri fark ettiğinizde lütfen bize bildirin: lydexcoding@gmail.com

Sitemiz, kullanıcıların paylaştığı içerik ve bilgileri 6698 sayılı KVKK kapsamında işlemektedir. Kullanıcılar, kişisel verileriyle ilgili haklarını KVKK Politikası sayfasından inceleyebilir.

Sitede yer alan reklamlar veya üçüncü taraf bağlantılar için YazilimForum.com.tr herhangi bir sorumluluk kabul etmez.

Sitemizi kullanarak Forum Kuralları’nı kabul etmiş sayılırsınız.

DMCA.com Protection Status Copyrighted.com Registered & Protected