/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:
/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ğru192.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ı
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 makinedekirootkullanıcısı dosyaya erişmek istediğinde, sunucu onu yetkisiz bir kullanıcıya (nfsnobody veya nobody) dönüştürür. Böylece istemciroot, 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/homedizinini değil de/home/ahmetdizinini paylaşıyorsanız, NFS her dosya isteğinde bu dosyanın hala/home/ahmetsı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.
/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.
/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.
/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).
/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/exportsiçindeki tüm paylaşımları dışa aktarır (apply).sudo exportfs -r: Paylaşımları yeniden yükler (refresh)./var/lib/nfs/etabdosyası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
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.
Firewall Unutkanlığı:
NFS sadece
2049portunu değil,rpcbind(111) vemountdiçin rastgele portları kullanır. Firewall ayarlarında NFS servisine izin verilmelidir (ufw allow from 192.168.1.0/24 to any port nfsgibi).
Dosya İzinleri:
/etc/exportsüzerindenrwverseniz bile, Linux dosya sistemi (chmod/chown) izinleri buna engel olabilir. Örneğin,/dataklasörünün sahibirootise ve sizroot_squashkullanıyorsanız, istemci oraya yazamaz. Klasörün sahipliğinichown nobody:nogroup /datayapmak gerekebilir.
Yorumlar