Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Bu makalenin İngilizce , Fransızca, Türkçe çevirisi

Yazar :
Frédéric Raynal

Yazar hakkında :

Frédéric Raynal dövme resimler konusunda bilgisayarda bir tez hazırlıyor.Yüzyılın başında içinde Th.Roosevelt'inde bulunduğu(onun polis memuru olduğu zamanlar) sürükleyici dedektif romanları okuyor.Ortam çok karanlıktır. Olay,seri çocuk cinayetleri işleyen bir katili bulmak için biraraya gelmiş insanları anlatıyor. Bu grup olayı çözmek için psikoloji,parmakizi gibi yeni teknolojiler ile desteklenir. Caleb Carr'ın bu romanı L'ange des ténèbres, geçen yüzyılın başları hakkında şaşırtıcı bir tablo çizer.

İçindekiler :

NFS - Ağ Dosya Sistemi

Çeviri : Erhan Ekici

Özet:

Bir Ağ Dosya Sistemi (NFS),bir ağ üzerindeki birden fazla bilgisayarda bulunan dosyaların, tek bir sabit diskte yeralıyormuşcasına yönetilmelerini sağlar.Dosyalara erişebilmek için onların fiziksel olarak nerede bulunduklarını bilmeyi gerektirmez.



Giriş :

NFS verilerin birçok bilgisayarda paylaşılmasını sağlar.Bu sayede bir kullanıcının sadece özel bir bilgisayardan ağa oturum açması gerekmez.NFS yoluyla herhangi bir makinadan kendi dizinine (home directory) erişebilir.

Ancak NFS çok yeterli bir protokol olmayıp , modem bağlantısı üzerinde çok yavaştırda. Yerel ağlar (local network) için tasarlanan NFS hayli esnektir ve hem kullanıcılar hemde sistem sorumluları(adminisrator) için bir çok olasılık sunmaktadır.

Bu sistem dikkatli bir kullanım gerektirir.Herkesin ağ üzerine veri girişine izin vermek doğru bir yönetim planı olmayabilir.Birkaç gerekli önlem riski azaltacaktır.

bu makale Dosya Sistemleri konusunda kısa bir bakış yaptıktan sonra NFS protokolüne değinmektedir.Ardından daha az kuramsal bir bölüme geçilip NFS sunucusu ve İstemcisinin kurulması,ve alınması gereken minimum güvenlik önlemleri anlatılacaktır.Daha sonra bir örnek üzerinde NFS,NIS ve "autofs" ın nasıl birleştirileceği resimle örneklendirilecektir. .
   

Dosya Sistemlerinin genel ve ayrıntılı olmayan tanıtımı

NFS hakkında konuşmadan evvel ,Dosya Sistemi terimini anlamalıyız. Dosya Sistemi, veriyi, düzenlenebileceği ve yönetilebileceği bir ortam'a(media) kaydetmeye yarayan bir yoldur.Belli başlı Dosya sistemleri şunlardır: NTFS(New Technology FileSystem), High Performance FileSystem (HPFS), DOS, FAT 12/16/32, VFAT, Macintosh Hierarchical Filesystem (HFS), ISO 9660 (for CD-ROM), extended file systems (Ext, Ext2, Ext3)).

Örneğin, veri tutan her fiziksel ortam (sabit disk gibi), bilgi saklayan/tutan küçük birimlerin sıralanmasından,yani 'bloklardan' oluşur.Her dosya sistemi bu blokları farklı biçimde yönetir.Şekil-1 de iki blok kullanan bir dosya girişi yapmaya çalışıyoruz.Üstte,dosya en son kullanılan bloktan sonrasına konuluyor ve başlangıçta boş alan bırakıyor.Alttaki başka bir dosya dizgesine ait resimde ise dosya ilk boş alana yerleştiriliyor.Böyle bir yöntem diskin ne kadar parçalanacağına etki eder.Bazı dosya sistemleri parçalanmayı otomotik olarak önlemekteyken, bazılarının kullanıcı tarafından birleştirilmeleri gerekebilir.
 
 


Şekil-1 : 'Blokları' yerleştirmenin iki farklı yolu





Linux'taki en bilinen dosya sistemi ext2fs (extended 2 file system) dir. Her dosya bir inode1tarafından gösterilir.Dizinler dosya listesini tutar ve aygıt erişimi , belirli dosyaların okunup-yazılması gibi işlemlerle yapılır.

NFS sunucusunun görevi kullanıcılara erişmek istedikleri 'inode' ları vermektir.Yine de,bir kullanıcı sadece dosyanın 'inode' yla çok iyi çalışamaz.Sunucu diğer makinaların 'inode' ları kullanmasına izin veren ek bir ağ katmanı(net layer) da vermektedir.
 

NFS protokolü

NFS olarak adlandırılan şey birbirinden farklı 4 protokolün birleşmesinden meydana gelmiştir.Bu 4 protokolde RPC(Remote Procedure Calls) ve portmap(rpc.portmap) portmapper,RPC program numaralarını port numaralarına çevirir.RPC sunucusu çalışmaya başladığında portmap'e hangi kapının kullanılacağını ve yönetilen RPC program numarasını söyler.Bir kullanıcı bir program numarasına bir RPC isteği göndermek istediğinde ; istenen programa erişim veren port numarasını almak için öncelikle sunucu 'portmap'iyle bağlantı kurulur.Ardından RPC paketleri ilgili portlara gönderilir.

NFS nin çalışmasını sağlayan 4 yarıdımcı şunlardır:
 
Protokol
Tanımı
Arabirimi(Daemon)
nfs Temel protokol olup dosya yaratma,arama,okuma,yazmaya izin verir.Güvenilirlik ve dosya istatiğinide yöneten protokoldür.
nfsd
mountd İhraç edilen dosya dizgelerinin nfs ile erişimlerini sağlamak için kurulmalarından sorumludur. 'mount' ve 'umount' gibi istekleri alan sunucu ihraç edilen dosya dizgelerine ait bilgileri tutmak zorundadır.
mountd
nsm
(Ağ Durum Ekranı) 
Bir makinanın durumunu(sunucu-istemci) belirlemek için ağ düğümlerini izleyip kontrol etmek amacıyla kullanılır.Örneğin 'reboot' eden bir makinayı bildirir.
statd
nlm
(Ağ kilit yöneticisi) 
Aynı anda farklı istemcilerin verileri değiştirmesini engellemek için bu protokol bir kilit dizgesi kullanır.Hangi dosyaların kullanıldığını bilir ve nsm protokolünün yardımıyla bir istemcinin ne zaman yeniden başladığını saptar.Nsm, her kullanıcının kilidini, geri vermeden önce serbest bırakır.
lockd

En son çekirdek(kernel) sürümlerinde NFS ve nlm protokollerini doğrudan destekleyen knfsd aracısı mevcuttur.Fakat mount ve nsm henüz desteklenmemektedir.Bir NFS sunucusu kurulup çalıştırıldığında şu komutla herşeyin çalıştığını gerçekleyebiliriz:

>> ps auxwww | egrep "nfs|mount|lock|stat"
root      1370  0.0  0.2  1176  580 ?        S    22:28   0:00 rpc.mountd --no-nfs-version 3
root      1379  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [nfsd]
root      1380  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [nfsd]
root      1381  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [nfsd]
root      1382  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [nfsd]
root      1383  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [nfsd]
root      1384  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [nfsd]
root      1385  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [nfsd]
root      1386  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [nfsd]
root      1399  0.0  0.0     0    0 pts/0    SW   22:28   0:00 [lockd]
root      1409  0.0  0.2  1156  560 ?        S    22:28   0:00 rpc.statd
root      1652  0.0  0.1  1228  484 pts/3    S    22:49   0:00 egrep nfs|mount|lock|stat
Şu anda NFS nin NFSv2 ve NFSv3 olarak iki sürümünü bulmak mümkündür.Linux'un NFS sunucuları sadece 2.sürümü desteklemektedir(önceki örnekte mountd satırındaki seçenekten itibaren)

NFS, 'file handle' denilen bir veri yapısıyla ilgilidir.Oldukça özel 'bit' serilerinden oluşur.Bu seriler her dosya sistemi nesnesini tek bir yöntemle tanımayı sağlar.Örneğin bir dosya 'inode' nun yanısıra dosyanın nerede tutulduğunu aygıta bildiren bir girdide içerir.  

Kurulum

 

Sunucu

Öncelikle yapılması gereken, daha öncede gördüğümüz gibi NFS ce istenen portmap protokolünü çalıştırmaktır.
root >>/usr/sbin/rpcinfo -p
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
root >>/sbin/portmap
root >>/usr/sbin/rpcinfo -p
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
'rpcinfo' komutu RPC servislerinin (-p) ile özetlenen makinalarda çalıştığını gösterir.'portmap' henüz çalışmamaktadır.(Çoğu Linux dağıtımları sistem açılışında bunu gerçekleştirmek için bir script sunarlar.) rpcinfo komutuna karşı verilen olumsuz yanıtın sık karşılaşılan bir başka nedeni de 'portmapper' in /etc/hosts{allow,deny} dosyalarında yer alan güvenlik kısıtlamaları nedeniyle yanıt veremez oluşudur.Bu durumda hosts.allow dosyasına "portmap:hosts" girdisi ekleyiniz.

NFS başlatılmadan önce konfigürasyon ayarları yapılmalıdır.Sadece bir kongifürasyon dosyası vardır. ve /etc/exports olarak anılır.Her satır ihraç yerini ve erişime sahip istemcilerin listesini işaret etmektedir.Her istemci adının sonuna parametre eklemek mümkündür.'man exports' sayfası istemci adları ve parametreler için söz dizimini açıklamaktadır.

İstemci adları için izin verilen biçimler şöyle sıralanabilir:

Kurulum seçeneklerinin hhepsini sıralamayacağızi fakat en önemlileri şunlardır: NFS sunucusunda başlamak için şimdi rpc-mountd ve rpc.nfc aracılarına başlamalıyız.rpcinfo komutuyla herşeyin çalıştığını kontrol ederiz.Hatta, sunucuyu nsm ve nlm protokolleri(rpc.statd ve rpc.lockd) ile başlatabiliriz.Bunlar bir NFS sunucusunu çalıştırmak için gerekli değildir fakat bir makinanın bozulması, reboot etmesi vb. durumlara karşı şiddetle tavsiye edilir.

/etc/exports konfigürasyon dosyasının içeriğini değiştirdiğmizde , etkilenmiş olan aracıları değişiklikler hakkında uyarmalıyız. 'exportfs' komutu bu bilgiyi sunucularımıza iletir. -r seçeneği /etc/mtab 2 dosyası ile /etc/exports dosyalarını eşler. -v seçeneği ise ihraç edilen dosyaların dizgelerini seçenekleriyle birlikte gösterir.

Sistem açılışından sonra önemli bilgileri içeren dosyaları sıralayacak olursak:

Bir istemci bir dosya dizgesine erişmek istediği zaman, mountd dosyasına sormakla işe başlar.Eğer sorgu olumluysa etab dosyasında onu arar.Sorgulamayı (firewall kuralları,hosts.{allow,deny}) yapabilmesi için istemciye izin verilip verilmediğini öğrenmek için kernel'i kontrol eder. /var/lib/nfs/etab dosyasını güncellemek için istemciye izin verilip verilmediğini kontrol için kernel exportfs dosyasını kullanır.Eğer bu dosyada, ihraç sisteme grup istemcilerinin bir bölümünü ihraç etmesine izin verilmişse mountd bu yeni hostu ile xtab dosyasını güncellemek için kernel ile iletişime geçer.  

İstemci

Nfs tarafından ihraç edilen bir dosya dizgesine erişim doğruca kernel tarafından yönetilir.NFS destekli derlenmek zorundadır./proc/filesystems dosyası kernel tarafından doğruca desteklenen tüm dosya dizgelerini listeler.Daha sonra NFS tarfından ihraç edilmiş bir sisteme erişmek istediğini kernele söylemek zorundasın.

mount komutu farklı ndosya dizgelerine erişmeye izin verir.Yeni bir dosya dizgesinin uygun olduğunu kernele bildirir. -t parametresi kullanılan dosya dizgesinin tipini belirlemek için kullanılabilir.NFS için -t nfs yazarız.

mount komutunun nfs için kendi özel parametreleri vardır.Mesela , rsize ve wsize parametreleri okuma ve yazma için blok kapasitesini değiştirmek için kullanılabilir.intr,noexec veya nosuid gibi genel parametrelerle NFS nin özel parametrelerini birleştirebilirsin.

charly adlı bir makinanın NFS sunucusuna sahip olduğunu ve onu /usr/local klasöründe tuttuğunu varsayalım./usr/local jill adlı makinadan ona erişmek istendiği zaman , charly den jill e ihraç edilen klasörü kurmak zorundasın:

root@jill >> mount -t nfs -o nosuid,hard,intr charly:/usr/local /usr/local
Komut, nosuid,hard ve intr parametreleri ile bir NFS dosya dizgesi kuruyor olduğumuzu gösterir.Son iki parametre en ilginç olanlarıdır.Birincisi kurulacak parçayı belirtir.NFS için klasör ve parçaları belirttiğin yerdeki normal mount komutundan farklı bir yazım biçimine(syntax) sahiptir. Burada sunucu yu belirtiriz:ihraç edilmiş klasör(parçanın yerine).Son parametre istemcide dosya dizgesinin yerini belirtir. Sadece charly nin /usr/local ini jill ile paylaşırız ve bir kereden fazla /usr/local de programları kurmaktan sakınabiliriz.Bu ayarı sürekli hale getirmek için jiil deki etc/fstab dosyasında onu belirtebiliriz.fstab dosyası açılışta çalışan bütün programları içerir. /etc/fstab için kullanım şekli(syntax):
 
#    device           mount point   file system   options     dump  fsckorder
charly:/usr/local    /usr/local       nfs       nosuid,hard,intr    0      0

 

Uyarı

NFS ile yaygın bir problem, istemci ve NFS sunucusu arasında güvenli bir ilişkinin ,default olarak var olduğu gerçeğinden gelir.Bu durumda eğer sunucunun 'root' hesabı uyumlu ise istemcininki de uyumlu olacak.NFS How-to ları güvenliği arttırmak için bazı ayarları tarif eder.Bir istemci sunucuya gözü kapalı güvenemez.Bu nedenle mount komutunu kullanırken bağıl parametreleride belirtmeliyiz.Yukarıda bir tanesine değindik:nosuid. SGID bit izlerini iptal eder.Bu nedenle 'root' kullanıcısı sisteme öncelikle normal kullanıcı gibi girmeli daha sonra 'root' olmalı. Diğer bir parametre daha kısıtlayıcı olan noexec parametresidir.Bu parametre ihraç edilmiş dosya dizgesi üzerinde program çalıştırmayı yasaklar.Bu parametre yanlızca üzerinde sadece veri tutan sistemler için kullanılabilirdir.

NFS sunucu tarafında, istemcinin root hesabına güvenmediğimizi ayrıca belirtebiliriz.Bunu root_squash parametresi ile /etc/export da belirtmeliyiz.Sonra , eğer istemcide root hakkı olan UID 0 lı (root) bir kullanıcı sunucu tarafından ihraç edilen dosya sistemine erişirse , dosyaları sorgulamak için nobody yerine konur.Bu parametre Linux altında default olarak aktiftir.Fakat no_root_squash parametresi ile iptal edilebilir. Ayrıca hatırlanması gereken bir nokta anonuid ve anongid parametreleri kullanıcının UID/GID statüsünü nobody den farklı bir taneye çevirmeye izin verirler.

Bazı durumlar daha geneldir ve portmapper i etkiler. mesela /etc/hosts.denydosyasında aşağıdaki satırla bütün makinalara erişimi kapatırız:
 

# hosts.deny : absolute prohibition for every one to
#              use the portmap
portmap: ALL


Daha sonra /etc/hosts.allow dosyasında bu katı sınırlama varsayılan bazı makinalara izin verilerek gevşetilebilir.

Firewall daha iyi bir koruma sağlar.Farklı servisler tarafından kullanılan portları izler ,kullanılan protokoller:
 

RPC Servisi Port Protokoller
portmap 111 upd / tcp
nfsd 2049 udp
mountd variable udp / tcp
 

NIS, NFS ve autofs kullanımı

Şİmdi ancak bir şirkette rastlayabileceğin biraz daha karışık bir ağı inceleyelim.Evde kurulmuş ufak bir ağda muhtemelen NIS olmadan çalışabilirsin. NIS Network Information Service diğer makinalara konfigürasyon dosyalarını dağıtır.
Ağımızdaki asıl sunucu charly ve ağımızın diğer 3 makinası sabrina, jill ve kelly. charly yi alan adi için bir NIS sunucusu gibi konfigüre ederiz.Diğer makinalar sadece charly nin NIS istemcileridir.

İlk olarak Sunucumuz olan charly nin konfigürasyonuna bakalım.Gerekli bütün bilgileri tutan bazı NIS haritaları tanımlamakla işe başlayalım.

/etc/netgroup dosyası yaygın karakteristiklere sahip makina gruplarını tutar.(mesela aynı mimari).Bir NIS haritası NFS için cok faydalıdır.Aynı ihraç dosya sistemlerine erişebilen bütün makinaları toplamak zorundayız.Bu grup daha sonra bire bir bütün istemcileri belirtmek yerine /etc/exports dosyasında tutularak kullanılır:

# /etc/netgroup
charlysangels (sabrina,,) (jill,,) (kelly)
 NFS uyarıldığında, konfigürasyonun hayli kısıtlayıcı olduğunu biliyoruz. charly den /etc/exports dosyasının tuttuğu bilgi :
# /etc/exports
/usr/local    @charlysangels(ro)
ihraç edilmiş /usr/local klasörüne erişmek için automount kullanmaya karar veriyoruz.Sistem açılışında bu sistemi mount etmenin yerine, bu klasördeki bir dosyaya bir kullanıcı erişmek istediği zaman bu işlem otomatik olarak yapılır.  NIS ve automount tarafından nelerin erişilebilir olacağını tanımlamak için /etc/auto.map dosyasını yaratıyoruz:
# /etc/auto.map
charly          charly:/usr/local
Bütün bu bilgilerin (auto.map ve netgroup dosyaları) bir NIS veritabanına toplanmasını istiyorsak, makefile dosyasını tekrar yaratmadan önce onu güncellemeliyiz. netgroup un tabana ekleneceğinden emin olmalıyız.
#Yellow Pages Makefile a eklenecek
AUTO_MAP    = $(YPSRCDIR)/auto.map
# ...
#...
auto.map: $(AUTO_MAP) $(YPDIR)/Makefile
            @echo "Updating $@..."
            -@sed -e "/^#/d" -e s/#.*$$// $(AUTO_MAP) | $(DBLOAD) \
            -i $(AUTO_MAP) -o $(YPMAPDIR)/$@ - $@
            -@$(NOPUSH) || $(YPPUSH) -d $(DOMAIN) $@
Bu kural sadece yorumları kaldırır,veritabanına yeni bir giriş ekler ve sonra tüm sunuculara bilgiyi gönderir./var/yp klasöründen make'i çalıştırmalıyız.

Şimdi üç istemcimiz, sabrina, jill ve kelly.YP ler tarafından verilen yeni bir haritayı yönetmek için "autofs" ye söylemeliyiz.Her istemcinin /etc/auto.master dosyası aşağıdaki satırları doğrular.

#/etc/auto.master
/usr/local    yp auto.map    --intr,nosuid,nodev
Bundan sonra "autofs" yi etkin kılmak için tekrar başlatmalıyız.

Şİmdi charly makinasında tek bir(eşsiz) /usr/local fiziksel klasörüne sahibiz.Sonra "charly" üzerine spesifik programlar kurulduğu zaman bütün makinalar onları kullanabilir.

Bu örnek sadece bir /usr sistemi, /usr/doc veya diğerlerinin kurulumu ile daha da geliştirilebilir.Fakat pratikte, iyi bir fikir değildir.Kurulum sık sık , /etc klasörü veya diğerlerindeki dosyaları düzenlemeyi gerektirir..Paylaşılmamış dosyaları bütün makinalarda düzenlemeliyiz.
   

Kaynaklar

Dosya Sistemleri


NFS



Footnotes

... inode1
veri tutan fiziksel blok adresleri,dosya erişim izinleri vb tutan dosya tanımlayıcısı...
... /etc/mtab2
Bu dosya kernel tarafından mount edilmiş bütün dosya sistemlerinin listesini tutar.

 

Bu makale için değerlendirme formu

Her makale kendi tartışma sayfasına sahiptir.Burada kendi yorumlarınızı yazabileceğiniz gibi daha önce yazılmış yorumları da okuyabilirsiniz:
Değerlendirme sayfası

Web sayfaları Linuxfocus editör grubu tarafından düzenlenir.
© Frédéric Raynal
LinuxFocus.org 2000

Linuxfocus dergisine yorum ve hata bildirimi için tıklayınız.
Çeviriler:
en -> tr Erhan Ekici
fr -> -- Frédéric Raynal
fr -> en Philippe Trbich

2000-10-28, generated by lfparser version 1.8