Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Ubuntu Sunucuda Dosya İzinlerini Doğru Yapılandırma Rehberi: Güvenlik ve Erişim Dengesi 🛡️

pixero

Üye
Katılım
14 Mart 2026
Mesajlar
12
Ubuntu Sunucuda Dosya İzinlerini Doğru Yapılandırma Rehberi: Güvenlik ve Erişim Dengesi 🛡️

Selam sistemciler! 🖥️ Bugün, belki de en çok gözden kaçan ama bir o kadar da kritik bir konuya terminalimizi çeviriyoruz: Dosya ve Dizin İzinleri (File Permissions). Bir web sunucusu kurduk, her şey harika çalışıyor derken, "403 Forbidden" hatasıyla karşılaşmak ya da daha kötüsü, yanlış izinler yüzünden sunucunun ele geçirilmesi riski... İşte tüm bunların temelinde genellikle bu konu yatıyor. Gelin, bu karmaşık gibi görünen ama aslında mantığı basit olan dünyayı birlikte keşfedelim ve sunucunuzdaki güvenlik ve işlevselliğin temel taşını sağlamlaştıralım.

Neden İzinler Bu Kadar Önemli?

Linux'taki her dosya ve dizin, üç temel izin kategorisine sahiptir:
  • Sahip (Owner): Dosyayı oluşturan veya sahipliğini alan kullanıcı.
  • Grup (Group): Dosyanın ait olduğu kullanıcı grubu.
  • Diğerleri (Others): Sistemdeki diğer tüm kullanıcılar.
Her bir kategori için de üç temel izin tipi tanımlanır:
  • Okuma (r - read): Dosyanın içeriğini görüntüleme veya dizinin içeriğini listeleme hakkı.
  • Yazma (w - write): Dosyayı değiştirme veya dizine yeni dosya ekleme/silme hakkı.
  • Çalıştırma (x - execute): Dosyayı bir program olarak çalıştırma veya dizine "girme" (cd) hakkı.
Yanlış izinler, web sitenizin erişilemez olmasına (ör. Nginx/Apache'nin dosyayı okuyamaması) veya çok fazla izin, kötü niyetli bir yazılımın/kullanıcının sisteminize sızmasına yol açabilir. ⚖️

İzinleri Okumak: Sayısal ve Sembolik Gösterim

Terminalde `ls -l` komutunu çalıştırdığınızda şöyle bir çıktı görürsünüz:
Bash:
-rwxr-xr-- 1 www-data www-data 2048 May 10 14:30 index.php
drwxr-x--- 2 sshuser developers 4096 May 10 14:25 projeler/

İlk 10 karakter izinleri gösterir. İlk karakter dosya tipidir (`-` dosya, `d` dizin). Sonraki 9 karakter, 3'erli gruplar halinde Owner|Group|Others izinleridir.
Örnekte `index.php` için: `rwx` (sahibi okur, yazar, çalıştırır), `r-x` (grubu okur, çalıştırır, yazamaz), `r--` (diğerleri sadece okur).

Bu sembolik gösterimi sayısal (octal) değere çevirmek de çok yaygındır:
  • r (read) = 4
  • w (write) = 2
  • x (execute) = 1
İzinler toplanır. Örneğin `rwxr-xr--`:
  • Sahip: rwx = 4+2+1 = 7
  • Grup: r-x = 4+0+1 = 5
  • Diğer: r-- = 4+0+0 = 4
Sonuç: 754

Temel Araçlar: chmod ve chown

İzinleri değiştirmek için chmod (change mode), sahipliği değiştirmek için chown (change owner) kullanırız.

1. chmod ile Sembolik Kullanım:
Bash:
# Sahibe yazma izni ekle, gruptan çalıştırma iznini kaldır.
chmod u+w,g-x dosyaadi

# Herkes (others) için tüm izinleri kaldır.
chmod o-rwx dosyaadi

# Sahip için rwx, grup ve diğerler için r-x yap.
chmod u=rwx,go=rx script.sh

2. chmod ile Sayısal (Octal) Kullanım (Daha Yaygın):
Bash:
# Klasik web dizini izni: 755 (rwxr-xr-x)
chmod 755 /var/www/html/sitem

# Hassas konfigürasyon dosyası: 640 (rw-r-----) - Sahibi okur/yazar, grubu sadece okur, diğerleri hiçbir şey yapamaz.
chmod 640 /etc/bir-ayar.conf

# Özel bir script: 700 (rwx------) - Sadece sahibi erişebilir.
chmod 700 ~/.ozel-script.sh

3. chown ile Sahiplik Değiştirme:
Bash:
# Bir dosyanın sahibini ve grubunu değiştir.
chown kullanici:grup dosyaadi

# Web dizinini genelde Nginx/Apache'nin çalıştığı kullanıcıya (www-data) veririz.
sudo chown -R www-data:www-data /var/www/html/

# Sadece grubu değiştirmek için.
chown :developers proje_dizini/
`-R` parametresi dizin içindeki tüm dosya ve alt dizinlere recursive olarak uygular. Dikkatli kullanın! ⚠️

Pratik Senaryolar ve En İyi Uygulamalar 🚀

  • Web Dizinleri (Nginx/Apache): Web sunucusu dosyaları okuyabilmeli, ancak gereksiz yere yazmamalı (güvenlik!). Genel kural:
    * Dizinler: 755 (rwxr-xr-x)
    * Dosyalar (HTML, CSS, JS, resimler): 644 (rw-r--r--)
    * Neden? Sunucu prosesi (www-data) genellikle "others" kategorisindedir. `r` izni ile içeriği servis eder. Upload dizini gibi yazma gereken yerler 755 (dizin) ve 664 (dosya) olabilir, ancak mümkünse daha kısıtlayıcı tutulmalıdır.
  • Kullanıcı Dizinleri (~/): Ev dizininiz genelde 700 (drwx------) olmalı ki başka kullanıcılar erişemesin.
  • SSH Anahtarları (~/.ssh/): Kritik öneme sahiptir!
    Bash:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/id_rsa      # Özel anahtar ÇOK GİZLİ!
    chmod 644 ~/.ssh/id_rsa.pub  # Genel anahtar okunabilir.
    chmod 644 ~/.ssh/authorized_keys
  • Sistem Konfigürasyon Dosyaları (/etc/): Çoğu root'a aittir ve diğer kullanıcıların yazma izni yoktur (ör. 644 veya 640).
  • Script'ler ve Programlar: Çalıştırılabilir olmaları için `x` izni gerekir. Kullanıcı script'i: 700, herkesin kullanabileceği bir script: 755.

İleri Seviye: ACL (Access Control List) ile Detaylı Kontrol

Bazen geleneksel owner/group/others modeli yeterli olmaz. Örneğin, bir dosyaya iki farklı grubun farklı izinlerle erişmesini istiyorsanız, ACL (Erişim Kontrol Listesi) devreye girer. 🧩

1. Önce ACL desteğini kurun:
Bash:
sudo apt install acl

2. Temel ACL Komutları:
Bash:
# Bir dosya/dizinin ACL'ini görüntüle.
getfacl /var/www/ozel-proje/

# Belirli bir kullanıcıya izin ekle.
setfacl -m u:ahmet:rwx /var/www/ozel-proje/

# Belirli bir gruba izin ekle.
setfacl -m g:developerlar:rx /var/www/ozel-proje/

# Varsayılan ACL'yi bir dizine ayarla (yeni oluşturulan dosyalar bu ACL'yi miras alır).
setfacl -m d:g:stajerler:r-x /var/www/ozel-proje/

# Tüm ACL kurallarını kaldır.
setfacl -b /var/www/ozel-proje/

Umask: Varsayılan İzinleri Belirlemek

Yeni oluşturulan dosya ve dizinlerin izinleri, `umask` değeri tarafından belirlenir. Bu değer, "izinlerden çıkarılacak" maskeyi ifade eder. Sistem geneli `/etc/profile` veya `/etc/bash.bashrc` dosyalarında, kullanıcı bazında ise `~/.bashrc` dosyasında ayarlanır.

Bash:
# Mevcut umask değerini görüntüle
umask

# Örnek: Varsayılan umask 022'dir.
# Dizin için maksimum izin: 777 - 022 = 755 (rwxr-xr-x)
# Dosya için maksimum izin: 666 - 022 = 644 (rw-r--r--)
# Daha güvenli bir umask: 027 (grup yazamaz, others hiçbir şey yapamaz)
umask 027

Son Kontrol ve Audit

İzinlerle işiniz bittiğinde, özellikle web dizinlerinde, SUID (Set User ID) gibi özel izin bayrakları olup olmadığını kontrol etmek iyi olur. Bu bayraklar, bir programın, çalıştıran kullanıcının değil, dosya sahibinin haklarıyla çalışmasını sağlar ve potansiyel bir güvenlik riskidir.

Bash:
# Sistemde SUID/SGID bayraklı dosyaları bulmak (root olarak çalıştırın)
sudo find / -type f \( -perm -4000 -o -perm -2000 \) -ls 2>/dev/null
Listede `passwd`, `sudo` gibi beklenen sistem araçları dışında şüpheli bir şeyler görürseniz araştırın! 🔍

**Özetle:** Doğru izinler, sunucunuzun sessiz bekçileridir. Ne çok sıkı ne de çok gevşek olmalılar. Web sunucunuzun çalışmasına izin verirken, gereksiz erişim kapılarını da kapalı tutmalılar.

Peki ya siz? Sunucularınızda dosya izinlerini düzenli olarak kontrol etmek için favori bir script'iniz veya yönteminiz var mı? Yoksa "bir kere ayarladım, unuttum" mu diyorsunuz? Yorumlarda deneyimlerinizi paylaşın, hep birlikte öğrenelim! 💬
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri