/etc/exports Dosyası Linux Sistemlerinde NFS Yönetiminin Kalbi

Linux sistem yöneticiliğinde (System Admin) NFS (Network File System), özellikle sunucular arası dosya paylaşımı, yedekleme alanları ve ortak çalışma dizinleri için hayati bir protokoldür. NFS sunucusunun kalbi ise /etc/exports dosyasıdır.

NFS (Network File System), bir ağ üzerindeki dosyaların, sanki yerel diskinizdeymiş gibi kullanılmasını sağlayan bir protokoldür. Sunucu tarafında "hangi klasörün", "kime", "hangi yetkilerle" verileceği /etc/exports dosyasında tanımlanır.

Bu dosyadaki en ufak bir hata, sistemin açılmamasına değil ama paylaşımın çalışmamasına veya çok ciddi güvenlik açıklarına neden olabilir.

1. Temel Söz Dizimi (Syntax)

Dosyanın yapısı oldukça basittir ancak "boşluklar" (whitespace) konusunda çok hassastır.

Genel format şöyledir:

Plaintext:
/paylasilacak/dizin    istemci(secenekler)    istemci2(secenekler)

Önemli Kural: İstemci IP'si ile parantez içindeki seçenekler arasında asla boşluk bırakılmamalıdır.

  • 192.168.1.5(rw) -> ✅ Doğru

  • 192.168.1.5 (rw) -> ❌ Yanlış (Linux bunu, istemciye varsayılan yetkileri ver ve (rw) diye bir istemci daha ara şeklinde yorumlar.)

2. İstemci Tanımlama Yöntemleri (Who?)

Paylaşımı kime açacağınızı belirtmenin birden fazla yolu vardır:

  • Tekil IP Adresi: Belirli bir sunucuya izin verir.

    • 192.168.1.10

  • IP Bloğu (CIDR - Subnet): Bir ağdaki herkese izin verir.

    • 192.168.1.0/24

  • Tam Alan Adı (FQDN): DNS üzerinden çözümleme yapar.

    • sunucu1.sirket.com

  • Wildcard (Joker Karakter): Belirli bir alan adına ait tüm makineler.

    • *.sirket.com

  • Tüm Dünya (Herkes): * karakteri. (Güvenlik açısından çok risklidir, sadece test ortamlarında önerilir.)

3. Seçenekler ve Parametreler (The Options)

İşin "ince ayrıntısı" buradadır. Parantez içine yazılan bu parametreler, dosya sisteminin nasıl davranacağını belirler.

A. Erişim Hakları

ParametreAnlamıAçıklama
roRead-Only (Sadece Okuma)Varsayılandır. İstemci dosyaları görebilir ama değiştiremez, silemez.
rwRead-Write (Okuma-Yazma)İstemciye dosya yazma, değiştirme ve silme hakkı verir.

B. Veri Tutarlılığı (Sync vs Async)

Bu ayar performans ve veri güvenliği arasındaki terazidir.

  • sync (Önerilen/Varsayılan): Sunucu, verinin diske fiziksel olarak yazıldığını onaylamadan istemciye "işlem tamam" yanıtı vermez. Elektrik kesintisinde veri kaybını önler ama performansı bir miktar düşürür.

  • async: Sunucu, veriyi RAM'e aldığı an "işlem tamam" der. Çok daha hızlıdır ancak sunucu o an çökerse veri kaybolabilir.

C. Kullanıcı Yetkilendirme (Squashing)

NFS'in en kafa karıştırıcı ama en önemli güvenlik katmanıdır. İstemcideki root kullanıcısının, sunucudaki dosyalara root yetkisiyle erişip erişemeyeceğini belirler.

  • root_squash (Varsayılan/Güvenli): İstemci makinedeki root kullanıcısı dosyaya erişmek istediğinde, sunucu onu yetkisiz bir kullanıcıya (nfsnobody veya nobody) dönüştürür. Böylece istemci root, sunucudaki kritik sistem dosyalarını silemez.

  • no_root_squash (Riskli): İstemcideki root, sunucuda da root sayılır. Genellikle disksiz (diskless) istemciler veya yönetimsel yedekleme işlemleri için kullanılır.

  • all_squash: Kim bağlanırsa bağlansın (root veya normal kullanıcı), sunucu onları "anonim" kullanıcıya dönüştürür. Genellikle herkese açık FTP/NFS alanlarında kullanılır.

Özel UID/GID Atama: Eğer squash işlemi yapılıyorsa, anonim kullanıcının kim olacağını siz belirleyebilirsiniz:

  • anonuid=1000: Gelen kullanıcıyı sunucudaki 1000 ID'li kullanıcı gibi gör.

  • anongid=1000: Gelen kullanıcıyı 1000 ID'li grup üyesi gibi gör.

D. Dosya Ağacı Kontrolü

  • subtree_check: Eğer /home dizinini değil de /home/ahmet dizinini paylaşıyorsanız, NFS her dosya isteğinde bu dosyanın hala /home/ahmet sınırları içinde olup olmadığını kontrol eder. Güvenlidir ama dosya ismi değiştirmelerde sorun çıkarabilir.

  • no_subtree_check: Bu kontrolü devre dışı bırakır. Genellikle tüm disk (/) veya bir disk bölümünün tamamı paylaşıldığında performans artışı için kullanılır. Modern sistemlerde genellikle bu tercih edilir.

4. Pratik Senaryolar ve Örnekler

Aşağıda gerçek hayatta karşılaşabileceğiniz senaryolara göre /etc/exports satırları bulunmaktadır.

Senaryo 1: Genel Yedekleme Alanı (Güvenli) Sadece 192.168.1.20 IP'li yedekleme sunucusu yazabilsin, root yetkisi olmasın.

Plaintext
/var/nfs/yedek    192.168.1.20(rw,sync,root_squash,no_subtree_check)

Senaryo 2: Web Sunucuları İçin Ortak Medya Klasörü Tüm web sunucuları (10.0.0.0/24 bloğu) resimleri okuyabilsin ama yazamasın.

Plaintext:
/var/www/html/images    10.0.0.0/24(ro,sync,root_squash)

Senaryo 3: Yönetimsel Erişim (Dikkatli Kullanın) Sistem yöneticisinin bilgisayarına tam yetki. Root, sunucuda da root olsun.

Plaintext:
/home    192.168.1.5(rw,sync,no_root_squash)

Senaryo 4: Halka Açık Paylaşım Herkes yazabilsin ama yazılan her dosya nfsnobody kullanıcısına ait olsun (Güvenlik için).

Plaintext:
/var/nfs/public    *(rw,sync,all_squash)

5. Değişiklikleri Uygulama: exportfs

Dosyayı düzenleyip kaydettikten sonra servisi yeniden başlatmanıza gerek yoktur (ve önerilmez, çünkü aktif bağlantılar kopabilir). Bunun yerine exportfs komutu kullanılır.

  • sudo exportfs -a: /etc/exports içindeki tüm paylaşımları dışa aktarır (apply).

  • sudo exportfs -r: Paylaşımları yeniden yükler (refresh). /var/lib/nfs/etab dosyasını senkronize eder.

  • sudo exportfs -v: O an neyin, hangi ayarlarla paylaşıldığını detaylı (verbose) gösterir. Hata ayıklamak için en iyi komuttur.

    • İpucu: Bu komutu çalıştırdığınızda, sizin yazmadığınız varsayılan ayarları da (örn: wdelay, root_squash) görebilirsiniz.

6. Sık Yapılan Hatalar ve Çözümleri

  1. Boşluk Hatası:

    • Hata: 192.168.1.5 (rw)

    • Sonuç: IP adresi salt okunur (varsayılan) bağlanır, (rw) kısmı ise isim çözümlenemedi hatası verir.

  2. Firewall Unutkanlığı:

    • NFS sadece 2049 portunu değil, rpcbind (111) ve mountd için rastgele portları kullanır. Firewall ayarlarında NFS servisine izin verilmelidir (ufw allow from 192.168.1.0/24 to any port nfs gibi).

  3. Dosya İzinleri:

    • /etc/exports üzerinden rw verseniz bile, Linux dosya sistemi (chmod/chown) izinleri buna engel olabilir. Örneğin, /data klasörünün sahibi root ise ve siz root_squash kullanıyorsanız, istemci oraya yazamaz. Klasörün sahipliğini chown nobody:nogroup /data yapmak gerekebilir.


Özet Tablo

ÖzellikAçıklamaNe Zaman Kullanılır?
rwOkuma/YazmaDosya yükleme/değiştirme gerekiyorsa.
roSalt OkunurISO arşivleri, medya dosyaları paylaşırken.
syncEşzamanlı YazmaVeri kaybı tahammülü yoksa (Veritabanı vb.).
asyncAsenkron YazmaHız öncelikliyse (Geçici dosyalar).
root_squashRoot'u KısıtlaGüvenlik önceliğinde (Standart kullanım).
no_root_squashRoot'a İzin VerDiskless boot, tam sistem yedeği alırken.


Yorumlar

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Başlangıç Onarma