NFSv4, birleşik ağ erişimi sağlar. NFS nedir? Ağ Dosya Sistemi. Ağ Dosya Sistemi Erişim Protokolü

  • 23.07.2019

Herkes veri aktarım protokollerine aşina değildir. Ancak çoğu, bilgisayarlarını tek bir ağa bağlamak veya dosyaları depolamak için bir sunucu kullanmak ister. Bunu yapmanın bir yolu: NFS. Ubuntu'da bir NFS sunucusu nasıl kurulur - okumaya devam edin.

NFS'yi doğru bir şekilde yapılandırarak farklı işletim sistemlerindeki bilgisayarları tek bir ağda birleştirebilirsiniz.

Ağ Dosya Sistemi, bir ağ dosyası erişim protokolüdür. Her zamanki gibi iki bölümden oluşuyor. Biri, uzak verilerin görüntülendiği bilgisayarda bulunan istemcidir. Diğeri, sunucu odası, bu verilerin depolandığı bilgisayarda bulunur. Özellikle yerel bir ağda ek disk alanı kullanmak oldukça uygundur. Ve eğer bir tür kurumsal bilgisayardan bahsediyorsak, o zaman bu sadece gereklidir.

Fark ne?

Bugün aynı işlevleri yerine getiren çok sayıda protokol ve çok farklı yazılımlar var. NFS'yi öne çıkaran nedir?

  • Farklı işletim sistemlerindeki bilgisayarları tek bir ağa bağlama yeteneği. Windows'un NFS aracılığıyla Ubuntu gibi bir Unix sistemine bağlanması genellikle uygundur. Samba var ve aynı amaç için kullanılıyor, ancak NFS, çekirdek düzeyinde uygulandığı için bu programdan daha kolay, daha basit ve daha hızlı. Bu nedenle, bunun üzerinden erişimi yapılandırmak genellikle daha kolay olacaktır.
  • NFS şeffaf dosya erişimi sağlar. Bu, tüm uzak dosyaların yerel dosyalarla aynı şekilde oynatıldığı anlamına gelir. Sunucuda herhangi bir dosyayı oynatmak için programların yükseltilmesi gerekmez.
  • NFS, dosyanın tamamını değil, yalnızca dosyanın istenen bölümünü gönderir.

Ağ Dosya Sistemini tam olarak çalışacak şekilde kurmak için en az iki bilgisayarda gereklidir: bir sunucu ve bir istemci. Doğal olarak, yeni başlayanlar, klasörleri "paylaşmanız" (açık erişim) gerektiğinden, sunucu bölümünün çoğunu terletmelidir. Ancak, tüm bunları yapmak oldukça kolaydır.

Çoğu veri aktarım protokolü gibi, NFS de hiç genç değil. 1984 yılında geliştirilmiştir ve UNIX sistemleri için tasarlanmıştır. Bu hala NFS'nin ana rolüdür, ancak birçoğu Windows'u Linux bilgisayarlarına bağlamayı çok uygun bulmuştur. Ayrıca NFS, yerel bir ev ağı üzerinden multimedya içeriği oynatmak için harikadır. Bu roldeki Samba genellikle donar ve yavaşlar.

NFS arka ucunu yükleme

Protokolün sunucu kısmını Ubuntu 16.04 üzerine kuracağız. Doğal olarak, bir Sunucu sürümünüz varsa, süreç hiçbir şekilde farklı değildir. Sadece Ubuntu'nun geleneksel versiyonunda, grafiksel arayüz kullanılarak bazı eylemler gerçekleştirilebilir.

Programın yüklenmesi. Bunu yapmak için Uygulama İndirme Merkezini kullanabilir veya sadece şu komutu girebilirsiniz:

sudo apt install nfs-kernel-server

Bundan sonra, kurulumun doğruluğunu kontrol etmek faydalı olacaktır. Bunu yapmak gerekli değildir, ancak yine de kontrol edeceğiz. Komutu girin:

Liman her yerde 2049 olmalı.

Şimdi çekirdeğin NFS'yi destekleyip desteklemediğini kontrol ediyoruz. Bunu yapmak için şunu girin:

cat / proc / dosya sistemleri | grep nfs

Ortaya çıkan değer şöyle görünmelidir: nodev nfsd

Bu, her şeyin doğru çalıştığı anlamına gelir. Değilse, komutu girin:

Bununla beraber, çekirdek modülünü kendimiz kuruyoruz.

Protokolü otomatik çalıştırmaya ekleyin. Bunu yapmak gerekli değildir, ancak her seferinde açmak çok sakıncalıdır. Yine, ayarlarda özel bir menü öğesi kullanarak ekleyebilir veya şu komutu kullanarak kendiniz yapabilirsiniz:

sudo systemctl nfs'yi etkinleştir

Böylece, sunucu bölümünü kurduk, doğru şekilde yapılandırmak ve istemciye gitmek için kalıyor.

özelleştirme

Ubuntu'da NFS kurmak, belirli klasörlerin paylaşılmasını içerir.

Yalnızca erişimi açmanın yanı sıra, kullanıcının bu klasörle ilgili yeteneklerini belirleyen parametreleri de belirtmelisiniz.

  • rw - bu parametrenin okunması ve yazılması, klasördeki dosyaların okunmasına ve yazılmasına izin verir.
  • ro - salt okunur - yalnızca klasörün okunmasına izin verir.
  • senkronizasyon (varsayılan) - bu parametre, aktarımın güvenilirliğini sağlar. Etkinleştirilirse, birden fazla dosyayı aynı anda veya farklı bilgisayarlara aktarmak mümkün olmayacaktır. Bu ayar, diğer isteklerin yanıtlanmasını engeller. Veri kaybını önler, ancak iletim daha yavaş olabilir.
  • zaman uyumsuz önceki parametrenin tersidir. Aktarım daha hızlıdır, ancak bilgi kaybı riski vardır.
  • güvenli - bu seçenek yalnızca sayıları 1024'ten küçük olan bağlantı noktalarının kullanılmasına izin verir. Varsayılan olarak etkindir.
  • güvensiz - herhangi bir bağlantı noktasının kullanılmasına izin verir.
  • nohide - aralarında iç içe geçmiş dizinlerin bulunduğu birkaç dizini bağlarsanız, üst öğenin aksine iç içe geçmiş dizinler boş olarak görüntülenir. Parametre bunu düzeltmeye yardımcı olacaktır.
  • anonuid - Anonim kullanıcılar için kullanıcı kimliğini belirtir. Bu özel bir kullanıcı kimliğidir.
  • anongid - Anonim için gid'i belirtir. GID (Grup Kimliği) başka bir kullanıcı kimliğidir.
  • no_subtree_check - işlev, alt ağaç kontrolünü devre dışı bırakır. Gerçek şu ki, onsuz, NFS ayrıca kullanıcıların dizinin yalnızca gerekli bölümlerine erişip erişmediğini kontrol eder. Bu işleri yavaşlatır. Parametre, hızlandırmanıza izin verir, ancak güvenliği düşürür.

Belirli bir durumda neye ihtiyaç duyulduğuna bağlı olarak bunları kullanacağız.

Yeni bir klasör oluşturalım. Ayrıca yenisini de kullanabilirsiniz. Klasörümüz / var / network olacak.

Şimdi bu klasörü / etc / export dosyasına eklemeniz gerekiyor. Açık ağ erişimi olan tüm dosya ve klasörler orada saklanır. Giriş şöyle görünmelidir:

/var/network168.1.1(rw,async,no_subtree_check)

192.168.1.1, üzerinden ilettiğimiz IP'dir. Bunu belirtmek zorunludur.

Dışa aktarma tablosunu güncelliyoruz:

Şimdi istemci tarafından klasöre erişmeye çalışalım.

NFS istemcisini yükleme ve yapılandırma

Ubuntu

Yapılandırılmış bir sunucuyu Ubuntu'ya bağlamak zor olmayacaktır. Bu sadece birkaç komutla yapılır.

Özel bir istemci paketi kurun:

sudo apt install nfs-ortak

sudo mount 192.168.1.1:/var/network/ / mnt /

Ağ klasörü bağlı. df'yi kullanarak bağlı tüm ağ klasörlerini kontrol edebilirsiniz:

Ayrıca erişim düzeyinizi özel bir komutla da kontrol edebilirsiniz:

Dosya sistemini aşağıdaki gibi devre dışı bırakın:

mount komutu hemen hemen her yerde kullanılır. Montaj işleminden, yani işletim sistemi tarafından kullanılmak üzere sabit diskte alan hazırlamaktan sorumludur. Kulağa karmaşık geliyor, ancak basitleştirirsek, ağ dosyalarını yeni basılmış klasördeki bilgisayarımıza aktardığımız ortaya çıkıyor. Burada / mnt / olarak adlandırılır.

pencereler

Windows ile, kural olarak, işler çok daha karmaşıktır. NFS istemcisi, tüm sunucu Windows'larında sorunsuz olarak çalıştırılabilir. Standart olanlardan şurada bulunur:

  • Windows 7 Ultimate / Kurumsal
  • Windows 8 / 8.1 Kurumsal
  • Windows 10 Kurumsal

Başka hiçbir yerde bulunamadı. Bu sürümlerden birine sahipseniz, aşağıdakileri yapın:

  1. "Programlar ve Özellikler" menüsünü açın.
  2. "Bileşen Ekle" ye tıklayın.
  3. Orada NFS'yi buluyoruz ve sadece "NFS için İstemci" koyuyoruz, başka bir bileşene ihtiyacımız yok.

Bağlandıktan sonra her şey aynı komutla monte edilir:

192.168.1.1'i bağla:/var/network/ / mnt /

Aşağıdaki şekilde bağlantısını kaldırabilirsiniz:

Komutlar, yönetici olarak çalıştırılan bir komut satırına girilir. Bundan sonra, Explorer'ı kullanarak istediğiniz ağ sürücüsünü kolayca bulabilirsiniz.

Peki ya bilgisayarda NFS istemcisi yoksa? Yazılımı Microsoft web sitesinden veya üçüncü taraf kaynaklardan indirmeyi deneyebilirsiniz. Burada başka komutlar veya eylemler gerekebilir.

Artık NFC'yi nasıl kullanabileceğinize dair temel bir anlayışa sahipsiniz ve en basit kurulumdan geçin. Bu bilgi, bir bilgisayardan diğerine erişim sağlamak için yeterlidir. Ayrıca, bir Windows PC aynı zamanda bir istemci görevi görebilir.

Dosyaların yerel bir ağ içinde dağıtılması için aşağıdaki teknolojiler ayırt edilebilir (Linux tabanlı sistemler dikkate alınır):

  • Ağ Dosya Sistemi (NFS) - dosya sistemlerine ağ erişimi için bir protokol;
  • Shell protokolü (FISH) üzerinden aktarılan dosyalar, kullanan veya RSH bilgisayarlar arasında dosya aktarmak için;
  • Güvenli Kabuk Dosya Sistemi (SSHFS) - uzak bir sistemle etkileşim kurmak için kullanılan, uzak sistemlere disk cihazlarını monte etmek için bir dosya sistemi istemcisi SFTP;
  • Samba, SMB / CIFS protokolünü kullanarak çeşitli işletim sistemlerindeki ağ sürücülerine ve yazıcılara erişmenizi sağlayan bir yazılım paketidir;

Bu not üzerinde durulacak NFS.

NFS (Ağ Dosya Sistemi) ağdaki herkese dosya / dizin dağıtmanız gerektiğinde kullanışlıdır. Şunu kullanarak şeffaflığa erişin: NFSİstemcilerin uzak bir dosya sistemini yerel bir dizin olarak bağlamasına izin verir ve dosya sistemleri farklı türlerde olabilir. Bu, yerel bir dosyayla çalışabilen herhangi bir istemci uygulamasının, aynı şekilde bağlı bir dosyayla da çalışabileceği anlamına gelir. NFS, programın kendisinde herhangi bir değişiklik yapılmadan.

Faydalara NFS atfedilebilir:

  • işlemci üzerindeki yükü azaltmak;
  • paylaşılan kaynakların sistemde düzenli dizinler olarak görüntülenmesi;
  • Şu anda mevcut NFS v4.1 yeni bir özellik sunan pNFS dosya paylaşımı uygulamanızı paralel hale getirmenize izin verir. NFS 2 ve 3 için bir uzantı da var - WebNFS bu da web tarayıcılarına entegrasyonu kolaylaştırır ve bir güvenlik duvarı üzerinden çalışmayı mümkün kılar.

    iş şeması NFS protokol.

    Linux altında bir NFS sunucusunu kurma ve yapılandırma

    Sistemin NFS'yi destekleyip desteklemediğini kontrol edin

    Cat / proc / dosya sistemleri | grep nfs

    Altında Arch Linux sunucu ve istemci aynı pakette

    Yaourt -S nfs-utils

    Sunucuyu kurmak için ( nfs-çekirdek-sunucusu) ve müşteri ( nfs-ortak) altında Ubuntu gerekli paketler

    Sudo apt-get install nfs-kernel-server nfs-ortak portmap

    Ayrıca sunucu IP'si için notta kullanılacaktır 192.168.1.100 ... Sunucuya her zaman aynı IP'nin atanabilmesi için, belirli bir IP'nin DHCP sunucusundaki (çoğunlukla bir yönlendirici) belirli bir MAC adresine dağıtımını belirtmek gerekir. Veya yerel DNS sunucunuzu açın. Örneğin veya.

    MAC adresi ifconfig (alan eter v Arch Linux).

    NFSv4 dağıtım dosyalarının zaten içinde bulunduğu bir kök dizin olduğunu varsayar. Örneğin, / srv / nfs- kök, / srv / nfs / ses- müzik dağıtmak için bir dizin. Versiyonda bu yeni yönergeye uymazsanız 4 , istemci tarafından bağlanırken bir hata alabilirsiniz:

    Mount.nfs: 192.168.1.100:/home/proft/torrents bağlanırken erişim sunucu tarafından reddedildi

    Hala bir kök dizini olmadan sunucusuz bir yaklaşım kullanmak istiyorsanız NFS, daha sonra istemci tarafından monte edilirken, sürümü açıkça belirtmelisiniz 3

    # mount mount -o "vers = 3" komutu için 192.168.1.100:/home/proft/torrents / home / proft / nfs / torrents # fstab için 192.168.1.100:/home/proft/torrents / home / proft / nfs / torrentler nfs yumuşak, nfsvers = 3 0 0

    kullanacağım NFSv4 kök dizini ile / srv / nfs / ve mount --bind kullanarak iç içe dizinleri monte etme.

    Diyelim ki istiyoruz

    • bir dizin dağıtmak ~ / torrentler ile birlikte rw için erişim tümünden yerel ağ içinde;
    • bir dizin dağıtmak ~ / fotoğraflar ile birlikte ro IP ile ana bilgisayar için erişim 192.168.1.101 ;

    İlk olarak kök dizini ve gerekli olan iç içe dizini oluşturalım.

    Sudo mkdir -p / srv / nfs / (torrentler, fotoğraflar)

    Mevcut dizinleri bağla torrentler, fotoğraflar v / srv / nfs.

    # sudo vim / etc / fstab / ana sayfa / proft / torrentler / srv / nfs / torrentler hiçbiri bağlama 0 0 / ana sayfa / proft / fotoğraflar / srv / nfs / fotoğraflar yok bağlama 0 0

    düzenleyelim / vb / ihracat tüm paylaşılan dizinleri açıklayan

    # sudo vim / etc / dışa aktarma # dosya formatı: izin verilen ana bilgisayarlar (seçenekler) / srv / nfs / torrentler 192.168.1.1/24(rw,async) / srv / nfs / fotoğraflar 192.168.1.101 (ro, zaman uyumsuz)

    arasında boşluk olmadığına dikkat edin. izin verilen ana bilgisayarlar ve (seçenekler)... Bir boşluğun varlığı, kuralların farklı bir yorumunu getirir.

    Mevcut seçenekler:

    • ro (rw) - salt okunur erişime izin ver (oku / yaz);
    • subtree_check (no_subtree_check) - bazı durumlarda, bölümün tamamını değil, yalnızca bir kısmını dışa aktarmanız gerekir. Bu durumda sunucu NFS yalnızca uygun alt dizinlerdeki dosyalara erişmeye çalıştıklarından emin olmak için istemci isteklerinde ek doğrulama yapmalıdır. Alt ağacın bu şekilde kontrolü ( alt ağaç kontrolleri) istemcilerle etkileşimi biraz yavaşlatır, ancak onu terk ederseniz, sistemin güvenliği ile ilgili sorunlar olabilir. Seçeneği kullanarak bir alt ağacın kontrolünü kaldırabilirsiniz. no_subtree_check... Seçenek subtree_check bu tür bir kontrolün dahil edilmesi varsayılan olarak varsayılır. Dışa aktarılan dizin disk bölümüyle çakışıyorsa, bir alt ağacı izlemeyi atlayabilirsiniz;
    • sync (async) - Sunucunun, isteklere yalnızca bu istekler tarafından yapılan değişiklikler diske yazıldıktan sonra yanıt vermesi gerektiğini belirtir. Seçenek zaman uyumsuz sunucuya bilgilerin diske yazılmasını beklememesini söyler, bu da performansı artırır, ancak güvenilirliği azaltır, çünkü bağlantı kesilirse veya ekipman arızalanırsa veri kaybı mümkündür;
    • noaccess - belirtilen dizine erişimi reddeder. Daha önce tüm ağ kullanıcılarına belirli bir dizine erişim izni verdiyseniz ve şimdi alt dizindeki erişimi yalnızca bazı kullanıcılarla sınırlamak istiyorsanız bu yararlı olabilir;
    • no_root_squash - varsayılan kullanıcı kök istemci makinede, sunucudaki dizinde aynı haklara sahip olmayacaktır. Bu seçenek, bu sınırlamayı kaldırır;
    • nohide - NFS yerel olmayan kaynakları otomatik olarak göstermez (örneğin, mount --bind kullanılarak monte edilir), bu seçenek bu tür kaynakların görüntülenmesini açar;
    • güvensiz - ayrıcalıksız bağlantı noktaları kullanın (> 1024);

    NFS sunucusunu başlatma

    # archlinux sudo systemctl start rpc-idmapd.service rpc-mountd.service altında # ubuntu sudo /etc/init.d/nfs-kernel-server start altında

    Gelecekte, yapılandırma dosyasını değiştirirken, şu komutla yeniden okumak yeterlidir:

    Sudo exportfs -rav

    Rpcinfo -p komutu | grep nfs, sunucunun başarıyla başlatılıp başlatılmadığını kontrol etmenizi sağlar.

    Linux istemcisi

    Kurulum

    # archlinux yaourt için -S nfs-utils # ubuntu için sudo apt-get install portmap nfs-common

    Ağ kaynaklarını monte etmek için dizinler oluşturun torrentler ve fotoğraflar

    Mkdir -p ~ / nfs / (torrentler, fotoğraflar)

    Manuel montaj için yürütün

    Sudo mount -t nfs -o rw, yumuşak 192.168.1.100:/srv/nfs/torrents / home / proft / nfs / torrents sudo mount -t nfs -o rw, yumuşak 192.168.1.100:/srv/nfs/photos / home / proft / nfs / fotoğraflar

    Seçenek yumuşak belirli bir süre sonra topu bağlama girişimlerini sessizce iptal etmeyi gösterir (zaman, seçenek tarafından belirlenir) retrans). Devamını oku adam nfs.

    Bu yöntem pek uygun değildir, çünkü bu komutları yeniden başlattıktan sonra her seferinde çalıştırmanız gerekecektir. Montajı otomatik yapalım.

    Otomatik montaj için dosyayı düzenleyin / vb / fstab

    # sudo vim / etc / fstab 192.168.1.100:/srv/nfs/torrents / home / proft / net / torrents nfs rw, soft 0 0 192.168.1.100:/srv/nfs/photos / home / proft / net / fotoğraflar nfs ro, yumuşak 0 0

    Ancak bu yöntemin dezavantajları da vardır, örneğin, sunucu mevcut değilse, NFS sunucusuna bağlanma girişimleri nedeniyle istemcinin yüklenmesi donabilir. Bunu düzeltmek için aşağıya bakın Otomatik FS.

    AutoFS - ağ kaynaklarının otomatik bağlantısı

    kullanarak uzak bir kaynak monte etmek mümkündür. Otomatik FS ilk erişimde ve etkin olmadığında otomatik olarak bağlantısını kes.

    Otomatik FS bulunan şablonları kullanır / etc / autofs... Ana şablon denir oto.master, belirli medya türleri için bir veya daha fazla başka şablona işaret edebilir.

    Kurulum

    # archlinux yaourt için -S autofs # ubuntu için sudo apt-get install autofs

    Otomatik yüklemenin nasıl yapılacağını belirtmenin birkaç yolu vardır. Bunu kullanıyorum: içinde / ana sayfa / proft / nfs NFS sunucusunun adına sahip bir dizin otomatik olarak oluşturulur ve burada sunucudaki kullanılabilir dizinler otomatik olarak oluşturulur.

    # sudo vim /etc/autofs/auto.master / home / proft / nfs /etc/autofs/auto.nfs --timeout = 60

    Ek parametre zaman aşımı cihazın bağlantısının kaldırılacağı saniye sayısını ayarlar. Parametre hayalet yapılandırılan kaynakların yalnızca kullanılabilir olduklarında değil, her zaman görüntüleneceğini belirtir (bu seçenek Otomatik FS 5)

    içinde tarif ediyoruz /etc/autofs/auto.nfs NFS sunucusu ve kök dizini.

    # sudo vim /etc/autofs/auto.nfs nfsserver 192.168.1.100:/srv/nfs

    Şimdi ilk aramada / ana sayfa / proft / nfs / torrentler NFS paylaşımı otomatik olarak bağlanacaktır.

    autofs hizmetini yeniden başlatalım:

    # archlinux altında sudo systemctl autofs'i yeniden başlat # ubuntu altında sudo /etc/init.d/autofs restart

    NFS kaynağının kullanılabilirliği için beklenecek süreyi de belirtebilirsiniz. Bunu yapmak için değerleri değiştirmeniz gerekir. MOUNT_WAIT.

    # archlinux altında # sudo vim /etc/conf.d/autofs MOUNT_WAIT = 5 # ubuntu altında sudo / etc / default / autofs MOUNT_WAIT = 5

    NFS v3 kullanımını zorlamak

    Bazı durumlarda NFSv4 yavaş olabilir. Bunu düzeltmek için üçüncü sürümün kullanımını zorlayabilirsiniz.

    kullanıcı farklı bilgisayarlarda farklı zamanlarda çalışabilir. Bir dosya sunucusu kullanarak, aynı anda birkaç görev çözülür:
    1. tüm verilerin düzenli olarak yedeklenmesi: Bu işlemi onlarca veya yüzlerce bilgisayar için gerçekleştirmek gerçekçi değildir, ancak oldukça mümkündür - tek bir sunucudan veya birkaç sunucudan.
    2. veri depolamanın güvenilirliğini artırmak: ağdaki her bilgisayarı bir RAID dizisiyle donatmak mantıksızdır, çünkü bir bilgisayardaki yüklü yazılım paketleri gibi dosyaların büyük çoğunluğunu yeniden yüklemek, onları arızadan korumaktan daha kolaydır; ancak dosya sunucusunu bir donanım RAID dizisi ile donatmak veya orada bir yazılım RAID dizisi düzenlemek, en azından basit disk yansıtma yapmak oldukça makul olacaktır.
    3. Azaltılmış depolama maliyetleri: Çok fazla veri depolamanız gerektiğinde her bilgisayara büyük bir disk takmak pahalı ve verimsizdir, ancak sunucuya ölçeklenebilir büyük bir disk alt sistemi kurmak oldukça mümkündür.
    4. herhangi bir bilgisayardan aynı verilere erişim sağlamak.

    NFS'nin açıklaması

    NFS hizmeti, bir sunucunun kendi yerel ağındaki belirli dizinlere paylaşılan erişim sağlamasına izin verir. dosya sistemi ve istemci, bu dizinleri tıpkı istemcinin yerel dizinleriymiş gibi bağlamalıdır.

    NFS sürümleri

    Sun Microsystems tarafından geliştirilen NFS, o kadar başarılı oldu ki, uygulamalar çeşitli şirketler tarafından hemen hemen tüm işletim sistemlerinde uygulandı. Temelde farklı birkaç NFS uygulaması vardır. NFS 3.0, Solaris 2.5'te tanıtılmasına rağmen, NFS 2.0 oldukça yaygındır. Solaris 9 da dahil olmak üzere Solaris'in sonraki sürümleri, NFS'de önemli iyileştirmeler yaptı, ancak protokolün kendisi, diğer sistemlerdeki NFS 3.0 uygulamalarıyla uyumlu kaldı. NFS 3.0'dan başlayarak, paketlerin TCP ve UDP iletimi desteklenir, daha önce yalnızca UDP desteklenirdi.

    dikkat olmak! Ağdaki NFS istemcilerinin ve sunucularının aynı sürümünü kullanın. NFS 2.0, HP-UX 10.0 gibi eski sistemlerde bulunabilir. NFS'nin farklı sürümlerini kullanan sistemler arasında işbirliği istenmez.

    NFS ve Diğer Paylaşılan Dizin Hizmetleri Uyumluluğu

    NFS, işin anlamı ve organizasyonu açısından benzerdir. paylaşılan dizinler(paylaşılan klasörler) bulunur, ancak bu hizmetler tamamen farklı işletim protokolleri kullanır ve birbirleriyle uyumlu değildir. Ancak, Windows sistemlerine NFS desteği yükleyen birkaç yazılım ürünü vardır, bu nedenle farklı işletim sistemlerine sahip bir ağda NFS kullanmak sorun değildir, sadece aynı NFS sürümünü kullanmayı unutmayın.

    NFS hizmeti, sunucudaki paylaşılan dizinlere erişim sağlamak için istemci bilgisayarlarda ve sunucu bilgisayarlarda çalışan farklı programlarla bir istemci-sunucu modelini varsayar.

    Rusya'da çalışanların işyerlerindeki bilgisayarlar genellikle Windows sistemleri tarafından kontrol edildiğinden, Windows sistemleri de dosya sunucusu olarak sıklıkla kullanılmaktadır. Ancak, güvenilirliği artırmak, donanım maliyetlerini azaltmak veya aynı sunucuyu bir dizi başka kurumsal ihtiyaç için kullanmak için genellikle UNIX'i bir dosya sunucusuna kurma isteği vardır: bir web sunucusu, veritabanı sunucusu vb. NFS desteği için ek yazılım yüklememek için bu durumda samba paketini bir UNIX makinesine kurmak yeterlidir. Tüm istemci bilgisayarların onu bir Windows ağındaki en yaygın dosya sunucusu veya yazdırma sunucusu olarak algılaması için bir Windows sunucusu gibi "taklit etmesine" izin verecektir. Samba paketi, Windows'a özgü SMB protokolü için destek sağlar.

    Birkaç UNIX bilgisayarının ağ üzerinde çalıştığı ve aynı dosya sunucusuna erişmeleri gerektiği durumlarda, NFS (ağ dosya sistemi) mekanizmasını kullanmak mantıklıdır.

    NFS, ağ kesintilerine karşı çok dayanıklı değildir, kesintisiz çalışma gerektirir ve istemci ile sunucu arasında hızlı bağlantılar olduğunu varsayar. Dosya sistemlerini yerel ağ dışında, örneğin İnternet üzerinden bağlamak için NFS kullanmak teknik olarak mümkündür, ancak çok mantıklı ve güvensiz değildir.

    NFS terminolojisi

    NFS sunucusunu kurduktan sonra, UNIX bilgisayarı harici kullanıcılara bazı dizinlerine erişim sağlayacaktır. dosya sistemi... Bu erişim sağlanmasına "dışa aktarma" denir: sistemin kataloglarını dışa aktardığı söylenir. Dizinlerin tam olarak nasıl dışa aktarılacağı, sistem yöneticisi tarafından belirlenen bir liste tarafından belirlenir. Çoğu UNIX sisteminde, bu liste / etc / dışa aktarma dosyasındadır, ancak Solaris'te başka bir dosyadadır, / etc / dfs / dfstab.

    NFS, uzaktan prosedür çağrı mekanizması aracılığıyla çalışır ( RPC - Uzaktan Yordam Çağrısı).

    RPC nedir

    RPC ideolojisi, programcı için çok basit ve çekicidir. Bir ağ uygulaması genellikle nasıl çalışır? Belirli bir protokolü takip eder (örneğin, HTTP): bir istek içeren bir paket oluşturur, bir bağlantı kurma sistem işlevini, ardından paketi gönderme işlevini çağırır, ardından bir yanıt paketini bekler ve işlevi kapatmak için işlevi çağırır. bağlantı. Bu, ağla ilgili tüm çalışmaların, uygulamayı yazan programcının endişesi olduğu anlamına gelir: sistemin ağ API'sinin işlevlerini çağırmayı hatırlamalı, ağ arızaları durumunda ne yapacağını düşünmelidir.

    RPC, bir istemci ve bir sunucu arasında veri alışverişi yapmanın farklı bir yolunu varsayar. Bir programcının bakış açısından, bir RPC istemci uygulaması sunucudaki bir işlevi çağırır, yürütür ve sonucu döndürür. Ağ üzerinden bir işlevi yürütmek için bir istek iletmek ve sonuçları sunucudan istemciye döndürmek uygulama tarafından görülmez, bu nedenle ikincisinin ağ arızaları veya taşıma protokolü uygulamasının ayrıntıları hakkında endişelenmesi gerekmez.

    Ağ üzerinden veri aktarımının şeffaflığını sağlamak için iki aşamalı bir prosedür icat edildi. Sunucuda, hizmetini RPC aracılığıyla sağlayan herhangi bir uygulama, bağlantı noktası eşleyici adı verilen bir programa kaydolmalıdır. Bu programın işlevi, istemcinin talep ettiği RPC prosedürünün numarası ile sunucu uygulamasının istekleri beklediği TCP veya UDP bağlantı noktasının numarası arasında bir yazışma kurmaktır. Genel olarak konuşursak, RPC TCP veya UDP'den daha fazlasıyla çalışabilir. Solaris, çalışmayı TI (TransportIn Independent) mekanizması temelinde uygular, bu nedenle Solaris'te bağlantı noktası çevirmeni olarak adlandırılır. rpcbind, Ama değil portmap Linux veya FreeBSD gibi.

    Bir bağlantı noktası tercümanına kaydolan bir uygulama, ona program tarafından işlenebilecek program numarasını, sürüm numarasını ve prosedür numaralarını söyler. Bu prosedürler daha sonra müşteri tarafından numara ile aranacaktır. Ayrıca uygulama, prosedürleri yürütmek için istekleri almak için kullanılacak TCP ve UDP bağlantı noktası numaralarını bildirir.

    Sunucuda bir prosedürün yürütülmesini başlatmak isteyen bir istemci, isteği hangi TCP veya UDP bağlantı noktasına göndereceğini bulmak için önce sunucudaki bağlantı noktası çevirmenine bir istek gönderir. Bağlantı noktası çevirmeni, sistem başlangıcında başlar ve her zaman standart bağlantı noktası 111'de çalışır. Ondan bir yanıt aldıktan sonra, istemci, gerekli uygulamaya karşılık gelen bağlantı noktasına bir istek gönderir. Örneğin, bir NFS sunucusu 2049 numaralı bağlantı noktasında çalışıyor.

    NFS aracılığıyla paylaşılan bir dizin nasıl bağlanır

    NFS sunucusu ve istemcilerinin ayarlarını açıklamaya geçmeden önce, prensipte uzak dosya sistemlerinin nasıl monte edildiğini anlamak gerekir.

    NFS istemcisi, uzak bilgisayara bir bağlama isteği gönderir ve bu isteği sağlar. dosya sistemi(genellikle bir kısmı) genel kullanım içindir. NFS sunucusunun şu veya bu dizini "dışa aktardığı" söylenir (yani - alt dizinlerle). Müşteri isteği

    NFS, bir Unix makinesinde dizinleri paylaşmanıza olanak tanır. NFS'nin ve özellikle NIS'in güvensizliği, RPC ile ilişkilidir - her türlü istismarın sayısı açısından, RPC resmi olmayan lider gibi görünmektedir (Sendmail hariç). Bu protokoller dahili ağlar için tasarlandığından, "kullanıcılarından" korunmaları gerekecektir. Bununla birlikte, bunları kullanmadan önce, gerçekten gerekli olup olmadığına karar vermeniz gerekir.

    Bir ev ağında oldukça faydalı olabilirler, ancak bir şirket ağında güvenlik nedeniyle onlara daha güvenli bir alternatif bulmak daha iyidir.

    NFS dosya sistemi.

    Ağ Dosya Sistemi (NFS), Sun tarafından bir yerel alan ağı içindeki diğer Unix makinelerinde barındırılan dosyalara erişmenin bir yolu olarak geliştirilmiştir. Yıllar boyunca birçok güvenlik açığına neden olan NFS'nin geliştirilmesinde güvenlik hiç dikkate alınmadı.

    NFS, TCP veya UDP üzerinden çalışabilir ve bir RPC sistemi kullanır; bu, yaygın olarak güvenlik açığı bulunan aşağıdaki uygulamaların çalışıyor olması gerektiği anlamına gelir: portmapper, nfs, nlockmgr (lockd), rquotad, statd ve mountd.

    NFS'yi başlatmanıza gerek yok - alternatif bir çözüm bulmanız gerekiyor. NFS'ye ihtiyacınız varsa, bunu kullanma riskini nasıl en aza indireceğiniz aşağıda açıklanmıştır.

    / vb / ihracat

    İlk adım, dosya sistemlerini dışa aktaracak makineleri seçmektir. Ardından, ağdaki NFS sunucularına (veya varsa bir sunucuya) hangi makinelerin bağlanmasına izin verildiğini belirleyebilirsiniz. İnternete doğrudan (doğrudan) bağlı olan makinelerde NFS kullanmanıza gerek yoktur. Makineleri seçtikten sonra bu makineler üzerinde dışa aktarılacak dizinleri seçmeniz gerekiyor.

    Dışa aktarma dizinleri / etc / dışa aktarma dosyasında tanımlanır. Her girişin formatı basittir: dizinin adı, erişime izin verilen kullanıcıların listesi ve erişim modu. Örneğin:

    10.0.0.6 IP adresine sahip makineye / home / kullanıcı dizinine tam erişime (okuma / yazma) izin verilir. En iyisi tam erişim vermek değil, salt okunur (ro) erişimle sınırlı olmaktır. Buna ek olarak, aşağıdaki seçenekleri de belirtebilirsiniz:

    • Güvenli- bağlama isteği ayrıcalıklı bir bağlantı noktasından gelmelidir (1024'e kadar). Bu, mount komutunun kök ayrıcalıklarına sahip bir kullanıcı tarafından girildiği anlamına gelir.
    • Root_squash- kök kullanıcı isteği, anonim bir kullanıcı isteği olarak değerlendirilecektir. Bu, sisteme en az zararı verir. Bu seçenek etkinleştirilmelidir.
    • Tüm_squash- tüm istekler (yalnızca kök kullanıcıdan değil) anonim bir kullanıcıdan geliyor olarak kabul edilecektir. Genel olarak dışa aktarılan dizinler için kullanışlıdır.

    Kök ayrıcalıklarına sahip bir cracker, / etc / dışa aktarmada belirtilen dizine rw erişimi verilen bir makineye erişim kazanırsa, dosya sistemi üzerinde tam kontrol sahibi olur, bu nedenle kök dizin (/) dışa aktarılamaz ve sistem açısından kritiktir. dizinler, örneğin / usr, / bin, / sbin, / lib, / opt ve / vb. Kullanıcı ana dizinleri dışa aktarma için iyi çalışır.

    İstemci tarafında, paylaşılan dosya sistemini -o nosuid seçeneğiyle bağlayın:

    # mount -t nfs -o nosuid 10.0.0.3:/home/user/files / mnt / home / frank

    Bu, NFS sunucusuna erişimi olan cracker'ın istemcilere root erişimi elde etmesini önleyecektir.

    Erişim sınırlaması.

    Hizmetten bağımsız olarak, makineye erişimi kısıtlamak için IPTable'ları kullanmanız gerekir. Bu, özellikle bir NFS sunucusu durumunda önemlidir. IPTable'ları kullanırken, NFS arka plan programının 2049 / TCP / UDP bağlantı noktasını kullandığını unutmayın.

    Portmapper ve NFS gibi bazı RPC servisleri sabit portlar kullanır (sırasıyla 113 ve 2049 / tcp / udp), ancak diğer RPC servislerinin sabit portları yoktur, bu da IPTable'ları kullanarak paketleri filtrelemeyi zorlaştırır. Bilinen tek şey, RPC'nin 32768-65535 aralığındaki bağlantı noktalarını kullandığıdır.

    Çekirdek 2.4.13 veya sonraki bir sürümünü kullanıyorsanız, -p seçeneğini kullanın.<порт>her RPC hizmeti için tam bağlantı noktasını belirtebilirsiniz.

    nsflock'u başlatmak için kullanılan /etc/rc.d/init.d/nfslock adresindeki start () işlevini düşünün:

    Başlat () (

    #. Daemon'ları başlatın.

    if ["$ USERLAND_LOCKD"]; sonra

    echo -n $ "NFS kilitleme başlatılıyor:"

    arka plan programı rpc.lockd

    echo -n $ "NFS statüsü başlatılıyor:"

    arka plan programı rpc.statd

    echo [$ RETVAL -eq 0] && touch / var / touch / lock / subsys / nfslock

    $ GERİ DÖN)

    statd arka plan programını belirli bir bağlantı noktasını kullanmaya zorlamak için -p seçeneğini kullanabilirsiniz, örneğin daemon rpc.statd -p 32800 (veya ne isterseniz). Aynı şekilde mountd, nfsd, rquotad için bağlantı noktasını ayarlamanız gerekir - bunların tümü /etc/rc.d/init.d/nfs betiğinden başlatılır:

    Başlat () (

    # Daemon'ları başlatın.

    action -n $ "NFS hizmetlerini başlatma:" / usr / sbin / exportfs -r

    eğer t _x /usr/sbin/rpc.quotad]; sonra echo -n $ "NFS kotalarını başlatma:" arka plan programı rpc.rquotad echo

    fi echo -n $ "NFS mountd başlatılıyor:"

    arka plan programı rpc.mountd 3RPCMOUNTDOPTS

    echo -n $ "NFS arka plan programı başlatılıyor:" arka plan programı rpc.nfsd $ RPCNFSDOPTS echo touch / var / lock / subsys / nfs

    Lockd (nlockmgr) için bağlantı noktasını değiştirme teknolojisi yukarıdakilerden farklıdır (/etc/rc.d/init.d/nfslock dosyasını değiştirmeye çalışmanıza gerek yoktur - hiçbir şey çıkmaz).

    Lockd, bir çekirdek modülü olarak yürütülür veya çekirdeğe statik olarak derlenir. Bağlantı noktası numarasını değiştirmek için / etc / modüller dosyasını açın ve modüle iletilen seçenekleri bulun:

    seçenekler lockd nlm_udpport = 33000 nlm_tcpport = 33000

    Artık RPC hizmetleri bilinen statik bağlantı noktalarını kullandığına göre, IPTable'ları kullanmamız gerekiyor. Aşağıdaki kurallar kümesi, makinede çalışan tek sunucunun NFS olduğunu ve yalnızca /usr/local/etc/nfsexports.hosts dosyasında listelenen makinelerin erişimine izin verildiğini varsayar:

    IPX = "/ usr / sbin / iptables"

    # Tüm zincirleri temizle

    $ IPT -- floş

    $ IPT -t nat --flush $ IPT -t mangle --flush $ IPT -X

    # Geri döngü trafiğine izin ver $ IPT -A INPUT -i lo -j KABUL $ IPT -A OUTPUT -o lo -j KABUL

    # Varsayılan kurallar $ IPT -P GİRİŞ DROP $ IPT -P ÇIKIŞ DROP $ IPT -P İLERİ DROP

    $ IPT -A GİRDİ -m durum -durum KURULDU, İLGİLİ -j KABUL

    # Her bilgisayara erişime izin ver,

    # /usr/local/etc/nfsexports.hosts içinde belirtildi

    "cat /usr/local/etc/nfsexports.hosts" içindeki ana bilgisayar için; $ IPT yap -I GİRİŞ -s $ host -p tcp -dport 111 -j KABUL

    $ IPT -I GİRDİ -s $ host -p udp -dport 111 -j KABUL

    $ IPT -I GİRDİ -s $ host -p udp -dport 2049 -j KABUL

    $ IPT -I GİRDİ -s $ host -p tcp --dport 32800 -j KABUL

    $ IPT -I GİRDİ -s $ host -p tcp --dport 32900 -j KABUL

    $ IPT -I GİRDİ -s $ host -p tcp -dport 33000 -j KABUL

    $ IPT -I GİRDİ -s $ host -p tcp --dport 33100 -j KABUL

    Tabii ki, bu sadece bir iskelet, daha birçok kural eklemeniz gerekecek: en azından SSH'yi etkinleştirin ve / proc kullanarak bazı çekirdek parametreleri ayarlayın.

    SSH üzerinden NFS tünelleme.

    NFS kısaltması bazen "Dosya Güvenliği Yok" anlamına gelir - bu üç kelime kendileri için konuşur. Bu nedenle, NFS trafiğinin güvenliğini sağlamak çok önemlidir. Bunu ssh ile yapmak kolaydır.

    Başlangıçta, dosya sistemlerinin yerel düğüme aktarılması için NFS sunucusundaki / etc / dışa aktarma dosyasını değiştirebilirsiniz:

    Ardından, NFS ve mountd bağlantı noktalarını iletmek için SSH kullanmanız gerekir. NFS, 2049 / udp bağlantı noktasını kullanır ve mountd, belirtildiği gibi, 33000 bağlantı noktasını kullanır:

    # ssh [e-posta korumalı]-L 200: localhost: 2049 -f uyku 120m

    # ssh [e-posta korumalı]-L 200: localhost: 33000 -f uyku 120m

    Bu iki komut, kullanıcıya etkileşimli bir kabuk sağlar, ancak buna gerek olmadığı için SSH, sleep 120 komutunu yürütür: komut satırına geri dönüyoruz, ancak bağlantı noktası iletme 2 saat daha sürecek.

    İstemci tarafından bir dosya sistemi kurmak çok sıra dışı görünüyor:

    mount -t nfs -o nosuid bağlantı noktası = 200 mountport = 210 nfsserver.test.net:/home/user / mnt / başka

    Ssh tünelleme hileleri çok karmaşıksa, SHFS (Shell Dosya Sistemi) projesi ( http: //shfs.sourceforge.net/ ), bu da tüm prosedürü otomatikleştirmeyi mümkün kılar.

    Kurulumdan sonra, mount -t shfs komutunu kullanarak veya yeni shfsmount komutunu kullanarak SHFS'ye erişmeniz gerekir. Bu komutun sözdizimi öncekine benzer:

    shfsmount [e-posta korumalı]: / ana sayfa / kullanıcı / mnt / kullanıcı

    CFS ve TCFS

    Şifreleme Dosya Sistemi, DES algoritmasını kullanarak NFS trafiğini şeffaf bir şekilde şifreler ve şifresini çözer. Ayrıca, süreci kullanıcı için olabildiğince şeffaf hale getiren otomatik anahtar yönetimini destekler.

    SunOS ve BSD için tasarlanmış olmasına rağmen, CFS ilginç çünkü paylaşılan dosyaları şeffaf bir şekilde kodlamaya yönelik ilk girişim gibi görünüyor. Şeffaf Şifreleme Dosya Sistemi (TCFS), NFS trafiğini şifrelemek için daha da şeffaf bir yol sağlar.

    Veri kodlamaya ek olarak, bu dosya sistemi veri bütünlüğü kontrolünü destekler.

    İyi seyirler, okuyucular ve misafirler. Gönderiler arasında çok uzun bir ara oldu, ama savaşa geri döndüm). Bugünün makalesinde ele alacağım NFS protokolü işlemi, ve Linux'ta bir NFS sunucusu ve NFS istemcisi kurma.

    NFS'ye Giriş

    NFS (Ağ dosya sistemi - ağ dosya sistemi) bence - hızlı (SAMBA'ya kıyasla daha hızlı ve şifrelemeli uzak dosya sistemlerine kıyasla daha az kaynak yoğun - sshfs, SFTP, vb ...) veri alışverişinin gerekli olduğu ve veri alışverişinin gerekli olmadığı yerel bir ağda ideal bir çözüm iletilen bilgilerin ön planda güvenliği. NFS protokolü izin verir uzak dosya sistemlerini bir ağ üzerinden yerel bir dizin ağacına bağlayın sanki takılı bir disk dosya sistemiymiş gibi. Böylece yerel uygulamalar, yerel bir dosya sistemiyle olduğu gibi uzak bir dosya sistemiyle de çalışabilir. Ama dikkatli olmalısın(!) NFS'yi kurmak, çünkü belirli bir konfigürasyonla, sonsuz G / Ç bekleyerek müşterinin işletim sistemini askıya almak mümkündür. NFS protokolü işe dayalı RPC protokolü, ki bu henüz benim anlayışıma uygun değil)) bu nedenle makaledeki materyal biraz belirsiz olacak ... NFS'yi kullanmadan önce, ister sunucu ister istemci olsun, çekirdeğinizin aşağıdakileri desteklediğinden emin olmalısınız. NFS dosya sistemi. Dosyada karşılık gelen satırların varlığına bakarak çekirdeğin NFS dosya sistemini destekleyip desteklemediğini kontrol edebilirsiniz. / proc / dosya sistemleri:

    ARCHIV ~ # grep nfs / proc / dosya sistemleri nodev nfs nodev nfs4 nodev nfsd

    Dosyada belirtilen satırlar ise / proc / dosya sistemleri başarısız olursa, aşağıda açıklanan paketleri yüklemeniz gerekir. Bu, büyük olasılıkla, istenen dosya sistemlerini desteklemek için bağımlı çekirdek modüllerini kuracaktır. Paketleri kurduktan sonra, belirtilen dosyada NFS desteği görüntülenmezse, bu işlev etkinleştirildiğinde gerekli olacaktır.

    Tarih Ağ dosya sistemi

    NFS protokolü Sun Microsystems tarafından geliştirilmiştir ve tarihinde 4 versiyonu bulunmaktadır. NFSv1 1989'da geliştirildi ve deneyseldi, UDP protokolü üzerinde çalışıyordu. Sürüm 1'de açıklanmıştır. NFSv2 aynı RFC1094 tarafından açıklanan aynı 1989'da piyasaya sürüldü ve ayrıca bir dosyadan 2 GB'den fazla okumaya izin verirken UDP protokolüne dayanıyordu. NFSv3 1995 yılında revize edilmiş ve içinde açıklanmıştır. Üçüncü versiyonun ana yenilikleri, büyük dosyalar için destek, TCP protokolü için ek destek ve teknolojinin çalışmasını önemli ölçüde hızlandıran büyük TCP paketleri idi. NFSv4 2000 yılında son halini almış ve RFC 3010'da açıklanmış, 2003 yılında revize edilmiş ve içinde açıklanmıştır. Dördüncü sürüm, performans iyileştirmeleri, çeşitli kimlik doğrulama araçları için destek (özellikle, RPCSEC GSS protokolünü kullanan Kerberos ve LIPKEY) ve erişim kontrol listelerini (hem POSIX hem de Windows türleri) içeriyordu. NFS v4.1 2010 yılında IESG tarafından onaylandı ve numarayı aldı. Sürüm 4.1'in önemli bir yeniliği, bir NFS istemcisinin birçok dağıtılmış NFS sunucusunun verilerine paralel erişimi için bir mekanizma olan pNFS - Paralel NFS belirtimidir. Ağ dosya sistemi standardında böyle bir mekanizmanın varlığı, dağıtılmış "bulut" depoları ve bilgi sistemleri oluşturmaya yardımcı olacaktır.

    NFS sunucusu

    sahip olduğumuzdan beri NFS- bu dosya sistemi gereklidir. (Makaleyi de okuyabilirsiniz). Dahası gereklidir. Debian'da bu paket nfs-çekirdek-sunucusu ve nfs-ortak, RedHat'ta paket bu nfs-utils... Ayrıca, gerekli işletim sistemi çalışma seviyelerinde arka plan programının başlatılmasını etkinleştirmek gerekir (RedHat'taki komut / sbin / chkconfig nfs açık, Debian'da - /usr/sbin/update-rc.d nfs-kernel-server varsayılanları).

    Debian'da kurulu paketler aşağıdaki sırayla çalıştırılır:

    ARŞİV ~ # ls -la /etc/rc2.d/ | grep nfs lrwxrwxrwx 1 kök kök 20 Ekim 18 15:02 S15nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 kök kök 27 Ekim 22 01:23 S16nfs-kernel-server -> ../init.d / nfs-çekirdek-sunucusu

    yani önce başlar nfs-ortak sonra sunucunun kendisi nfs-çekirdek-sunucusu... RedHat'ta durum benzerdir, tek istisna ilk betiğin çağrılmasıdır. nfslock ve sunucu basitçe çağrılır nfs... Hakkında nfs-ortak debian sitesi tam anlamıyla bize şunları söylüyor: NFS istemcisi ve sunucusu için ortak dosyalar varsa, bu paket bir NFS istemcisi veya sunucusu olarak işlev görecek bir makineye kurulmalıdır. Paket programları içerir: lockd, statd, showmount, nfsstat, gssd ve idmapd... Başlangıç ​​komut dosyasının içeriğini görüntüleyerek /etc/init.d/nfs-ortak aşağıdaki çalışma sırasını takip edebilirsiniz: komut dosyası, yürütülebilir bir ikili dosyanın varlığını kontrol eder /sbin/rpc.statd, dosyalarda olup olmadığını kontrol eder / etc / varsayılan / nfs-ortak, / vb / fstab ve / vb / ihracat başlangıç ​​cinleri gerektiren parametreler idmapd ve gssd , arka plan programını başlatır /sbin/rpc.statd , daha sonra başlamadan önce /usr/sbin/rpc.idmapd ve /usr/sbin/rpc.gssd bu yürütülebilir ikili dosyaların varlığını kontrol eder, ardından arka plan programı /usr/sbin/rpc.idmapd için kontrol eder sunrpc, nfs ve nfsd, dosya sistemi desteğinin yanı sıra rpc_pipefsçekirdekte (yani, dosyadaki varlığı / proc / dosya sistemleri), her şey başarılı olursa çalışır /usr/sbin/rpc.idmapd ... Ayrıca şeytan için /usr/sbin/rpc.gssd çekler çekirdek modülü rpcsec_gss_krb5 ve arka plan programını başlatır.

    İçeriği görüntülerseniz NFS sunucusu başlangıç ​​komut dosyası Debian'da ( /etc/init.d/nfs-kernel-server), ardından aşağıdaki sırayı takip edebilirsiniz: başlangıçta, komut dosyası dosyanın varlığını kontrol eder / vb / ihracat, Müsaitlik nfsd, desteğin kullanılabilirliği NFS dosya sistemi içinde (yani, dosyada / proc / dosya sistemleri), her şey yerindeyse, arka plan programı başlatılır /usr/sbin/rpc.nfsd , ardından parametrenin ayarlanıp ayarlanmadığını kontrol eder NEED_SVCGSSD(sunucu ayarları dosyasında ayarlayın / etc / varsayılan / nfs-kernel-server) ve verilirse arka plan programını başlatır /usr/sbin/rpc.svcgssd , arka plan programını başlatan son kişi /usr/sbin/rpc.mountd ... Bu komut dosyasından bunu görebilirsiniz NFS sunucu işlemi şunlardan oluşur: arka plan programları rpc.nfsd, rpc.mountd ve Kerberos kimlik doğrulaması kullanılıyorsa arka plan programı rcp.svcgssd. Daemon rpc.rquotad ve nfslogd hala kırmızı şapkada çalışıyor (Nedense, Debian'da bu arka plan programı hakkında bilgi bulamadım ve görünüşe göre silinmiş olan yokluğunun nedenleri ...).

    Bundan anlaşılıyor ki Ağ Dosya Sistemi sunucusu aşağıdaki işlemlerden oluşur (okuma - arka plan programları)/ sbin ve / usr / sbin dizinlerinde bulunur:

    NFSv4'te Kerberos kullanılırken, artalan süreci ek olarak başlatılır:

    • rpc.gssd- NFSv4 arka plan programı, GSS-API (Kerberos Kimlik Doğrulaması) aracılığıyla kimlik doğrulama yöntemleri sağlar. İstemci ve sunucu üzerinde çalışır.
    • rpc.svcgssd- Sunucu tarafı istemci kimlik doğrulaması sağlayan NFSv4 sunucu arka plan programı.

    portmap ve RPC protokolü (Sun RPC)

    Yukarıdaki paketlere ek olarak, NFSv2 ve v3'ün düzgün çalışması için ek bir paket gereklidir. portmap(daha yeni dağıtımlarda, rpcbind). Bu paket genellikle bağımlı olarak NFS ile otomatik olarak kurulur ve RPC sunucusunun çalışmasını uygular, yani RPC sunucusunda kayıtlı bazı hizmetler için bağlantı noktalarının dinamik olarak atanmasından sorumludur. Kelimenin tam anlamıyla, belgelere göre, bu, Uzaktan Yordam Çağrısı (RPC) program numaralarını TCP/UDP port numaralarına dönüştüren bir sunucudur. portmap birkaç varlık üzerinde çalışır: RPC çağrıları veya istekleri, TCP / UDP bağlantı noktaları,protokol versiyonu(tcp veya udp), program numaraları ve yazılım sürümleri. Portmap arka plan programı, NFS hizmetlerini başlatmadan önce /etc/init.d/portmap betiği tarafından başlatılır.

    Kısacası, bir RPC (Uzaktan Yordam Çağrısı) sunucusunun işi, yerel ve uzak süreçlerden gelen RPC çağrılarını (diğer adıyla RPC prosedürleri) ele almaktır. RPC çağrılarını kullanarak, hizmetler kendilerini bağlantı noktası eşleyicisine kaydeder veya buradan kaldırır (aka bağlantı noktası eşleyici, diğer adıyla portmap, diğer adıyla portmapper, diğer adıyla rpcbind, yeni sürümlerde) ve istekleri portmapper'a yönlendiren RPC çağrılarını kullanan istemciler, ihtiyaç duydukları bilgileri alırlar. Kullanıcı dostu program hizmet adları ve bunlara karşılık gelen numaralar / etc / rpc'de tanımlanmıştır. Bir hizmet ilgili bir istek gönderir göndermez ve kendisini bağlantı noktası eşleyicisinde RPC sunucusuna kaydettirir göndermez, RPC sunucusu hizmetin başlatıldığı hizmete TCP ve UDP bağlantı noktalarını atar ve çekirdekte ilgili bilgileri depolar. çalışan hizmet (isim), benzersiz bir numara hizmeti (/ etc / rpc uyarınca), hizmetin çalıştığı protokol ve bağlantı noktası ve hizmetin sürümü hakkında ve istek üzerine istemcilere belirtilen bilgileri sağlar. Bağlantı noktası dönüştürücünün kendisi bir program numarasına (100000), sürüm numarasına - 2, TCP bağlantı noktası 111 ve UDP bağlantı noktası 111'e sahiptir. Yukarıda, NFS sunucu arka plan programlarının bileşimini belirtirken ana RPC program numaralarını belirttim. Bu paragrafla muhtemelen kafanızı biraz karıştırdım, bu yüzden açıklığa kavuşturması gereken ana ifadeyi söyleyeceğim: bağlantı noktası eşleyicisinin ana işlevi, kendisine (istemci) istenen programın çalıştığı bağlantı noktasını geri göndermektir. Buna göre bir istemcinin belirli bir program numarası ile RPC'ye erişmesi gerekiyorsa, öncelikle sunucu makine üzerindeki portmap işlemi ile iletişime geçmeli ve gerekli RPC hizmeti ile iletişimin port numarasını belirlemelidir.

    Bir RPC sunucusunun çalışması aşağıdaki adımlarla temsil edilebilir:

    1. Bağlantı noktası dönüştürücü, genellikle sistem önyüklemesinde önce başlatılmalıdır. Bu, bir TCP uç noktası oluşturur ve 111 numaralı TCP bağlantı noktasını açar. Ayrıca, bir UDP datagramının UDP bağlantı noktası 111'e ulaşmasını bekleyen bir UDP uç noktası oluşturur.
    2. Başlangıçta, bir RPC sunucusu aracılığıyla çalışan bir program, programın desteklenen her sürümü için bir TCP uç noktası ve bir UDP uç noktası oluşturur. (Bir RPC sunucusu birden çok sürümü destekleyebilir. İstemci, bir RPC çağrısı yaparken gerekli sürümü belirtir.) Hizmetin her sürümüne dinamik olarak atanan bir bağlantı noktası numarası atanır. Sunucu, uygun RPC çağrısını yaparak her programı, sürümü, protokolü ve bağlantı noktası numarasını kaydeder.
    3. RPC istemci programının ihtiyaç duyduğu bilgiyi alması gerektiğinde, belirli bir program, sürüm ve protokol için dinamik olarak atanmış bir bağlantı noktası numarası almak için bir bağlantı noktası eşleyici rutinini çağırır.
    4. Bu talebe yanıt olarak kuzey, port numarasını döndürür.
    5. İstemci, 4. adımda elde edilen bağlantı noktası numarasına bir RPC istek mesajı gönderir. UDP kullanılıyorsa, istemci, istenen hizmetin üzerinde çalıştığı UDP bağlantı noktası numarasına RPC çağrı mesajını içeren bir UDP datagramı gönderir. Yanıt olarak hizmet, bir RPC yanıt mesajı içeren bir UDP datagramı gönderir. TCP kullanılıyorsa, istemci, istenen hizmetin TCP port numarasına aktif bir açma yapar ve ardından kurulan bağlantı üzerinden bir RPC çağrı mesajı gönderir. Sunucu, bağlantı üzerinden bir RPC yanıt mesajıyla yanıt verir.

    RPC sunucusundan bilgi almak için yardımcı programı kullanın rpcinfo... Parametreleri belirtirken -p ana bilgisayar program, ana bilgisayarda kayıtlı tüm RPC programlarını listeler. Bir ana bilgisayar belirtmeden, program hizmetleri localhost'ta görüntüler. Örnek:

    ARŞİV ~ # rpcinfo -p prog-ma sürümü proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 59451 durum 100024 1 tcp 60872 durum 100021 1 udp 44310 nlockmgr 100021 3 udp 44310 nlockmgr 100021 4 nlock 44851110 nlockmgr 100021 4 nlock 44851310 udp 59451 3 tcp 44851 nlockmgr 100021 4 tcp 44851 nlockmgr 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 3 udp 2049 nfs 100003tc 1014000 mount 1 udp 4n4n 51306 mountd 100005 2 tcp 41405 mountd 100005 3 udp 51306 mountd 100005 3 tcp 41405 mountd

    Gördüğünüz gibi, rpcinfo kayıtlı program numarasını, sürümünü, protokolü, bağlantı noktasını ve adını (soldan sağa sütunlarda) görüntüler. Bir programın kaydını silmek veya tek bir RPC hizmeti hakkında bilgi almak için rpcinfo'yu kullanabilirsiniz (daha fazla seçenek için man rpcinfo'ya bakın). Gördüğünüz gibi, portmapper sürüm 2 arka plan programı udp ve tcp bağlantı noktalarına, rpc.statd sürüm 1 udp ve tcp bağlantı noktalarına, NFS kilit yöneticisi sürüm 1,3,4, nfs sunucusu arka plan programı 2,3, 4'ün yanı sıra mount daemon sürümleri 1,2,3.

    NFS sunucusu (daha doğrusu, rpc.nfsd arka plan programı), istemciden 2049 numaralı bağlantı noktasında UDP datagramları biçiminde istekleri alır. NFS, sunucunun dinamik olarak atanmış bağlantı noktalarını kullanmasına izin veren bir bağlantı noktası eşleyicisi ile çalışsa da, UDP bağlantı noktası 2049, çoğu uygulamada NFS'ye kodlanmış ...

    Ağ Dosya Sistemi Protokol İşlemi

    Uzak NFS'yi bağlayın

    Uzak bir NFS dosya sistemini kurma işlemi aşağıdaki şema ile gösterilebilir:

    Bir uzak dizini kurarken NFS protokolünün açıklaması:

    1. Sunucuda ve istemcide (genellikle önyüklemede) bir RPC sunucusu başlatılır, portmapper işlemi tarafından hizmet verilir ve tcp/111 ve udp/111 bağlantı noktalarına kaydedilir.
    2. RPC sunucusunda kayıtlı ve isteğe bağlı ağ bağlantı noktalarında kayıtlı olan hizmetler (rpc.nfsd, rpc.statd, vb.) başlatılır (hizmet ayarlarında statik bağlantı noktası belirtilmemişse).
    3. istemci bilgisayardaki mount komutu, dosya sistemi türü, ana bilgisayar ve dizinin kendisini belirten bir ağ dizini bağlamak için çekirdeğe bir istek gönderir, çekirdek, udp'deki NFS sunucusundaki portmap işlemine bir RPC isteği gönderir / 111 port (istemcide tcp ile çalışma seçeneği ayarlanmamışsa)
    4. NFS sunucu çekirdeği, rpc.mountd arka plan programının varlığı için RPC'yi yoklar ve arka plan programının üzerinde çalıştığı ağ bağlantı noktasını istemci çekirdeğine döndürür.
    5. mount, rpc.mountd'nin çalıştığı bağlantı noktasına bir RPC isteği gönderir. Artık NFS sunucusu, istemcinin belirtilen dosya sistemini bağlayıp bağlayamayacağını görmek için istemciyi IP adresine ve bağlantı noktası numarasına göre doğrulayabilir.
    6. Mount daemon, istenen dosya sisteminin bir açıklamasını döndürür.
    7. İstemci bağlama komutu, 5. adımda elde edilen dosya tanıtıcısını istemci ana bilgisayarındaki yerel bağlama noktasına bağlamak için bağlama sistemi çağrısını yayınlar. Dosya tanımlayıcı, NFS istemci kodunda depolanır ve bu noktadan itibaren, kullanıcı işlemlerinin sunucunun dosya sistemindeki dosyalara herhangi bir erişimi, dosya tanımlayıcısını başlangıç ​​noktası olarak kullanacaktır.

    İstemci ve NFS sunucusu arasındaki iletişim

    Uzak bir dosya sistemine tipik erişim aşağıdaki gibi tanımlanabilir:

    NFS sunucusunda bulunan bir dosyaya erişim sürecinin açıklaması:

    1. İstemci (kullanıcı işlemi), yerel bir dosyaya mı yoksa bir NFS dosyasına mı eriştiği ile ilgilenmez. Çekirdek, çekirdek modülleri veya yerleşik sistem çağrıları aracılığıyla donanımla etkileşimle ilgilenir.
    2. çekirdek modülü çekirdek / fs / nfs / nfs.ko, NFS istemcisi görevi görür ve TCP/IP modülü aracılığıyla NFS sunucusuna RPC istekleri gönderir. NFS genellikle UDP kullanır, ancak daha yeni uygulamalar TCP kullanabilir.
    3. NFS sunucusu, istemciden istekleri 2049 numaralı bağlantı noktasında UDP datagramları olarak alır. NFS, sunucunun dinamik olarak atanmış bağlantı noktalarını kullanmasına izin veren bir bağlantı noktası eşleyicisi ile çalışabilse de, UDP bağlantı noktası 2049, çoğu uygulamada NFS'ye sabit kodlanmıştır.
    4. NFS sunucusu bir istemciden bir istek aldığında, bu istek, sunucudaki yerel diske erişim sağlayan yerel dosya erişim rutinine iletilir.
    5. Disk erişiminin sonucu istemciye döndürülür.

    Bir NFS sunucusu kurma

    Sunucu Ayarı genellikle uzak sistemler tarafından bir dosyaya bağlanmasına izin verilen yerel dizinleri belirtmekten oluşur. / vb / ihracat... Bu eylem denir dizin hiyerarşisini dışa aktar... Dışa aktarılan dizinlerle ilgili ana bilgi kaynakları aşağıdaki dosyalardır:

    • / vb / ihracat- dışa aktarılan dizinlerin yapılandırmasını saklayan ana yapılandırma dosyası. NFS ve exportfs yardımcı programını başlatırken kullanılır.
    • / var / lib / nfs / xtab- uzak istemciler tarafından monte edilen dizinlerin bir listesini içerir. Bir istemci bir hiyerarşi eklemeye çalıştığında (bir bağlama kaydı oluşturulur) rpc.mountd arka plan programı tarafından kullanılır.
    • / var / lib / nfs / etab- dışa aktarılan dizinlerin tüm parametrelerini gösteren, uzak sistemler tarafından bağlanabilen dizinlerin listesi.
    • / var / lib / nfs / rmtab- şu anda dışa aktarılmayan dizinlerin listesi.
    • / proc / fs / nfsd- NFS sunucusunu yönetmek için özel bir dosya sistemi (çekirdek 2.6).
      • ihracat- Aktif dışa aktarılan hiyerarşilerin ve bunların dışa aktarıldığı istemcilerin yanı sıra parametreler listesi. Çekirdek bu bilgiyi / var / lib / nfs / xtab'dan alır.
      • İş Parçacığı- iş parçacığı sayısını içerir (ayrıca değiştirilebilir)
      • filehandle kullanarak bir dosya işaretçisi alabilirsiniz
      • ve benzeri...
    • / proc / net / rpc- çeşitli önbelleklerin yanı sıra nfsstat kullanılarak elde edilebilecek ham istatistikleri içerir.
    • / var / çalıştır / portmap_mapping- RPC hizmetlerinde kayıtlı hakkında bilgi

    Not: genel olarak, internette xtab, etab, rmtab dosyalarının amacına dair birçok yorum ve formülasyon var, kime inanacağımı bilmiyorum. açık değildir.

    / etc / dışa aktarma dosyasını yapılandırma

    En basit durumda, / etc / dışa aktarma dosyası, NFS sunucusunu yapılandırmak için düzenlenmesi gereken tek dosyadır. Bu dosya aşağıdaki hususları kontrol eder:

    • Hangi müşteriler sunucudaki dosyalara erişebilir
    • hangi hiyerarşiler sunucudaki dizinlere her istemci tarafından erişilebilir
    • Özel müşteri adları nasıl olacak? görüntülenmek yerel kullanıcı adlarına

    Dışa aktarma dosyasındaki her satır aşağıdaki biçime sahiptir:

    export_point client1 (seçenekler) [client2 (seçenekler) ...]

    Nereye export_point dışa aktarılan dizin hiyerarşisinin mutlak yolu, müşteri1 - n bağlamasına izin verilen, boşluklarla ayrılmış bir veya daha fazla istemcinin veya IP adresinin adı export_point . Seçenekler için montaj kurallarını tanımlayın müşteri daha önce belirtilen seçenekler .

    İşte tipik örnek dosya yapılandırmasını dışa aktarır:

    ARCHIV ~ # cat / etc / dışa aktarma / arşiv1 dosyaları (rw, sync) 10.0.0.1 (ro, sync) 10.0.230.1/24(ro,sync)

    Bu örnekte, dosyalar ve 10.0.0.1 bilgisayarların dışa aktarma noktası / arşiv1'e erişmesine izin verilirken, dosyalar ana bilgisayarı okunur / yazılır ve 10.0.0.1 ana bilgisayarı ve 10.0.230.1/24 alt ağı salt okunurdur.

    / etc / dışa aktarma içindeki ana bilgisayar açıklamalarına aşağıdaki biçimde izin verilir:

    • Tek tek düğümlerin adları dosyalar veya dosyalar olarak tanımlanır.DOMAIN.local.
    • Etki alanı maskeleri aşağıdaki biçimde açıklanmıştır: * DOMAIN.local, DOMAIN.local etki alanındaki tüm düğümleri içerir.
    • Alt ağlar, IP adresi / maske çiftleri olarak belirtilir. Örneğin: 10.0.0.0/255.255.255.0, adresleri 10.0.0 ile başlayan tüm düğümleri içerir.
    • Kaynağa erişen @myclients ağ grubunun adını ayarlama (bir NIS sunucusu kullanırken)

    Dizin hiyerarşileri için genel dışa aktarma seçenekleri

    Dışa aktarma dosyası aşağıdaki genel seçenekleri kullanır(ilk olarak seçenekler çoğu sistemde varsayılan olarak parantez içinde kullanılır - varsayılan olarak değil):

    • auth_nlm (no_auth_nlm) veya güvenli_kilitler (güvensiz_kilitler)- sunucunun kilit isteklerinin kimlik doğrulamasını gerektirmesi gerektiğini belirtir (NFS Kilit Yöneticisi protokolünü kullanarak).
    • nohide (gizlemek)- sunucu, biri diğerinde yuvalanmış (bağlı) olmak üzere iki dizin hiyerarşisini dışa aktarırsa. İstemcinin ikinci (alt) hiyerarşiyi açıkça bağlaması gerekir, aksi takdirde alt hiyerarşinin bağlama noktası boş bir dizin olarak görünür. nohide seçeneği, açık bir bağlama olmadan ikinci bir dizin hiyerarşisi ile sonuçlanır. ( Not: Bu seçeneğin çalışmasını sağlayamadım ...)
    • ro (rw)- Yalnızca okuma (yazma) isteklerine izin verir. (Sonuçta, dosya sistemi izinlerine göre okuma/yazma yapılıp yapılamayacağı belirlenirken, sunucu dosya okuma isteğini yürütme isteğinden ayırt edemez, bu nedenle kullanıcı okudu veya çalıştırdıysa okumaya izin verir. izinler.)
    • güvenli (güvensiz)- NFS isteklerinin güvenli bağlantı noktalarından gelmesini gerektirir (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
    • subtree_check (no_subtree_check)- Dosya sisteminin bir alt dizini dışa aktarılırsa ancak dosya sisteminin tamamı verilmezse, sunucu istenen dosyanın dışa aktarılan alt dizinde olup olmadığını kontrol eder. Doğrulamayı devre dışı bırakmak güvenliği azaltır ancak veri aktarım hızını artırır.
    • senkronizasyon (zaman uyumsuz)- sunucunun isteklere ancak bu istekler tarafından yapılan değişiklikler diske yazıldıktan sonra yanıt vermesi gerektiğini belirtir. Zaman uyumsuz seçeneği, sunucuya bilgilerin diske yazılmasını beklememesini söyler, bu da performansı artırır ancak güvenilirliği azaltır çünkü bağlantı kesilmesi veya ekipman arızası durumunda bilgi kaybı mümkündür.
    • wdelay (no_wdelay)- sunucuya, sonraki bir yazma isteği beklemedeyse, verileri daha büyük bloklara yazarak, yazma isteklerinin yürütülmesini geciktirmesi talimatını verir. Bu, büyük yazma kuyrukları gönderirken performansı artırır. no_wdelay, yazma için komutun yürütülmesini ertelememeyi belirtir; bu, sunucu birbiriyle ilişkili olmayan çok sayıda komut alırsa yararlı olabilir.

    Sembolik bağlantıların ve cihaz dosyalarının dışa aktarılması. Sembolik bağlantılar içeren bir dizin hiyerarşisini dışa aktarırken, bağlantı nesnesine istemci (uzak) sistem tarafından erişilebilir olmalıdır, yani aşağıdaki kurallardan biri karşılanmalıdır:

    Cihaz dosyası arayüze atıfta bulunur. Bir aygıt dosyasını dışa aktardığınızda, bu arabirim dışa aktarılır. İstemci sistemde aynı türde bir cihaz yoksa, dışa aktarılan cihaz çalışmayacaktır. İstemci sistemde, NFS nesnelerini monte ederken, bağlı dizinlerdeki cihaz dosyalarının kullanılmaması için nodev seçeneğini kullanabilirsiniz.

    Varsayılan seçenekler sistemden sisteme değişebilir, / var / lib / nfs / etab dosyasında bulunabilirler. Dışa aktarılan dizini / etc / dışa aktardıktan ve NFS sunucusunu yeniden başlattıktan sonra, tüm eksik seçenekler (okuma: varsayılan seçenekler) / var / lib / nfs / etab dosyasına yansıtılacaktır.

    Kullanıcı kimliği görüntüleme (eşleşme) seçenekleri

    Aşağıdakileri daha iyi anlamak için makaleyi okumanızı tavsiye ederim. Her Linux kullanıcısının, dosyalarda açıklanan kendi UID'si ve ana GID'si vardır. / vb / şifre ve / vb / grup... NFS sunucusu, uzak ana bilgisayarın işletim sisteminin kullanıcıların kimliğini doğruladığını ve onlara doğru UID'leri ve GID'leri atadığını varsayar. Dosyaları dışa aktarmak, istemcinin sistemindeki kullanıcılara, doğrudan sunucuya giriş yapıyormuş gibi bu dosyalara aynı erişimi sağlar. Buna göre, bir NFS istemcisi bir sunucuya bir istek gönderdiğinde, sunucu yerel sistemdeki kullanıcıyı tanımlamak için UID ve GID'yi kullanır ve bu da bazı sorunlara yol açabilir:

    • kullanıcı her iki sistemde de aynı tanımlayıcılara sahip olmayabilir ve buna bağlı olarak başka bir kullanıcının dosyalarına erişebilir.
    • dan beri Kök kullanıcının tanımlayıcısı her zaman 0 ise, bu kullanıcı belirtilen seçeneklere bağlı olarak yerel bir kullanıcıyla eşlenir.

    Aşağıdaki seçenekler, uzak kullanıcıları yerel kullanıcılarla eşleştirmek için kuralları belirler:

    • root_squash (no_root_squash)- Verilen seçenekle kök_squash, kök kullanıcıdan gelen istekler, anonim kullanıcı kimliği / gid ile veya anonuid / anongid parametresinde belirtilen kullanıcıyla eşlenir.
    • no_all_squash (all_squash)- Bağlanan kullanıcının UID/GID'sini değiştirmez. Seçenek all_squash TÜM kullanıcıları (yalnızca root değil) anonim olarak görüntülenecek veya anonuid / anongid parametresinde belirtilecek şekilde ayarlar.
    • anonid = kullanıcı kimliği ve anongid = GID - Anonim kullanıcı için UID / GID'yi açıkça ayarlar.
    • map_static = / etc / file_maps_users - Uzak UID / GID - yerel UID / GID eşlemesini ayarlayabileceğiniz bir dosyayı belirtir.

    Kullanıcı eşleme dosyası kullanımına bir örnek:

    ARCHIV ~ # cat / etc / file_maps_users # Kullanıcıları eşleme # uzak yerel yorum uid 0-50 1002 # kullanıcıları uzak UID'ye eşleme 0-50'den yerel UID'ye 1002 gid 0-50 1002 # kullanıcıları uzak GID'ye / yayılma alanına eşleme 0-50 k yerel GID 1002

    NFS Sunucu Yönetimi

    NFS sunucusu, aşağıdaki yardımcı programlar kullanılarak yönetilir:

    • nfsstat
    • showmsecure (güvensiz) sayı

    nfsstat: NFS ve RPC istatistikleri

    nfsstat yardımcı programı, RPC ve NFS sunucularının istatistiklerini görüntülemenizi sağlar. Komut seçenekleri man nfsstat'ta görüntülenebilir.

    showmount: NFS durum bilgilerini görüntüle

    Showmount yardımcı programı bağlı dosya sistemleri için uzak ana bilgisayardaki rpc.mountd arka plan programını sorgular. Varsayılan olarak, sıralanmış bir istemci listesi döndürülür. Anahtarlar:

    • --herşey- istemcinin dizini nereye bağladığını gösteren bir istemci ve bağlama noktaları listesi görüntülenir. Bu bilgi güvenilir olmayabilir.
    • --dizinler- bağlama noktalarının bir listesi verilir
    • --ihracat- nfsd açısından dışa aktarılan dosya sistemlerinin bir listesini verir

    showmount'u bağımsız değişkenler olmadan çalıştırırsanız, konsol, bağlanmasına izin verilen sistemler hakkında bilgi görüntüler. yerel dizinler. Örneğin, ARCHIV ana bilgisayarı, belirtilen dizinleri bağlamasına izin verilen ana bilgisayarların IP adresleri ile dışa aktarılan dizinlerin bir listesini sağlar:

    DOSYALAR ~ # showmount --exports arşiv arşivi için dışa aktarma listesi: / arşiv-büyük 10.0.0.2 / arşiv-küçük 10.0.0.2

    Argümanda ana bilgisayar adını / IP'yi belirtirseniz, bu ana bilgisayarla ilgili bilgiler görüntülenecektir:

    ARCHIV ~ # showmount files clnt_create: RPC: Program kayıtlı değil # bu mesaj bize NFSd arka plan programının FILES ana bilgisayarında çalışmadığını söylüyor

    exportfs: dışa aktarılan dizinleri yönetin

    Bu komut, dosyada belirtilen dışa aktarılan dizinlere hizmet eder. / vb / ihracat, yazmamak daha doğru olur hizmet etmez ama dosya ile senkronize olur / var / lib / nfs / xtab ve var olmayanları xtab'dan kaldırır. exportfs, nfsd arka plan programı -r argümanıyla başlatıldığında yürütülür. 2.6 çekirdek modundaki exportfs yardımcı programı, / var / lib / nfs / dizinindeki dosyalar aracılığıyla rpc.mountd arka plan programı ile iletişim kurar ve doğrudan çekirdekle iletişim kurmaz. Parametreler olmadan, şu anda dışa aktarılan dosya sistemlerini listeler.

    Exportfs seçenekleri:

    • [istemci: dizin adı] - belirtilen istemci için belirtilen dosya sistemini ekleyin veya kaldırın)
    • -v - daha fazla bilgi göster
    • -r - tüm dizinleri yeniden dışa aktar (sync / etc / dışa aktarma ve / var / lib / nfs / xtab)
    • -u - dışa aktarılanlar listesinden kaldır
    • -a - tüm dosya sistemlerini ekleyin veya kaldırın
    • -o - virgülle ayrılmış seçenekler (/ etc / dışa aktarmalarda kullanılan seçeneklere benzer; böylece önceden monte edilmiş dosya sistemleri için seçenekleri değiştirebilirsiniz)
    • -i - eklerken / etc / dışa aktarma kullanmayın, yalnızca geçerli komut satırının parametreleri
    • -f - 2.6 çekirdeğinde dışa aktarılan sistemlerin listesini sıfırlayın;

    NFS istemcisi

    Uzak dosya sistemindeki bir dosyaya erişmeden önce, istemci (istemci işletim sistemi) monte et ve sunucudan al işaretçi. NFS'yi Montajüretken otomatik birleştiricilerden (amd, autofs, automount, supermount, superpupermount) birinin yardımıyla veya yardımıyla yapılabilir. Montaj işlemi, yukarıdaki resimde iyi bir şekilde gösterilmiştir.

    Açık NFS istemcileri hiçbir cinlerin başlatılmasına gerek yok, istemci işlevleriçekirdek modülünü çalıştırır çekirdek / fs / nfs / nfs.ko bu, uzak bir dosya sistemi kurarken kullanılır. Sunucudan dışa aktarılan dizinler, istemciye aşağıdaki şekillerde monte edilebilir:

    • mount komutunu kullanarak manuel olarak
    • / etc / fstab'da açıklanan dosya sistemlerini kurarken, açılışta otomatik olarak
    • autofs arka plan programını kullanarak otomatik olarak

    Autofs ile üçüncü yöntemi, hacimli bilgileri nedeniyle bu yazıda ele almayacağım. Belki sonraki makalelerde ayrı bir açıklama olacaktır.

    Ağ Dosyaları Sistemini mount komutuyla bağlayın

    Gönderide mount komutunun kullanımına bir örnek sunulmuştur. İşte bir NFS dosya sistemini bağlamak için bir mount komutu örneği:

    DOSYALAR ~ # mount -t nfs arşivi: / arşiv-küçük / arşivler / arşiv-küçük DOSYALAR ~ # mount -t nfs -o ro arşiv: / arşiv-büyük / arşivler / arşiv-büyük DOSYALAR ~ # mount ..... .. arşiv: / arşiv-küçük tür / arşivler / arşiv-küçük tür nfs (rw, adres = 10.0.0.6) arşiv: / arşiv-büyük tür / arşivler / arşiv-büyük tür nfs (ro, adres = 10.0.0.6)

    İlk komut, dışa aktarılan dizini bağlar / arşiv-küçük sunucuda arşiv yerel bağlama noktasına / arşivler / arşiv-küçük varsayılan seçeneklerle (yani okuma ve yazma). Rağmen mount komutu en son dağıtımlarda, tür belirtmeden hangi tür dosya sisteminin kullanıldığını nasıl anlayacağını bilir, yine de parametreyi belirtin -t nfs arzu edilir. İkinci komut, dışa aktarılan dizini bağlar / arşiv-büyük sunucuda arşiv yerel dizine / arşivler / arşiv-büyük salt okunur seçeneğiyle ( ro). Komutu bağla parametreler olmadan, montaj sonucunu bize açıkça gösterir. Salt okunur seçeneğe (ro) ek olarak, diğerlerini belirtmek mümkündür. NFS'yi monte ederken temel seçenekler:

    • nosuid- Bu seçenek, takılı dizinden programların yürütülmesini yasaklar.
    • düğüm(cihaz yok - cihaz değil) - Bu seçenek, karakter kullanımını yasaklar ve özel dosyaları cihaz olarak engeller.
    • kilit (kilitsiz)- NFS kilitlemesine izin verir (varsayılan). nolock, NFS kilitlemesini devre dışı bırakır (kilitli arka plan programını başlatmaz) ve NFS kilitlemesini desteklemeyen eski sunucular için kullanışlıdır.
    • mounthost = isim- NFS bağlama arka plan programının üzerinde çalıştığı ana bilgisayar adı mountd.
    • bağlantı noktası = n - mountd arka plan programı tarafından kullanılan bağlantı noktası.
    • bağlantı noktası = n- NFS sunucusuna bağlanmak için kullanılan bağlantı noktası (rpc.nfsd arka plan programı RPC sunucusunda kayıtlı değilse varsayılan olarak 2049). n = 0 (varsayılan) ise, NFS, bağlantı noktasını belirlemek için sunucudaki bağlantı noktası haritasına bir istek gönderir.
    • boyut = n(okuma bloğu boyutu) - NFS sunucusundan bir kerede okunan bayt sayısı. Standart - 4096.
    • wsize = n(blok boyutunu yaz) - NFS sunucusuna bir kerede yazılan bayt sayısı. Standart - 4096.
    • tcp veya udp- NFS'yi bağlamak için sırasıyla TCP veya UDP protokolünü kullanın.
    • erkek arkadaş- Sunucuya erişimi kaybederseniz, sistem önyükleme işlemini engellememek için arka planda yeniden deneyin.
    • fg- Sunucuya erişiminizi kaybederseniz, öncelik modunda yeniden deneyin. Bu seçenek, bağlama denemelerini tekrarlayarak önyükleme işlemini engelleyebilir. Bu nedenle fg parametresi öncelikle hata ayıklama amacıyla kullanılır.

    NFS Bağlandığında Özniteliğin Önbelleğe Alınmasını Etkileyen Seçenekler

    Dosya öznitelikleri değişiklik zamanı, boyut, sabit bağlantılar, sahip gibi (inode'larda) depolanan, genellikle normal dosyalar için nadiren ve dizinler için daha az sıklıkla değişir. ls gibi birçok program dosyalara salt okunur olarak erişir ve dosya özniteliklerini veya içeriğini değiştirmez, ancak pahalı ağ işlemlerinde sistem kaynaklarını boşa harcar. Gereksiz kaynak israfını önlemek için şunları yapabilirsiniz: önbellek verilen nitelikler... Çekirdek, önbellekteki değişiklik zamanını dosyanın kendisinin değişiklik zamanı ile karşılaştırarak önbelleğin güncel olup olmadığını belirlemek için bir dosyanın değişiklik zamanını kullanır. Öznitelik önbelleği, belirtilen parametrelere göre periyodik olarak yenilenir:

    • ac (noac) (öznitelik önbelleği- öznitelik önbelleğe alma) - Öznitelik önbelleğe almayı etkinleştirir (varsayılan). Noac seçeneği sunucuyu yavaşlatsa da, birden çok istemci aktif olarak paylaşılan hiyerarşiye bilgi yazarken öznitelik süresinin dolmasını önler.
    • adirmaks = n (öznitelik önbellek dizini dosyası maksimum- bir dizin dosyası için öznitelik önbelleğe alma maksimumu) - NFS'nin dizin özniteliklerini güncellemeden önce beklediği maksimum saniye sayısı (varsayılan 60 saniye)
    • acdirmin = n (öznitelik önbellek dizini dosyası minimum- en azından bir dizin dosyası için öznitelik önbelleğe alma) - NFS'nin dizin özniteliklerini güncellemeden önce beklediği minimum saniye sayısı (varsayılan olarak, 30 saniye)
    • aregmaks = n (öznitelik önbelleği normal dosya maksimum- normal bir dosya için öznitelik önbelleğe alma maksimumu) - NFS'nin normal bir dosyanın özniteliklerini güncellemeden önce beklediği maksimum saniye sayısı (varsayılan 60 sn.)
    • aregmin = n (öznitelik önbelleği normal dosya minimum- en azından normal bir dosya için öznitelik önbelleğe alma) - NFS'nin normal bir dosyanın özniteliklerini güncellemeden önce beklediği minimum saniye sayısı (varsayılan olarak 3 saniye)
    • eylem = n (öznitelik önbelleği zaman aşımı- öznitelik önbelleğe alma zaman aşımı) - Yukarıdaki seçeneklerin tümü için değerleri geçersiz kılar. actimeo belirtilmemişse, yukarıdaki değerler varsayılan değerlerine ayarlanır.

    NFS hata işleme seçenekleri

    Aşağıdaki seçenekler, sunucudan yanıt gelmediğinde veya G/Ç hataları oluştuğunda NFS'nin ne yapması gerektiğini kontrol eder:

    • fg (bg) (ön plan- ön plan, arka fon- arka plan) - Başarısız bir NFS'yi ön plana / arka plana bağlamayı deneyin.
    • sert-yumuşak)- zaman aşımına ulaşıldığında konsola "sunucu yanıt vermiyor" mesajını görüntüler ve montaj denemelerine devam eder. Verilen seçenekle yumuşak- zaman aşımı meydana gelirse, çağıran programa bir G/Ç hatası bildirir. (yumuşak seçeneği kullanmamanız önerilir)
    • nointr (iç) (kesinti yok- kesmeyin) - Uzun bir zaman aşımına ulaşıldığında, sinyallerin sabit monteli dizin hiyerarşisinde dosya işlemlerini kesmesini önler. - kesinti sağlar.
    • yeniden aktar = n (yeniden iletim değeri- yeniden iletim değeri) - n küçük zaman aşımından sonra, NFS büyük bir zaman aşımı (varsayılan olarak 3) oluşturur. Uzun bir zaman aşımı, donanım / yazılım seçeneğine bağlı olarak işlemleri durdurur veya konsola "sunucu yanıt vermiyor" mesajı görüntüler.
    • tekrar dene = n (yeniden deneme değeri- yeniden deneme değeri) - NFS hizmetinin bağlama işlemlerini vazgeçmeden önce yeniden denediği dakika sayısı (varsayılan olarak 10.000).
    • zaman = n (zaman aşımı değeri- zaman aşımı değeri) - RPC veya düşük zaman aşımı durumunda NFS hizmetinin yeniden iletimden önce beklediği saniyenin onda biri sayısı (varsayılan 7). Bu değer, her zaman aşımı ile maksimum 60 saniyeye kadar veya uzun bir zaman aşımı gerçekleşene kadar artar. Ağ meşgulse, sunucu yavaşsa veya bir istek birden çok yönlendiriciden veya ağ geçidinden geçiyorsa, bu değeri artırmak performansı artırabilir.

    Önyüklemede otomatik NFS montajı (/ etc / fstab içindeki dosya sistemlerinin açıklaması)

    İletilen paketin belirli bir değeri (rsize / wsize değerleri) için en uygun zamanı bulmak için ping komutunu kullanabilirsiniz:

    DOSYALAR ~ # ping -s 32768 arşiv PING arşivi.DOMAIN.local (10.0.0.6) 32768 (32796) bayt veri. Archiv.domain.local'den 32776 bayt (10.0.0.6): icmp_req = 1 ttl = 64 zaman = 0.931 msn 32776 bayt, archiv.domain.local'den (10.0.0.6): icmp_req = 2 ttl = 64 süre = 0.958 msn 32776 bayt archiv.domain.local'den (10.0.0.6): icmp_req = 3 ttl = 64 zaman = 1,03 msn 32776 bayt archiv.domain.local'den (10.0.0.6): icmp_req = 4 ttl = 64 zaman = 1.00 ms 32776 bayt arşivden .domain.local (10.0.0.6): icmp_req = 5 ttl = 64 zaman = 1.08 ms ^ C --- arşiv.DOMAIN.local ping istatistikleri --- 5 paket iletildi, 5 paket alındı, %0 paket kaybı, süre 4006ms rtt min / ortalama / maks / mdev = 0.931 / 1.002 / 1.083 / 0.061 ms

    Gördüğünüz gibi, 32768 (32Kb) boyutunda bir paket gönderirken, istemciden sunucuya ve geri dönüş süresi 1 milisaniyelik bölgede yüzer. Bu süre 200 ms için ölçeğin dışına çıkarsa, o zaman değişim değerini üç ila dört kat aşması için timeo'nun değerini artırmayı düşünmelisiniz. Buna göre, bu testi güçlü bir ağ yükü sırasında yapmanız önerilir.

    NFS'yi Başlatma ve Güvenlik Duvarını Yapılandırma

    Not, kendisine çok teşekkür ettiği http://bog.pp.ru/work/NFS.html blogundan kopyalanmıştır !!!

    NFS sunucusunu başlatın, bağlayın, kilitleyin, kota ve durum "doğru" bağlantı noktalarıyla (güvenlik duvarı için)

    • önceden istemcilerdeki tüm kaynakların bağlantısını kesmeniz önerilir
    • NFSv4 kullanmayı planlamıyorsanız rpcidmapd'nin başlamasına izin vermeyin ve durdurun: chkconfig --level 345 rpcidmapd off service rpcidmapd stop
    • gerekirse portmap, nfs ve nfslock hizmetlerinin başlatılmasını etkinleştirin: chkconfig --levels 345 portmap / rpcbind chkconfig üzerinde --levels 345 nfs chkconfig üzerinde --levels 345 nfslock açık
    • gerekirse nfslock ve nfs servislerini durdur, portmap / rpcbind'i başlat, modülleri kaldır servis nfslock stop servisi nfs servisi durdur portmap başlat # servis rpcbind start umount / proc / fs / nfsd servisi rpcidmapd stop rmmod nfsd servisi autofs stop # daha sonra bir yerde olmalı rmmod nfs rmmod nfs_acl rmmod lockd'yi çalıştırın
    • portları aç
      • RPC için: UDP / 111, TCP / 111
      • NFS için: UDP / 2049, TCP / 2049
      • rpc.statd için: UDP / 4000, TCP / 4000
      • lockd için: UDP / 4001, TCP / 4001
      • mountd için: UDP / 4002, TCP / 4002
      • rpc.rquota için: UDP / 4003, TCP / 4003
    • rpc.nfsd sunucusu için / etc / sysconfig / nfs'ye RPCNFSDARGS = "- port 2049" satırını ekleyin
    • mount sunucusu için MOUNTD_PORT = 4002 satırını / etc / sysconfig / nfs'ye ekleyin
    • rpc.rquota'yı yeni sürümler için yapılandırmak için, / etc / sysconfig / nfs'ye RQUOTAD_PORT = 4003 satırını ekleyin
    • rpc.rquota'yı yapılandırmak için daha eski sürümler için gereklidir (yine de kota 3.08 veya daha yeni bir pakete sahip olmanız gerekir) rquotad 4003 / tcp rquotad 4003 / udp to / etc / services ekleyin
    • / etc / ihracatın yeterliliğini kontrol edecek
    • rpc.nfsd, mountd ve rpc.rquota hizmetlerini başlatın (aynı anda rpcsvcgssd ve rpc.idmapd başlatılır, eğer bunları kaldırmayı unutmadıysanız) service nfsd start veya yeni sürümlerde service nfs start
    • yeni sistemler için kilit sunucusu için LOCKD_TCPPORT = 4001 LOCKD_UDPPORT = 4001 to / etc / sysconfig / nfs satırlarını ekleyin
    • eski sistemler için kilit sunucusu /etc/modprobe [.conf] dosyasına doğrudan ekleyin: options lockd nlm_udpport = 4001 nlm_tcpport = 4001
    • durum sunucusu rpc.statd'yi bağlantı noktası 4000'e bağlayın (/etc/init.d/nfslock içindeki eski sistemler için -p 4000 anahtarıyla rpc.statd'yi çalıştırın) STATD_PORT = 4000
    • start services lockd ve rpc.statd service nfslock start
    • tüm bağlantı noktalarının "lsof -i -n -P" ve "netstat -a -n" ile düzgün şekilde bağlandığından emin olun (bağlantı noktalarından bazıları lsof'un görmediği çekirdek modülleri tarafından kullanılır)
    • "Yeniden inşa" işleminden önce sunucu istemciler tarafından kullanılmışsa ve sunucunun bağlantısı kaldırılamıyorsa, istemcilerde otomatik bağlama hizmetlerini (am-utils, autofs) yeniden başlatmanız gerekecektir.

    Örnek NFS Sunucusu ve İstemci Yapılandırması

    Sunucu yapılandırması

    NFS bölümlenmiş dizininizi açık ve yazılabilir hale getirmek istiyorsanız, seçeneği kullanabilirsiniz. all_squash seçeneklerle birlikte anonid ve anongid... Örneğin, "hiç kimse" grubundaki "hiç kimse" kullanıcısının haklarını ayarlamak için aşağıdakileri yapabilirsiniz:

    ARCHIV ~ # cat / etc / export # 192.168.0.100 üzerinde istemci için okuma / yazma erişimi, kullanıcı 99 için rw erişimi ile gid 99 / dosyalar 192.168.0.100 (rw, sync, all_squash, anonuid = 99, anongid = 99) ) # 192.168.0.100 üzerinde istemci için okuma/yazma erişimi, kullanıcı 99 için gid 99 ile rw erişimi / dosyalar 192.168.0.100 (rw, sync, all_squash, anonuid = 99, anongid = 99))

    Bu ayrıca, belirtilen dizine erişime izin vermek istiyorsanız, kimse.nobody'nin bölünmüş dizinin sahibi olmaması gerektiği anlamına gelir:

    adam dağı
    adam ihracat
    http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/nfs_perf.htm - IBM'den NFS performansı.

    Saygılarımızla, Mc.Sim!