NFS Nedir ve Neden Kullanılır?
NFS (Network File System), Unix tabanlı işletim sistemleri arasında (ve günümüzde diğer işletim sistemleriyle de uyumlu) dosya paylaşımını sağlayan dağıtık bir dosya sistemi protokolüdür. Rocky Linux 8 gibi RHEL tabanlı sistemlerde NFS, ağ üzerinden dosyaları ve dizinleri merkezi bir konumdan paylaşmak için yaygın olarak kullanılır.
Neden NFS Kullanmalısınız?
- Merkezi Depolama: Birden fazla sunucu veya istemcinin aynı verilere erişmesini sağlar, bu da veri tutarlılığını ve yönetimini kolaylaştırır.
- Kaynak Paylaşımı: Disk alanı, uygulamalar ve diğer kaynaklar ağ üzerindeki istemcilerle paylaşılabilir.
- Yedekleme Kolaylığı: Tüm önemli veriler merkezi bir NFS sunucusunda depolandığında, yedekleme işlemleri basitleşir.
- Basitlik: Kurulumu ve yapılandırması nispeten kolaydır.
Bu rehberde, Rocky Linux 8 üzerinde bir NFS sunucusu kurma, paylaşım oluşturma ve ardından bir NFS istemcisinden bu paylaşıma nasıl erişileceğini adım adım anlatacağız.
NFS Sunucu Kurulumu ve Yapılandırması
NFS sunucusu, dosyaları ve dizinleri ağdaki diğer sistemlerle paylaşacak olan makinedir. İşte kurulum adımları:
1. Gerekli Paketleri Kurma
İlk olarak, NFS sunucusunu çalıştırmak için gerekli olan nfs-utils paketini kurmanız gerekir. Sisteminizin güncel olduğundan emin olun:
sudo dnf update -y
sudo dnf install nfs-utils -y
2. NFS Servislerini Başlatma ve Etkinleştirme
nfs-utils paketi kurulduktan sonra, NFS sunucusu ve rpcbind servislerini başlatmalı ve sistem açılışında otomatik olarak başlamaları için etkinleştirmelisiniz. rpcbind, NFS gibi RPC tabanlı servislerin port numaralarını çözümlemek için gereklidir.
sudo systemctl enable --now nfs-server rpcbind
sudo systemctl status nfs-server rpcbind
Her iki servisin de “active (running)” durumda olduğunu doğrulayın.
3. Paylaşılacak Dizin Oluşturma ve İzinleri Ayarlama
NFS ile paylaşmak istediğiniz bir dizin oluşturun. Bu dizin, istemcilerin erişeceği veri deposu olacaktır. İzinleri ve sahipliği doğru ayarlamak önemlidir.
sudo mkdir -p /srv/nfs/paylasimlar/veriler
sudo chown nfsnobody:nfsnobody /srv/nfs/paylasimlar/veriler
sudo chmod 0777 /srv/nfs/paylasimlar/veriler
/srv/nfs/paylasimlar/veriler: Örnek bir paylaşım dizini. Kendi ihtiyaçlarınıza göre değiştirebilirsiniz.nfsnobody:nfsnobody: NFS istemcileri genellikle paylaşılan dizinenfsnobodykullanıcısı olarak erişir. Bu, güvenlik için iyi bir uygulamadır, ancakno_root_squashgibi seçeneklerle kök kullanıcı eşlemesini devre dışı bırakabilirsiniz (ancak dikkatli kullanılmalıdır).0777: Bu izinler, herkesin okuma, yazma ve yürütme yetkisine sahip olmasını sağlar. Güvenlik gereksinimlerinize göre daha kısıtlayıcı izinler de kullanabilirsiniz (örneğin, belirli bir grup için0770).
4. NFS Dışa Aktarımlarını Yapılandırma (/etc/exports)
Hangi dizinlerin hangi istemcilerle hangi seçeneklerle paylaşılacağını /etc/exports dosyası belirler. Bu dosyayı düzenleyerek paylaşımınızı tanımlayın:
sudo vi /etc/exports
Dosyanın sonuna aşağıdaki gibi bir satır ekleyin:
/srv/nfs/paylasimlar/veriler 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
Açıklamalar:
/srv/nfs/paylasimlar/veriler: Paylaşılacak dizinin yolu.192.168.1.0/24: Bu, NFS paylaşımına erişim izni verilen istemci IP adres aralığıdır. Belirli bir IP adresi (örn.192.168.1.100), bir ana bilgisayar adı (örn.istemci.example.com) veya tüm istemciler için*kullanabilirsiniz (güvenlik riski taşır).- Seçenekler:
rw: Okuma ve yazma erişimi. Sadece okuma içinrokullanın.sync: Yazma isteklerinin diske fiziksel olarak yazılana kadar istemciye yanıt vermemesini sağlar. Veri tutarlılığı için önerilir, ancak performansı düşürebilir. Daha hızlı ancak daha az güvenli yazmalar içinasynckullanabilirsiniz.no_subtree_check: Dizin ağacının altındaki alt dizinlerin her erişimde kontrol edilmesini devre dışı bırakır. Performansı artırır, ancak bazı özel durumlarda güvenlik riski oluşturabilir (genellikle önerilir).no_root_squash: Uzak kök kullanıcısının (root) yerel kök kullanıcısı olarak davranmasına izin verir. Bu, istemcideki root kullanıcısının NFS paylaşımı üzerinde tam yetkiye sahip olacağı anlamına gelir. Dikkatli kullanılmalıdır, güvenlik riski taşır. Güvenli bir ortamda genellikleroot_squash(varsayılan) veyaall_squashkullanılır.root_squash(varsayılan): Uzak root kullanıcısının UID/GID’sininfsnobodyolarak eşler. Güvenlik için önerilir.all_squash: Tüm uzak kullanıcıların UID/GID’sininfsnobodyolarak eşler.anonuid=xxx, anongid=yyy: Belirli bir anonim kullanıcı ve grup ID’si atamak için kullanılır.
Değişiklikleri kaydettikten sonra, NFS dışa aktarımlarını uygulamak için aşağıdaki komutu çalıştırın:
sudo exportfs -arv
Bu komut, /etc/exports dosyasındaki yeni veya güncellenmiş paylaşımları etkinleştirir.
5. Firewall Yapılandırması
Rocky Linux’ta varsayılan olarak firewalld etkin gelir. NFS servislerinin dışarıdan erişilebilir olması için firewall’da gerekli portları açmanız gerekir:
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --reload
Bu komutlar, NFS’in kullandığı temel servisleri (nfs, rpc-bind, mountd) güvenlik duvarına kalıcı olarak ekler ve değişiklikleri etkinleştirir.
NFS İstemci Kurulumu ve Bağlama
NFS istemcisi, NFS sunucusundaki paylaşımlara erişecek olan makinedir.
1. Gerekli Paketleri Kurma
NFS istemcisini çalıştırmak için yine nfs-utils paketine ihtiyacınız vardır:
sudo dnf update -y
sudo dnf install nfs-utils -y
2. rpcbind Servisini Başlatma (İstemci Tarafında)
NFS istemcisi de sunucu ile iletişim kurmak için rpcbind servisine ihtiyaç duyar:
sudo systemctl enable --now rpcbind
sudo systemctl status rpcbind
3. Bağlama Noktası Oluşturma
NFS paylaşımını bağlamak istediğiniz bir yerel dizin oluşturun:
sudo mkdir -p /mnt/nfs/veriler
4. NFS Paylaşımını Kontrol Etme
NFS sunucusunun hangi dizinleri paylaştığını kontrol etmek için showmount komutunu kullanabilirsiniz:
showmount -e
Örnek:
showmount -e 192.168.1.10
Bu komut, sunucunun paylaştığı dizinleri ve erişim izni olan istemcileri listelemelidir.
5. NFS Paylaşımını Manuel Bağlama
Şimdi NFS paylaşımını oluşturduğunuz yerel dizine bağlayabilirsiniz:
sudo mount -t nfs :/srv/nfs/paylasimlar/veriler /mnt/nfs/veriler
Örnek:
sudo mount -t nfs 192.168.1.10:/srv/nfs/paylasimlar/veriler /mnt/nfs/veriler
Bağlantının başarılı olup olmadığını kontrol etmek için df -h komutunu kullanabilirsiniz:
df -h
Çıktıda, bağladığınız NFS paylaşımını görmelisiniz.
6. NFS Bağlantısını Kaldırma
Bir NFS bağlantısını kaldırmak isterseniz, umount komutunu kullanın:
sudo umount /mnt/nfs/veriler
Bağlantıyı kaldırmadan önce, bağlama noktasında hiçbir işlemin (dosya açma, uygulama çalıştırma vb.) olmadığından emin olun.
NFS Bağlantılarını Otomatikleştirme (/etc/fstab)
Sistem yeniden başlatıldığında NFS paylaşımının otomatik olarak bağlanmasını sağlamak için /etc/fstab dosyasını kullanmalısınız.
1. /etc/fstab Dosyasını Düzenleme
sudo vi /etc/fstab
Dosyanın sonuna aşağıdaki satırı ekleyin:
:/srv/nfs/paylasimlar/veriler /mnt/nfs/veriler nfs defaults,_netdev 0 0
Örnek:
192.168.1.10:/srv/nfs/paylasimlar/veriler /mnt/nfs/veriler nfs defaults,_netdev 0 0
Seçeneklerin açıklamaları:
defaults:rw,suid,dev,exec,auto,nouser,asyncseçeneklerinin birleşimidir._netdev: Bu seçenek çok önemlidir. Sisteme, bu dosya sisteminin bir ağ cihazına bağlı olduğunu ve ağ servisleri başlatılmadan bağlanmaya çalışılmaması gerektiğini bildirir. Bu, önyükleme sırasında olası sorunları önler.0 0: İlk0, dosya sistemi için dump komutunun çalıştırılmaması gerektiğini belirtir. İkinci0ise, fsck kontrolünün önyükleme sırasında yapılmaması gerektiğini gösterir (NFS için geçerli değildir).
2. fstab Yapılandırmasını Test Etme
Değişiklikleri kaydettikten sonra, herhangi bir hata olup olmadığını kontrol etmek ve yeni yapılandırmayı uygulamak için tüm fstab girdilerini bağlamayı deneyin:
sudo mount -a
Eğer herhangi bir hata mesajı almazsanız, yapılandırmanız doğru demektir. Sistem yeniden başlatıldığında NFS paylaşımı otomatik olarak bağlanacaktır. Hata alırsanız, /etc/fstab dosyasındaki sözdizimini veya sunucu/istemci tarafındaki yapılandırmayı kontrol edin.
Güvenlik ve İzinler
NFS kurulumunda güvenlik çok önemlidir. Aşağıdaki noktalara dikkat etmelisiniz:
- Firewall Kuralları: NFS sunucusunda firewall’u sadece belirli IP adreslerinden veya ağlardan erişime izin verecek şekilde yapılandırın. Genel erişime izin vermek (
*kullanmak) çok risklidir. no_root_squashKullanımı: Bu seçeneği yalnızca kesinlikle gerekli olduğunda ve güvenli bir yerel ağ içinde kullanın. Aksi takdirde, istemcideki root kullanıcısı sunucu üzerindeki dosya sisteminde tam yetkiye sahip olabilir.- UID/GID Eşleşmesi: NFS, kullanıcıları ve grupları UID (User ID) ve GID (Group ID) numaraları üzerinden tanır. Sunucu ve istemci üzerinde aynı UID/GID numaralarına sahip kullanıcılar oluşturmak, izin sorunlarını önlemeye yardımcı olur. Aksi takdirde,
nfsnobodyolarak eşlenebilirler. - SELinux: Rocky Linux’ta SELinux varsayılan olarak etkindir. NFS paylaşımları için doğru SELinux bağlamının ayarlandığından emin olun. Genellikle
nfs_tbağlamı kullanılır. Eğer SELinux nedeniyle erişim sorunları yaşıyorsanız, aşağıdaki komutları kullanabilirsiniz:sudo semanage fcontext -a -t nfs_t "/srv/nfs/paylasimlar/veriler(/.*)?" sudo restorecon -Rv /srv/nfs/paylasimlar/verilerBu komutlar, paylaşılan dizine NFS bağlamını atar ve uygular. Sorun giderme aşamasında geçici olarak SELinux’u permissive moda alıp (
sudo setenforce 0) sorunun devam edip etmediğini kontrol edebilirsiniz, ancak kalıcı olarak devre dışı bırakmak güvenlik açısından önerilmez. - Minimum İzinler: Paylaşılan dizine ve içindeki dosyalara mümkün olan en düşük izinleri verin. İstemcilerin sadece ihtiyaç duydukları verilere erişebildiğinden emin olun.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, Rocky Linux 8 üzerinde bir NFS sunucusu kurmayı, bir dizini paylaşmayı, bir NFS istemcisini yapılandırmayı ve bu paylaşıma erişmeyi adım adım öğrendiniz. Ayrıca, bağlantıları otomatikleştirme ve güvenlik konularına da değindik. NFS, ağ tabanlı dosya paylaşımı için güçlü ve esnek bir çözümdür.
Sıkça Sorulan Sorular (SSS)
S: NFSv3 mü yoksa NFSv4 mü kullanmalıyım?
C: Rocky Linux 8, varsayılan olarak NFSv4’ü destekler ve kullanır. NFSv4, tek bir port üzerinden çalışması (firewall yapılandırmasını kolaylaştırır), gelişmiş güvenlik özellikleri (Kerberos entegrasyonu) ve durum bilgisi olan protokolü sayesinde NFSv3’e göre genellikle daha modern ve tercih edilen bir seçenektir. Ancak, eski istemcilerle uyumluluk gerekiyorsa NFSv3 de kullanılabilir.
S: NFS bağlantım neden kesiliyor veya erişemiyorum?
C: Birkaç olası neden olabilir:
- Ağ Bağlantısı: Sunucu ve istemci arasındaki ağ bağlantısını kontrol edin.
- Firewall: Hem sunucuda hem de istemcide firewall kurallarının doğru ayarlandığından emin olun. Gerekli NFS portları açık olmalıdır.
- NFS Servisleri: Hem sunucuda (
nfs-server,rpcbind) hem de istemcide (rpcbind) gerekli servislerin çalıştığından emin olun. /etc/exportsHatası: Sunucudaki/etc/exportsdosyasındaki yazım hatalarını veya yanlış IP adreslerini kontrol edin. Değişikliklerden sonraexportfs -arvçalıştırdığınızdan emin olun.- SELinux: SELinux’un erişimi engellemediğinden emin olun (yukarıdaki “Güvenlik ve İzinler” bölümüne bakın).
S: Permission denied hatası alıyorum, ne yapmalıyım?
C: Bu genellikle izin veya eşleme sorunlarından kaynaklanır:
/etc/exportsSeçenekleri: Sunucudakirw(okuma/yazma) seçeneğinin doğru ayarlandığından emin olun.- Dizin İzinleri: Sunucudaki paylaşılan dizinin (örn.
/srv/nfs/paylasimlar/veriler) dosya sistemi izinlerini (chmod,chown) kontrol edin. NFS istemcileri genelliklenfsnobodyolarak erişir, bu nedenle bu kullanıcının yazma izni olduğundan emin olun. - UID/GID Eşleşmesi: İstemcideki kullanıcıların UID/GID’leri sunucudakilerle eşleşmiyorsa,
nfsnobodyolarak eşlenirler ve bu da izin sorunlarına yol açabilir.no_root_squashveyaanonuid/anongidseçeneklerini düşünebilirsiniz (güvenlik risklerini göz önünde bulundurarak). - SELinux: SELinux’un doğru yapılandırılmadığı durumlarda erişimi engelleyebilir.
S: showmount -e komutu çalışmıyor veya boş çıktı veriyor?
C: Bu durum genellikle NFS sunucusunda rpcbind servisinin çalışmadığı veya firewall’un rpc-bind servisini engellediği anlamına gelir. Sunucuda sudo systemctl status rpcbind komutunu kontrol edin ve firewall kurallarını gözden geçirin.
S: NFS bağlantısı yavaş çalışıyor, nasıl hızlandırabilirim?
C: Performansı etkileyen birkaç faktör vardır:
- Ağ Hızı: Sunucu ve istemci arasındaki ağ bağlantı hızı en büyük faktördür.
syncvsasync: Sunucudaki/etc/exportsdosyasındaasyncseçeneğini kullanmak yazma performansını artırabilir, ancak veri kaybı riski taşır.rsizevewsize: İstemci tarafındamountseçeneklerindersize(okuma boyutu) vewsize(yazma boyutu) değerlerini ayarlayabilirsiniz (örn.rsize=8192,wsize=8192). Genellikle 8192 veya 32768 gibi değerler kullanılır. Ancak çoğu modern NFS kurulumunda varsayılan değerler yeterince optimize edilmiştir.noatime: İstemci tarafındanoatimemount seçeneğini kullanarak dosya erişim zamanı güncellemelerini devre dışı bırakmak I/O yükünü azaltabilir.