Ubuntu 16.04 Üzerinde NFS Bağlantısı Kurulumu: Adım Adım Kapsamlı Rehber
Giriş: NFS Nedir ve Neden Kullanılır?
NFS (Network File System), Unix tabanlı sistemler arasında ağ üzerinden dosya paylaşımını sağlayan dağıtık bir dosya sistemi protokolüdür. Sun Microsystems tarafından 1980’lerde geliştirilen NFS, kullanıcıların bir ağ üzerindeki uzak bilgisayarlardaki dosyalara, yerel depolama birimlerindeymiş gibi erişmesine olanak tanır. Bu, özellikle birden fazla kullanıcının veya uygulamanın aynı verilere erişmesi gerektiği ortamlarda merkezi bir depolama çözümü sunar. Ubuntu 16.04, uzun süreli destek (LTS) sürümü olması nedeniyle hala birçok kurumsal ve kişisel ortamda kullanılmaktadır. Bu makale, Ubuntu 16.04 üzerinde bir NFS sunucusu kurma ve bir NFS istemcisini yapılandırma süreçlerini adım adım açıklayacaktır.
NFS’in temel amacı, ağ üzerindeki makineler arasında dosya ve dizinleri şeffaf bir şekilde paylaşmaktır. Bu sayede, sunucular arasında veri senkronizasyonu kolaylaşır, merkezi bir yedekleme noktası oluşturulabilir ve kullanıcıların farklı makinelerden aynı verilere erişimi sağlanır. Örneğin, bir web sunucusu kümesi, tüm web sitelerinin dosyalarını tek bir NFS sunucusundan çekebilir; bu da içeriğin güncellenmesini ve yönetilmesini büyük ölçüde basitleştirir.
NFS Kullanmanın Avantajları:
* Merkezi Veri Yönetimi: Tüm verilerin tek bir yerde depolanması, veri bütünlüğünü ve yedekleme süreçlerini kolaylaştırır.
* Kaynak Paylaşımı: Disk alanı gibi kaynaklar, ağ üzerindeki tüm istemciler tarafından paylaşılabilir, bu da depolama maliyetlerini düşürebilir.
* Kolay Erişim: Kullanıcılar, dosyalarına herhangi bir istemciden erişebilir ve bu dosyaları yerel depolamadaki dosyalar gibi kullanabilir.
* Yönetim Kolaylığı: Yazılım güncellemeleri veya yapılandırma değişiklikleri gibi işlemler merkezi sunucuda yapılarak tüm istemcilere yansıtılabilir.
* Ölçeklenebilirlik: İhtiyaç duyulduğunda ek istemciler kolayca sisteme dahil edilebilir.
NFS Kullanmanın Dezavantajları:
* Güvenlik Endişeleri: Geleneksel NFSv3, zayıf güvenlik mekanizmalarına sahiptir. Veri şifrelemesi ve kimlik doğrulama için ek önlemler (VPN, Kerberos ile NFSv4) gerekebilir.
* Performans: Ağ gecikmesi ve bant genişliği, NFS performansını doğrudan etkileyebilir. Özellikle geniş alan ağlarında (WAN) performans düşüşleri yaşanabilir.
* Tek Arıza Noktası (Single Point of Failure): NFS sunucusunun çökmesi durumunda, tüm istemciler paylaşılan verilere erişimi kaybedebilir. Yüksek erişilebilirlik çözümleri bu riski azaltabilir.
Bu makalede, Ubuntu 16.04’ün kararlılığı ve yaygın kullanımı göz önüne alınarak, hem bir NFS sunucusunun nasıl kurulacağı hem de bir istemcinin bu paylaşımlara nasıl bağlanacağı detaylı bir şekilde ele alınacaktır.
Ön Gereksinimler ve Sistem Hazırlığı
NFS kurulumuna başlamadan önce, bazı temel ön gereksinimlerin karşılandığından ve sistemlerin hazır olduğundan emin olmalıyız. Bu rehber için en az iki adet Ubuntu 16.04 makinesine ihtiyacımız olacak: biri NFS sunucusu, diğeri NFS istemcisi olarak görev yapacak.
Gereksinimler:
* İki Adet Ubuntu 16.04 Makinesi: Bu makineler fiziksel sunucular, sanal makineler (VMware, VirtualBox, KVM vb.) veya bulut örnekleri (AWS EC2, Azure VM, Google Cloud Compute Engine vb.) olabilir.
* Ağ Bağlantısı: Sunucu ve istemci makinelerinin birbirleriyle ağ üzerinden iletişim kurabiliyor olması gerekir. Her iki makineye de statik IP adresleri atamak, yapılandırma ve sorun giderme süreçlerini kolaylaştıracaktır.
* Örnek Sunucu IP: 192.168.1.100
* Örnek İstemci IP: 192.168.1.101
* Sudo Yetkileri: Kurulum ve yapılandırma adımları için her iki makinede de sudo yetkilerine sahip bir kullanıcı hesabına ihtiyacınız olacaktır.
* Güncel Sistemler: Güvenlik ve kararlılık açısından, kurulum öncesinde her iki sistemin de güncel olduğundan emin olmak önemlidir.
Sistem Hazırlığı Adımları:
Her iki makinede de aşağıdaki komutları çalıştırarak sistem paket listelerini güncelleyin ve yüklü paketleri en son sürümlerine yükseltin:
sudo apt update
sudo apt upgrade -y
Bu işlem, potansiyel güvenlik açıklarını kapatacak ve en son paket sürümlerini almanızı sağlayacaktır.
Güvenlik Duvarı (UFW) Ayarları:
Ubuntu’da varsayılan olarak gelen güvenlik duvarı (UFW – Uncomplicated Firewall) etkin olabilir. NFS trafiğinin sorunsuz bir şekilde geçebilmesi için güvenlik duvarını yapılandırmamız gerekecektir. Şimdilik, kurulum tamamlanana kadar güvenlik duvarını geçici olarak devre dışı bırakabilir veya NFS için gerekli portları açabiliriz. Kurulumun ardından güvenlik duvarı ayarlarını detaylı olarak ele alacağız.
Şu anda UFW’nin durumunu kontrol etmek için:
sudo ufw status
Eğer UFW etkinse ve varsayılan olarak gelen bağlantıları engelliyorsa, NFS bağlantısı kurulurken sorun yaşayabilirsiniz. Kurulumun bu aşamasında, eğer UFW etkinse, NFS sunucusu tarafında gerekli portları açmaya odaklanacağız. İstemci tarafında genellikle özel bir UFW ayarı gerekmez, çünkü istemci sunucuya bağlantı başlatır.
Bu ön hazırlıklar tamamlandıktan sonra, NFS sunucusu kurulumuna geçebiliriz.
NFS Sunucu Kurulumu ve Yapılandırması
NFS sunucusu, paylaşılan dizinleri barındıracak ve istemcilere bu dizinlere erişim sağlayacak makinedir. Kurulum süreci, gerekli paketlerin yüklenmesini, paylaşılacak dizinin oluşturulmasını, /etc/exports dosyasının yapılandırılmasını ve güvenlik duvarı ayarlarının yapılmasını içerir.
NFS Sunucu Paketlerinin Kurulumu
NFS sunucusunu kurmak için nfs-kernel-server paketini yüklememiz gerekir. Bu paket, NFS çekirdek modüllerini ve ilgili yardımcı programları içerir.
NFS sunucusu olarak kullanacağınız makinede aşağıdaki komutu çalıştırın:
sudo apt install nfs-kernel-server -y
Kurulum tamamlandığında, NFS servisi otomatik olarak başlayacaktır. Servisin durumunu kontrol etmek için:
systemctl status nfs-kernel-server
Çıktıda active (exited) veya active (running) ibaresini görmelisiniz.
Paylaşılacak Dizinin Oluşturulması ve İzinlerin Ayarlanması
Şimdi, NFS istemcileriyle paylaşmak istediğimiz dizini oluşturalım. Bu dizin, istemcilerin erişeceği merkezi depolama alanı olacaktır. Genellikle /mnt veya /srv altında bir dizin oluşturulur.
Örnek olarak /mnt/nfs_share adında bir dizin oluşturalım:
sudo mkdir -p /mnt/nfs_share
Bu dizine, istemcilerin dosya oluşturabilmesi ve değiştirebilmesi için uygun izinler vermemiz gerekebilir. Eğer tüm kullanıcıların tam erişime sahip olmasını istiyorsanız, dizinin sahipliğini ve izinlerini ayarlayabilirsiniz. Örneğin, herkesin okuma, yazma ve çalıştırma iznine sahip olmasını sağlamak için:
sudo chown nobody:nogroup /mnt/nfs_share
sudo chmod 777 /mnt/nfs_share
* chown nobody:nogroup: Bu komut, dizinin sahibini nobody kullanıcısı ve nogroup grubuna atar. Bu, genellikle NFS paylaşımları için iyi bir uygulamadır, çünkü istemciden gelen root dışı kullanıcıların kimlikleri, sunucudaki nobody kullanıcısına eşlenecektir (squashing).
* chmod 777: Bu komut, dizine tam okuma, yazma ve çalıştırma izinleri verir. Gerçek bir üretim ortamında, daha kısıtlı izinler (örneğin, belirli bir kullanıcı veya grup için) vermek isteyebilirsiniz.
NFS Dışa Aktarma Listesinin Yapılandırılması (/etc/exports)
/etc/exports dosyası, NFS sunucusunun hangi dizinleri, hangi istemcilere ve hangi seçeneklerle paylaşacağını tanımladığı ana yapılandırma dosyasıdır. Bu dosyayı düzenleyerek paylaşımlarımızı tanımlayacağız.
Dosyayı bir metin düzenleyici ile açın:
sudo nano /etc/exports
Dosyanın sonuna aşağıdaki gibi bir satır ekleyin:
/mnt/nfs_share 192.168.1.101(rw,sync,no_subtree_check)
Bu satırı açıklayalım:
* /mnt/nfs_share: Paylaşılacak olan yerel dizinin yolu.
192.168.1.101: Bu dizine erişim izni verilecek olan istemcinin IP adresidir. Birden fazla istemci için virgülle ayrılmış IP adresleri veya bir ağ aralığı (örneğin, 192.168.1.0/24) belirtebilirsiniz. kullanarak tüm istemcilere izin verebilirsiniz, ancak güvenlik açısından bu önerilmez.
* (...): Parantez içindeki kısım, bu paylaşım için geçerli olacak seçeneklerdir.
* rw: (Read/Write) İstemciye paylaşılan dizine hem okuma hem de yazma izni verir. Sadece okuma izni vermek isterseniz ro (Read Only) kullanın.
* sync: NFS’in senkronize modda çalışmasını sağlar. Bu, bir yazma işlemi tamamlandığında, verilerin diske gerçekten yazıldığını garanti eder. Performansı bir miktar düşürebilir ancak veri bütünlüğünü artırır. Alternatifi async‘tir, bu daha hızlıdır ancak güç kesintisi gibi durumlarda veri kaybı riski taşır.
* no_subtree_check: Alt dizin kontrollerini devre dışı bırakır. Bu, özellikle bir dizinin bir bölümü paylaşılıyorsa, performans sorunlarını önler ve genellikle önerilen bir seçenektir.
* no_root_squash: Bu seçenek, istemcideki root kullanıcısının sunucudaki root kullanıcısı gibi muamele görmesini sağlar. Bu güvenlik açısından çok risklidir ve yalnızca güvendiğiniz istemciler ve belirli durumlar için kullanılmalıdır. Varsayılan olarak root_squash etkindir, bu da istemcideki root kullanıcısının kimliğini nobody kullanıcısına eşler.
* all_squash: Tüm istemci kullanıcılarının kimliklerini sunucudaki nobody kullanıcısına eşler. Bu, ek bir güvenlik katmanı sağlar.
* anonuid=ID ve anongid=ID: root_squash veya all_squash kullanıldığında, nobody kullanıcısının UID’sini ve GID’sini belirleyebilirsiniz. Varsayılan olarak nobody (UID=65534, GID=65534) kullanılır.
Örnek /etc/exports yapılandırmaları:
# Belirli bir istemciye okuma/yazma izni
/mnt/nfs_share 192.168.1.101(rw,sync,no_subtree_check)
Bir ağ aralığına sadece okuma izni
/srv/read_only 192.168.1.0/24(ro,sync,no_subtree_check)
Birden fazla istemciye farklı seçeneklerle erişim
/home/users 192.168.1.102(rw,sync,no_subtree_check) 192.168.1.103(ro,sync,no_subtree_check)
Tüm istemcilere okuma/yazma, tüm kullanıcıları nobody olarak eşle
/var/www/html *(rw,sync,no_subtree_check,all_squash)
Yapılandırma dosyasını kaydettikten sonra (Ctrl+O, Enter, Ctrl+X nano’da), NFS sunucusuna yeni dışa aktarmaları okumasını söylememiz gerekir.
NFS Sunucusunu Yeniden Başlatma ve Dışa Aktarımları Kontrol Etme
/etc/exports dosyasında yaptığınız değişikliklerin etkin olması için NFS sunucusunu yeniden başlatmanız veya exportfs komutunu çalıştırmanız gerekir.
Değişiklikleri uygulamak için:
sudo exportfs -a
Bu komut, /etc/exports dosyasındaki tüm paylaşımları yeniden dışa aktarır. -r (yeniden dışa aktar) ve -v (ayrıntılı çıktı) seçeneklerini de kullanabilirsiniz:
sudo exportfs -rv
NFS servisini yeniden başlatmak da aynı etkiyi yaratır ve bazen daha güvenli bir yöntem olabilir:
sudo systemctl restart nfs-kernel-server
Dışa aktarımlarınızın doğru bir şekilde yapılandırıldığını kontrol etmek için showmount komutunu kullanabilirsiniz:
showmount -e localhost
Bu komut, sunucunun dışa aktardığı dizinleri listelemelidir. Örnek çıktı:
Export list for localhost:
/mnt/nfs_share 192.168.1.101
Güvenlik Duvarı Ayarları (UFW)
NFS, çeşitli portları kullanır. Temel NFS trafiği için 2049/TCP ve 2049/UDP portları kullanılırken, RPC (Remote Procedure Call) hizmetleri (NFS’in bağımlı olduğu) 111/TCP ve 111/UDP portlarını kullanır. Ayrıca, NFS tarafından dinamik olarak atanan portlar da olabilir (mountd, statd, lockd gibi).
Güvenli bir yapılandırma için, sadece belirli istemci IP adreslerinden gelen NFS trafiğine izin vermek en iyi uygulamadır.
NFS sunucusu üzerinde, istemcinin IP adresinden (örneğimizde 192.168.1.101) gelen bağlantılara izin vermek için UFW kurallarını ekleyin:
sudo ufw allow from 192.168.1.101 to any port nfs
sudo ufw allow from 192.168.1.101 to any port rpcbind
nfs ve rpcbind servisleri UFW tarafından tanınan servislerdir ve ilgili portları otomatik olarak açar. Eğer UFW varsayılan olarak kapalıysa, bu komutlar bir hata vermez ancak kuralları ekler. Eğer UFW daha önce etkin değilse, etkinleştirmelisiniz:
sudo ufw enable
Bu komut, UFW’yi etkinleştirir ve mevcut kuralları uygular. Etkinleştirmeden önce SSH bağlantınızı kaybetmemek için SSH portuna (varsayılan 22) izin verdiğinizden emin olun:
sudo ufw allow ssh
UFW durumunu kontrol etmek için:
sudo ufw status verbose
Çıktıda, eklediğiniz kuralları ve durumun active olduğunu görmelisiniz.
NFS sunucusu yapılandırması bu noktada tamamlanmıştır. Şimdi NFS istemcisi kurulumuna geçebiliriz.
NFS İstemci Kurulumu ve Yapılandırması
NFS istemcisi, NFS sunucusunda paylaşılan dizinlere erişecek makinedir. İstemci tarafında da gerekli paketlerin yüklenmesi ve paylaşımların bağlanması adımları bulunur.
NFS İstemci Paketlerinin Kurulumu
NFS istemcisi olarak kullanacağınız makinede, NFS paylaşımlarına bağlanmak için nfs-common paketini yüklemeniz gerekir. Bu paket, NFS istemci yardımcı programlarını ve kütüphanelerini içerir.
NFS istemcisi olarak kullanacağınız makinede aşağıdaki komutu çalıştırın:
sudo apt install nfs-common -y
Kurulum tamamlandığında, istemci makineniz NFS paylaşımlarına bağlanmaya hazır olacaktır.
Paylaşılan Dizinin İstemci Üzerine Bağlanması
NFS sunucusundan dışa aktarılan dizini istemci makinesine bağlamadan önce, sunucunun paylaşımlarını kontrol etmek iyi bir uygulamadır.
İstemci makinesinde, NFS sunucusunun IP adresini kullanarak hangi dizinleri dışa aktardığını kontrol edin:
showmount -e 192.168.1.100
Burada 192.168.1.100 NFS sunucunuzun IP adresidir. Çıktı, sunucunun dışa aktardığı dizinleri ve hangi istemcilerin erişebileceğini göstermelidir:
Export list for 192.168.1.100:
/mnt/nfs_share 192.168.1.101
Şimdi, paylaşılan dizini bağlayacağımız bir yerel bağlama noktası oluşturmamız gerekiyor. Bu genellikle /mnt veya /media altında bir dizin olur.
sudo mkdir -p /mnt/nfs_share_client
Ardından, NFS sunucusundaki dizini istemci makinesindeki bu bağlama noktasına bağlayın:
sudo mount -t nfs 192.168.1.100:/mnt/nfs_share /mnt/nfs_share_client
* -t nfs: Bağlanacak dosya sisteminin türünü NFS olarak belirtir.
* 192.168.1.100:/mnt/nfs_share: NFS sunucusunun IP adresi ve sunucudaki paylaşılan dizinin yoludur.
* /mnt/nfs_share_client: İstemci makinesindeki bağlama noktasıdır.
Bağlama işlemi başarılı olursa, herhangi bir çıktı vermeyecektir. Bağlantının başarılı olduğunu doğrulamak için df -h komutunu kullanabilirsiniz:
df -h
Çıktıda, 192.168.1.100:/mnt/nfs_share adresinin /mnt/nfs_share_client bağlama noktasına bağlandığını görmelisiniz.
Örnek çıktı:
Filesystem Size Used Avail Use% Mounted on
...
192.168.1.100:/mnt/nfs_share 9.8G 1.2G 8.6G 13% /mnt/nfs_share_client
Bağlantıyı test etmek için, istemci üzerindeki /mnt/nfs_share_client dizinine bir dosya oluşturmayı deneyin:
sudo touch /mnt/nfs_share_client/test_file.txt
ls -l /mnt/nfs_share_client/
Şimdi NFS sunucusuna giderek /mnt/nfs_share dizininde bu dosyanın görünüp görünmediğini kontrol edin:
ls -l /mnt/nfs_share/
Eğer dosya her iki tarafta da görünüyorsa ve istemciden yazma izniniz varsa, NFS bağlantısı başarıyla kurulmuş demektir.
Sistem Başlangıcında Otomatik Bağlantı (/etc/fstab)
Yukarıdaki mount komutuyla yapılan bağlantı, sistem yeniden başlatıldığında kaybolacaktır. NFS paylaşımının her zaman erişilebilir olması için, sistemi başlangıcında otomatik olarak bağlanmasını sağlayacak şekilde /etc/fstab dosyasını düzenlememiz gerekir.
İstemci makinesinde /etc/fstab dosyasını açın:
sudo nano /etc/fstab
Dosyanın sonuna aşağıdaki satırı ekleyin:
192.168.1.100:/mnt/nfs_share /mnt/nfs_share_client nfs defaults,_netdev 0 0
Bu satırı açıklayalım:
* 192.168.1.100:/mnt/nfs_share: NFS sunucusunun IP adresi ve paylaşılan dizinin yolu.
* /mnt/nfs_share_client: İstemci üzerindeki bağlama noktası.
* nfs: Dosya sistemi türü.
* defaults,_netdev: Bağlama seçenekleri.
* defaults: Genellikle rw,suid,dev,exec,auto,nouser,async seçeneklerinin birleşimidir.
* _netdev: Bu seçenek, bu dosya sisteminin bir ağ cihazı olduğunu ve ağ servisleri başlatılana kadar bağlanmaması gerektiğini belirtir. Bu, ağ bağlantısı henüz kurulmadan NFS’in bağlanmaya çalışmasını ve önyükleme sırasında takılı kalmasını önler. Ubuntu 16.04 için kritik bir seçenektir.
* 0: Dump aracı tarafından yedeklenip yedeklenmeyeceğini belirtir (0 = yedekleme yapma).
* 0: fsck aracı tarafından dosya sistemi kontrolünün sırasını belirtir (0 = kontrol etme).
/etc/fstab dosyasını kaydettikten sonra, sisteminizi yeniden başlatmadan önce yeni fstab girdisini test etmek iyi bir uygulamadır. Mevcut NFS bağlantısını kaldırın (eğer bağlıysa) ve ardından fstab’daki tüm girdileri bağlamayı deneyin:
sudo umount /mnt/nfs_share_client
sudo mount -a
umount komutu bağlantıyı keser. mount -a komutu, /etc/fstab dosyasında listelenen ve zaten bağlı olmayan tüm dosya sistemlerini bağlamaya çalışır. Eğer bu komut herhangi bir hata vermezse ve df -h çıktısında NFS paylaşımını tekrar görüyorsanız, /etc/fstab yapılandırmanız doğru demektir.
Şimdi sisteminizi yeniden başlatabilir ve NFS paylaşımının otomatik olarak bağlanıp bağlanmadığını kontrol edebilirsiniz.
NFS Bağlantısının Test Edilmesi ve Sorun Giderme
NFS bağlantısını başarıyla kurduktan sonra, beklendiği gibi çalıştığından emin olmak için çeşitli testler yapmak ve olası sorunlarla başa çıkmak önemlidir.
Temel Testler
1. Dosya Oluşturma ve Silme: İstemci makinesinde, NFS bağlama noktası (örneğin /mnt/nfs_share_client) içinde bir dosya oluşturun, içine veri yazın ve ardından silmeyi deneyin.
echo "Bu bir test dosyasıdır." | sudo tee /mnt/nfs_share_client/istemci_test.txt
cat /mnt/nfs_share_client/istemci_test.txt
sudo rm /mnt/nfs_share_client/istemci_test.txt
Bu işlemleri başarıyla yapabiliyorsanız, okuma/yazma izinleriniz doğru demektir.
2. Sunucu Tarafında Doğrulama: İstemcide yaptığınız değişikliklerin NFS sunucusunda da yansıtıldığını kontrol edin. Örneğin, istemcide oluşturduğunuz istemci_test.txt dosyasının sunucudaki /mnt/nfs_share dizininde görünüp görünmediğini kontrol edin.
3. Performans Testi: Büyük bir dosyayı (örneğin birkaç yüz MB veya GB) NFS paylaşımına kopyalayarak performansı test edebilirsiniz. Bu, ağ hızınızı ve NFS yapılandırmanızın etkinliğini gösterir.
# Örnek olarak 1GB boyutunda bir dosya oluştur
dd if=/dev/zero of=/tmp/large_file.img bs=1M count=1024
# Bu dosyayı NFS paylaşımına kopyala
time cp /tmp/large_file.img /mnt/nfs_share_client/
time komutu, kopyalama işleminin ne kadar sürdüğünü gösterecektir.
Yaygın Sorunlar ve Çözümleri
NFS kurulumu sırasında veya sonrasında karşılaşabileceğiniz bazı yaygın sorunlar ve bunların olası çözümleri aşağıda listelenmiştir:
1. mount: ... No route to host veya mount: ... Connection refused:
* Neden: Sunucuya ağ bağlantısı yok veya güvenlik duvarı engelliyor.
* Çözüm:
* İstemciden sunucuya ping atarak ağ bağlantısını kontrol edin: ping 192.168.1.100.
* NFS sunucusunda UFW veya başka bir güvenlik duvarının NFS portlarını (2049, 111) ve RPC portlarını istemci IP’sine açtığından emin olun. sudo ufw status verbose komutuyla kontrol edin.
* Sunucu üzerinde nfs-kernel-server ve rpcbind servislerinin çalıştığından emin olun: systemctl status nfs-kernel-server ve systemctl status rpcbind.
2. mount: ... Permission denied:
* Neden: İstemcinin paylaşıma erişim izni yok veya exports dosyasında yanlış yapılandırma var.
* Çözüm:
* NFS sunucusundaki /etc/exports dosyasını kontrol edin. İstemcinin IP adresinin doğru yazıldığından ve rw (okuma/yazma) veya ro (sadece okuma) izninin verildiğinden emin olun.
* sudo exportfs -rv komutunu çalıştırarak değişiklikleri uygulayın ve showmount -e localhost ile kontrol edin.
* Sunucu tarafındaki paylaşılan dizinin (örn. /mnt/nfs_share) izinlerini ve sahipliğini kontrol edin (ls -ld /mnt/nfs_share). İstemcinin yazma iznine sahip olabilmesi için genellikle 777 veya uygun bir kullanıcı/grup izinleri gerekir.
3. UID/GID Eşleşmeme Sorunları:
* Neden: İstemci ve sunucu üzerindeki kullanıcı ve grup kimlikleri (UID/GID) eşleşmediğinde, dosya sahiplikleri ve izinleri yanlış görünebilir veya erişim sorunları yaşanabilir.
* Çözüm:
* En basit çözüm, /etc/exports dosyasında all_squash seçeneğini kullanmaktır. Bu, tüm istemci kullanıcılarını sunucudaki nobody kullanıcısına eşler.
* Daha kontrollü bir çözüm, istemci ve sunucu üzerinde aynı UID/GID’ye sahip kullanıcılar ve gruplar oluşturmaktır. Örneğin, sunucuda nfsuser (UID=1001) oluşturup, istemcide de aynı UID’ye sahip bir nfsuser oluşturmak.
* no_root_squash kullanmaktan kaçının, zira bu güvenlik riskleri taşır.
4. mount -a komutu boot sırasında takılıyor veya hata veriyor:
* Neden: /etc/fstab dosyasındaki NFS girdisi, ağ servisleri başlamadan önce bağlanmaya çalışıyor.
* Çözüm:
* /etc/fstab girdinizde _netdev seçeneğinin olduğundan emin olun:
192.168.1.100:/mnt/nfs_share /mnt/nfs_share_client nfs defaults,_netdev 0 0
* Ayrıca, bağlantı sorunları durumunda sistemin takılmasını önlemek için hard yerine soft ve intr (kesilebilir) seçeneklerini kullanmayı düşünebilirsiniz:
192.168.1.100:/mnt/nfs_share /mnt/nfs_share_client nfs defaults,_netdev,soft,intr 0 0
* hard: NFS sunucusu yanıt vermezse, istemci tekrar tekrar denemeye devam eder ve işlem kilitlenir.
* soft: NFS sunucusu yanıt vermezse, istemci belirli bir süre sonra hata döndürür.
* intr: hard mount’lar için, kullanıcının işlemi kesmesine izin verir.
5. NFS sunucusunda rpc.mountd veya rpcbind hataları:
* Neden: RPC servisleri düzgün çalışmıyor.
* Çözüm:
* Servislerin durumunu kontrol edin: systemctl status rpcbind ve systemctl status nfs-kernel-server.
* Gerekirse yeniden başlatın: systemctl restart rpcbind ve systemctl restart nfs-kernel-server.
Bu sorun giderme adımları, çoğu NFS bağlantı sorununu çözmenize yardımcı olacaktır. Her zaman log dosyalarını (örneğin /var/log/syslog veya dmesg) kontrol etmek, sorunun kökenini anlamak için değerli bilgiler sağlayabilir.
NFS Güvenliği İçin En İyi Uygulamalar
NFS, ağ üzerinden dosya paylaşımı için güçlü bir araç olsa da, özellikle eski sürümleri (NFSv3) güvenlik konusunda bazı zayıflıklara sahiptir. Bu nedenle, NFS kurulumunuzu güvence altına almak için bazı en iyi uygulamaları takip etmek hayati önem taşır.
1. IP Tabanlı Kısıtlama:
/etc/exports dosyasında (tüm istemciler) yerine her zaman belirli IP adreslerini veya IP aralıklarını (CIDR notasyonu ile) kullanın. Bu, yalnızca yetkili istemcilerin paylaşıma erişebilmesini sağlar.
* Örnek: 192.168.1.101(rw,sync,no_subtree_check) veya 192.168.1.0/24(ro,sync,no_subtree_check).
2. Güvenlik Duvarı Kullanımı (UFW/iptables):
* NFS sunucusunda, güvenlik duvarını (UFW veya iptables) kullanarak sadece belirli istemci IP’lerinden gelen NFS portlarına (2049, 111) erişime izin verin.
* Asla tüm ağdan veya internetten NFS portlarını açmayın.
* Örnek: sudo ufw allow from 192.168.1.101 to any port nfs.
3. no_root_squash Kullanımından Kaçınma:
* no_root_squash seçeneği, istemcideki root kullanıcısının sunucuda root olarak işlem yapmasına izin verir. Bu, istemci makinesinin güvenliği ihlal edildiğinde sunucunun da kolayca ele geçirilmesine yol açabilir.
* Mümkün olduğunca root_squash (varsayılan) veya all_squash kullanın. Bu seçenekler, istemciden gelen root kullanıcılarının kimliklerini sunucudaki nobody kullanıcısına eşleyerek ayrıcalık yükseltme riskini azaltır.
4. Minimum Ayrıcalık Prensibi:
* Paylaşımlar için her zaman en az ayrıcalık ilkesini uygulayın. Eğer bir paylaşım sadece okunacaksa, /etc/exports dosyasında ro (read-only) seçeneğini kullanın.
* Paylaşılan dizinlerin dosya sistemi izinlerini (chmod, chown) dikkatlice ayarlayın. Gerekmedikçe 777 gibi geniş izinler vermekten kaçının. Belirli bir kullanıcı veya grup için izinler tanımlayın ve bu kullanıcı/grubun UID/GID’sini istemci ve sunucu arasında eşlemeye çalışın.
5. NFSv4 Kullanımı:
* NFSv4, NFSv3’e göre önemli güvenlik geliştirmeleri sunar. Tek bir port (2049/TCP) üzerinden çalışır ve Kerberos kimlik doğrulama ile güçlü güvenlik sağlar.
* Ubuntu 16.04, NFSv4’ü destekler. Eğer güvenlik birincil önceliğinizse ve Kerberos altyapınız varsa, NFSv4’ü yapılandırmayı düşünebilirsiniz. Bu makale NFSv3’e odaklanmış olsa da, NFSv4’e geçiş, özellikle kurumsal ortamlarda şiddetle tavsiye edilir.
6. Veri Şifreleme (VPN/IPsec):
* NFSv3, ağ üzerinden aktarılan verileri şifrelemez. Hassas verileri paylaşıyorsanız, NFS trafiğini bir VPN (Virtual Private Network) tüneli veya IPsec (Internet Protocol Security) üzerinden yönlendirmeyi düşünün. Bu, verilerin ağda dinlenmesini (eavesdropping) önler.
7. Fiziksel Güvenlik:
* NFS sunucusunun fiziksel güvenliğinin sağlandığından emin olun. Yetkisiz fiziksel erişim, tüm yazılımsal güvenlik önlemlerini etkisiz hale getirebilir.
8. Sıkı Güncelleme Politikası:
* Hem NFS sunucusunu hem de istemcilerini düzenli olarak güncelleyin (sudo apt update && sudo apt upgrade). Bu, bilinen güvenlik açıklarının kapatılmasını sağlar.
Bu en iyi uygulamaları takip ederek, NFS ortamınızın güvenliğini önemli ölçüde artırabilir ve potansiyel riskleri minimize edebilirsiniz. Unutmayın ki güvenlik, sürekli bir süreçtir ve her zaman güncel tehditlere karşı tetikte olmak gerekir.
Sonuç
Bu kapsamlı rehberde, Ubuntu 16.04 üzerinde bir NFS sunucusu kurma ve bir NFS istemcisini yapılandırma süreçlerini adım adım ele aldık. NFS’in ne olduğundan, neden kullanıldığına, ön gereksinimlerden kurulum ve yapılandırma adımlarına, bağlantı testlerinden sorun giderme yöntemlerine ve son olarak güvenlik için en iyi uygulamalara kadar birçok konuya değindik.
NFS, ağ üzerinden dosya paylaşımı için güçlü, esnek ve yaygın olarak kullanılan bir protokoldür. Merkezi bir depolama çözümü sunarak veri yönetimini basitleştirir, kaynak paylaşımını kolaylaştırır ve birden fazla sistemin aynı verilere şeffaf bir şekilde erişmesine olanak tanır. Özellikle Ubuntu 16.04 gibi LTS sürümlerinde, kararlı ve güvenilir bir dosya paylaşım altyapısı sağlamak için hala popüler bir tercihtir.
Kurulum sürecinde, nfs-kernel-server ve nfs-common paketlerinin yüklenmesi, /etc/exports dosyasının doğru bir şekilde yapılandırılması ve güvenlik duvarı (UFW) kurallarının ayarlanması kritik adımlardır. İstemci tarafında ise, bağlama noktasının oluşturulması ve /etc/fstab aracılığıyla otomatik bağlantının sağlanması, sistemin kararlı ve sürekli çalışması için önemlidir.
Güvenlik, NFS kurulumunda göz ardı edilmemesi gereken bir faktördür. IP tabanlı kısıtlamalar, güvenlik duvarı kuralları, no_root_squash kullanımından kaçınma ve minimum ayrıcalık prensibinin uygulanması, NFS ortamınızı olası tehditlere karşı korumak için temel adımlardır. Hassas veriler için NFSv4’ün Kerberos kimlik doğrulaması veya VPN/IPsec tünelleri aracılığıyla veri şifrelemesi gibi daha gelişmiş güvenlik önlemlerini değerlendirmek, kurumlar için hayati öneme sahiptir.
Umarız bu rehber, Ubuntu 16.04 sistemlerinizde NFS paylaşımlarını başarılı bir şekilde kurmanız ve yönetmeniz için size sağlam bir temel sunmuştur. Doğru yapılandırma ve güvenlik uygulamalarıyla, NFS, ağ altyapınız için değerli ve verimli bir bileşen haline gelecektir. Gelecekte, daha modern NFS sürümlerini (NFSv4.1 veya üstü) veya alternatif dağıtık dosya sistemlerini (Ceph, GlusterFS) keşfederek depolama çözümlerinizi daha da optimize etmeyi düşünebilirsiniz.
