The Ağ Dosya Sistemi (NFS), dağıtık bir depolama çözümüdür. Yerel sunucuda uzak dizinlerin bağlanmasına izin veren ve bunu yerel depolama alanıymış gibi kullanan bir dosya sistemi protokolüdür. NFS, birden fazla istemcinin uzak depolama alanını paylaşmasına olanak tanır. Düzenli olarak paylaşılan kaynaklar gerektiren ortamlar için son derece uygundur. NFS, ONC RPC (Open Network Computing Remote Procedure Call) sistemi üzerine kurulmuştur. RFC (Request for Comments) içinde tanımlanmış açık bir standarttır. Bu, herkesin protokolü uygulayabilmesini sağlar.
Bu kılavuzda, Ubuntu 20.04 üzerinde bir NFS bağlama (mount) işlemi kurma ve yapılandırma adımlarını inceleyeceğiz.
Gereksinimler
NFS tanımının da belirttiği gibi, NFS yapılandırmasının iki bölümü vardır:
-
Host: Verileri fiziksel olarak depolar ve depolama alanını “istemci” (client) sistemlerle paylaşır.
-
Client: “Host” sisteme bağlanan ve uzak depolama alanını yerelmiş gibi kullanan sistem.
Gösterimimiz için her ikisi de Ubuntu 20.04 ile yapılandırılmış iki sunucu kullanacağız. İşte Ubuntu sunucunuzu nasıl kuracağınıza dair kolay bir kılavuz. Kılavuz boyunca bu sunucular host ve client olarak adlandırılacaktır. Birden fazla olsa bile client için yapılacak işlemin aynı olacağını unutmayın.
Sunuculara aşağıdaki IP adresleri atanmıştır. Bu sunucular CloudSigma tarafından barındırılmaktadır:
-
host: 31.171.240.79
-
client: 31.171.250.109
Bunları uygun IP adresleriyle değiştirdiğinizden emin olun.
NFS Kurulumu
NFS, resmi Ubuntu depolarında kolayca mevcuttur. host ve client sistemleri için farklı yazılım paketleri vardır.
-
Host üzerinde NFS Kurulumu
Host üzerinde, makinenin bir NFS host olarak hizmet vermesini sağlayacak bileşenlere ihtiyacımız var. Bu, nfs-kernel-server paketi biçiminde gelir. Ubuntu, paket yöneticisi olarak APT kullanır. İlk olarak terminali başlatın ve APT paket veritabanını güncelleyin:
|
1 |
host$ sudo apt update |

Ardından, nfs-kernel-server paketini kurun. Gerekirse, APT ek bağımlılıkları otomatik olarak halledecektir:
|
1 |
host$ sudo apt install nfs-kernel-server |

-
İstemci (Client) üzerinde NFS Kurulumu
On the client sisteminde, ağ üzerinden host dizinlerine bağlanma işlevselliğine ihtiyacımız var. NFS sunucu işlevselliği gerektirmez. Ubuntu'da bu, nfs-common paketinde bir araya getirilmiştir. APT paket veritabanını güncelleyin:
|
1 |
client$ sudo apt update |

Ardından, nfs-common paketini kurun:
|
1 |
$ sudo apt install nfs-common |

Host Üzerindeki Paylaşılan Dizinler
Sırada, her biri farklı bir yapılandırmaya sahip iki ayrı dizini paylaşacağız. NFS bağlamalarının süper kullanıcı (superuser) erişimi açısından nasıl çalıştığına dair iki temel yöntemi göstereceğiz. Varsayılan olarak, süper kullanıcılar tüm sistem üzerinde her şeyi yapma yetkisine sahiptir. Ancak, NFS ile bağlanan dizinler, bağlandıkları sistemin bir parçası değildir. NFS sunucusu, süper kullanıcı ayrıcalığı gerektiren herhangi bir işlemi gerçekleştirmeyi reddedecektir. Bu kısıtlama, istemcilerin NFS bağlamaları üzerinde yazma, sahiplikleri yeniden atama ve diğer süper kullanıcı görevlerini gerçekleştirme yetkisinin olmaması anlamına gelir.
Belirli güvenilir kullanıcıların bağlı dosya sistemlerinde bu görevleri gerçekleştirmesine izin vermek mümkündür. Ancak bu durum bir risk unsuru taşır, çünkü böyle bir client potansiyel olarak host üzerinde tam erişim elde edebilir. Bu risk, uygun kullanıcı izni yönetimi ile azaltılabilir. Linux'ta sudoers dosyası, sistemdeki tüm kullanıcı ayrıcalıklarını kontrol eder. Daha fazla bilgi için, Linux sudoers dosyasının nasıl yapılandırılacağına.
-
Genel amaçlı bağlama (mount)
İlk örnek, varsayılan NFS davranışlarına sahip genel amaçlı bir NFS bağlaması olacaktır. Bu yaklaşımda, istemcinin bağlamalar üzerinde süper kullanıcı işlemleri gerçekleştirmesi son derece zordur. Bu tür NFS bağlamaları genellikle dosya depolama, bir CMS (İçerik Yönetim Sistemi) kullanarak yükleme yapma veya proje dosyalarını paylaşma vb. işlemler için yaygın olarak dağıtılır.
Aşağıdaki adımlar host sisteminde gerçekleştirilecektir. İlk olarak, paylaşım için nfs:
|
1 |
host$ sudo mkdir -pv /var/nfs/general |

Dizin sudo yetkisiyle oluşturulduğu için sahibi root:
|
1 |
$ ls -la /var/nfs/general |

Varsayılan yapılandırma olarak NFS, güvenlik önlemleri nedeniyle istemci tarafındaki herhangi bir root işlemini nobody:nogroup kimlik bilgilerine çevirecektir. Tutarlılık için, dizin sahipliğini bu kimlik bilgileriyle eşleşecek şekilde değiştirin:
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
Ev dizini
İkinci örnek, host kullanıcısının ev dizinini istemciler için kullanılabilir hale getirmektir. Seçilen istemcilerden güvenilen yöneticiler, kullanıcıları kolayca yönetmek için erişebilirler. /home dizini varsayılan olarak mevcuttur, bu nedenle herhangi bir dizin oluşturmaya gerek yoktur. Dizin izinlerine gelince, faydadan çok soruna yol açacağı için herhangi bir değişiklik yapmaya gerek yoktur.
NFS Dışa Aktarımlarını Yapılandırma
Paylaşılacak dizinler artık oluşturuldu. Sırada, bunları istemciler için kullanılabilir hale getirmek üzere NFS'nin yapılandırılması var. NFS, hangi dizinlerin paylaşılacağını takip etmek için bir yapılandırma dosyası kullanır. Tercih ettiğiniz metin düzenleyicide aşağıdaki NFS yapılandırma dosyasını açın:
|
1 |
host$ sudo nano /etc/exports |

Dosyanın yorum bölümü, yapılandırmanın genel sözdizimi yapısını açıklar. Kısacası, herhangi bir dizin aşağıdaki biçimde bildirilmelidir:
|
1 |
$ <directory> <client>(<option_1>,<option_2>,...,<option_N>) |
Paylaşmaya karar verdiğimiz iki dizin için yapılandırma şu şekilde görünecektir. Her iki dizin de neredeyse aynı yapılandırma seçeneklerine sahiptir:
|
1 2 3 |
host$/var/nfs/general 31.171.250.221(rw,sync,no_subtree_check) host$ /home 31.171.250.221(rw,sync,no_root_squash,no_subtree_check) |

İşte yapılandırma seçeneklerinin hızlı bir açıklaması:
-
rw: İstemciye birim üzerinde hem okuma hem de yazma izni verilir.
-
sync: Yanıt vermeden önce NFS'yi değişiklikleri diske yazmaya zorlar. Daha kararlı ve tutarlı bir deneyim sunar. Yanıt, uzak birimin gerçek durumunu yansıtacaktır. Ancak dosya işlemleri daha yavaş olacaktır.
-
no_subtree_check: Alt ağaç kontrolünü engeller. Devre dışı bırakılmazsa, ana bilgisayarlar istemciden gelen her istek için dışa aktarılan ağaçta dosyanın varlığını kontrol etmeye zorlanacaktır. Bu durum, örneğin istemci dosyayı kullanırken dosyanın yeniden adlandırılması gibi birçok soruna yol açabilir. Çoğu durumda, alt ağaç kontrollerini devre dışı bırakmak en iyi yoldur.
-
no_root_squash: Daha önce belirtildiği gibi, NFS uzak root kullanıcısından gelen her isteği yetkisiz bir kullanıcıya çevirecektir. Bu, ana bilgisayar sistemine istenmeyen erişimi önlemek için tasarlanmış bir güvenlik özelliğidir. Ancak bu seçeneğin kullanılması bu davranışı devre dışı bırakacaktır.
Yapılandırma dosyasını kaydedin ve düzenleyiciden çıkın. Değişikliklerin geçerli olması için NFS sunucusunu yeniden başlatın:
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
Güvenlik Duvarını Ayarlama
Herhangi bir sunucu için uygun güvenlik duvarı yapılandırması bir zorunluluktur. Ubuntu 20.04 sunucunuzu buna göre yapılandırdığınızı varsayarsak, UFW güvenlik duvarı aktif olmalıdır. Çoğu Linux dağıtımıyla birlikte gelen basit ama güçlü bir güvenlik duvarıdır. Yeni başlayanlar için, UFW'yi, nasıl çalıştığını ve örneklerle yaygın UFW kullanımını açıklayan hızlı bir kılavuz aşağıdadır.
Varsayılan olarak güvenlik duvarı gelen ve giden tüm trafiği engelleyecektir. NFS sunucusunun düzgün bir şekilde bağlanabilmesini ve trafik alışverişinde bulunabilmesini sağlamak için NFS protokolü için bir istisna eklememiz gerekir. İlk olarak, güvenlik duvarının durumunu kontrol edin. Bu işlem aynı zamanda mevcut tüm kuralları da yazdıracaktır:
|
1 |
host$ sudo ufw status |

Gördüğümüz gibi, sisteme yalnızca SSH trafiğine izin veriliyor. NFS trafiğine izin vermek için bir istisna eklememiz gerekiyor.
Çoğu durumda, gerekli trafiğe izin veren en kısıtlayıcı kuralın kullanılması şiddetle tavsiye edilir. Bu nedenle, ana bilgisayara yalnızca seçilen istemcilerin bağlanmasına izin vereceğiz:
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

Bundan sonra, güvenlik duvarı durumunu tekrar kontrol edin:
|
1 |
host$ sudo ufw status |

Bağlama Noktası Oluşturma
Sunucu artık istemci sisteminin NFS protokolüne bağlanmasına izin vermeye hazır. Sırada, istemciyi hazırlamamız gerekiyor. Uzak birime erişmek için, bunun yerel olarak istemci üzerine bağlanması gerekir. Bağlama noktası için özel bir boş dizin kullanılması önerilir.
İki uzak birim için iki ayrı bağlama noktası oluşturun:
|
1 |
client$ sudo mkdir -pv /nfs/general |

|
1 |
client$ sudo mkdir -pv /nfs/home |

Bağlama noktaları hazır olduğuna göre, uzak birimleri bağlamanız gerekir:
|
1 |
client$ sudo mount 31.171.240.236:/var/nfs/general /nfs/general |
![]()
|
1 |
client$ sudo mount 31.171.240.236:/home /nfs/home |
![]()
Bağlamaların başarılı olup olmadığını doğrulayabiliriz. Bağlı tüm birimlerin listesini kontrol edin:
|
1 |
client$ df -h |

İşte bu kadar! Uzak birimler başarıyla bağlandı. Aşağıdaki komutu kullanarak alan kullanımını da kontrol edebiliriz:
|
1 |
client$ du -sh /nfs/home |

NFS Erişimini Test Etme
Şimdiye kadar uzak birimler düzgün bir şekilde bağlandı. Ancak, istemci uzak birimdeki verileri okuyamaz/yazamazsa bunun hiçbir yararı olmayacaktır. Doğrulamak için, NFS bağlama noktalarında sahte bir dosya oluşturun. Burada dosya, root'a özgü yapılandırmaların düzgün çalışıp çalışmadığını test etmek için root yetkisiyle, root'a özgü yapılandırmaların düzgün çalışıp çalışmadığını test etmek için oluşturulacaktır:
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
Ardından, dosyanın sahipliğini kontrol edin:
|
1 |
client$ ls -l /nfs/general/write_test.txt |

Gördüğümüz gibi, NFS dosya sahibini nobody:nogroup olarak çeviriyor. /var/nfs/ general dizini nobody:nogroup sahipliğine sahip olduğundan, NFS dosya sahipliğini çeviriyor. Diğer NFS bağlama noktasını test etme zamanı:
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
Dosyanın varlığını ve sahipliğini kontrol edin:
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

Bu durumda, NFS dosyanın sahipliğini çevirmedi. Bu istemci, yönetimsel eylemleri gerçekleştirebilecek şekilde yapılandırılmıştı. Dahası, orijinal host dizini /home, nobody:nogroup sahipliğine sahip değil..
Ek İpuçları
-
Açılışta Bağlama
Şimdiye kadar, NFS birimini yerel bir dizine manuel olarak bağlamamız gerekiyordu. Bağlantı kesilmezse, NFS bağlamaları sistem yeniden başlayana kadar devam eder. NFS birimi düzenli olarak kullanılıyorsa, manuel bağlama son derece zahmetli hale gelir. Birden fazla NFS bağlaması olması durumunda, bunları tek tek manuel olarak bağlamak pratik değildir.
Using the /etc/fstab dosyasını kullanarak süreci otomatikleştirebiliriz. Açılış sırasında bu betik, NFS birimlerini hedef bağlama noktalarına otomatik olarak bağlayacaktır. Dosyayı bir metin düzenleyicide açın:
|
1 |
client$ sudo nano /etc/fstab |

Host sistemin uzak birimlerini bağlamak için aşağıdaki satırları ekleyin:
|
1 2 3 |
client$ 31.171.240.236:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 client$31.171.240.236:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 |

Betiği kaydedin ve metin düzenleyiciyi kapatın. Bir sonraki açılışta Linux, uzak birimleri otomatik olarak bağlayacaktır. Sistem bağlanırken ve birimleri bağlarken sistemin açılmasının biraz zaman alabileceğini unutmayın.
-
NFS Biriminin Bağlantısını Kesme
Uzak birim artık gerekli değilse, birimlerin bağlantısını kesmek onları istemci sisteminden kaldıracaktır. Ancak bağlantıyı kesmeden önce, hiçbir uygulamanın/betiğin uzak birimi kullanmadığından emin olun. NFS bağlamalarının bağlantısını kesmek, diğer bağlamaların bağlantısını kesmeye benzer. Bu durumda, /nfs/home ve /nfs/general birimlerinin bağlantısını kesin:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/genel |

Ardından, işlemi doğrulayın:
|
1 |
istemci$ df -h |

Son Düşünceler
Bu kılavuzda, bir NFS sunucusu oluşturduk ve NFS uzaktan paylaşımının bazı temel özelliklerini gösterdik. NFS'yi bir üretim ortamında uygulamak istiyorsanız, NFS protokolünün şifrelenmediğini unutmayın. Bu durum, örneğin ortadaki adam (man-in-the-middle) saldırıları gibi bazı güvenlik endişelerine yol açabilir.
Keyifli bilişimler!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.