| Editor Login | Register | ||
| > Bilgisayar > Linux |
|
|
| NFS - Ağ Dosya Sistemi | |||||||||||||||||||||||||||
| 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.
.
Ö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.
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 nin çalışmasını sağlayan 4 yarıdımcı şunlardır:
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"Ş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" 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: makina adı alan adının başındaki "wildcard" karakteri (örn : linux-*.alanadi.tr) NIS kullanılıyorsa bir "netgroup" bir IP adresi... Kurulum seçeneklerinin hhepsini sıralamayacağızi fakat en önemlileri şunlardır: rw (read write) : istemci ihraç edilen dosyayı okuyabilir ve ona yazabilir. ro (read only) : istemci ihraç edilen dosyayı sadece okuyabilir. root_squash : Bir kullanıcının "root" olarak "root" izniyle yazamaması tercih edilir.Bunu önlemek için UID/GIDİ(örn:"root"olan) "nobody" kullanıcısına çevrilir.Bu seçenek başlangıçta etkindir fakat no_root_squash kullanılarak önüne geçilebilir. all_squash : ihraç edilen sisteme erişen tüm kullanıcılar "nobody" kullanıcısına ait UID/GID i kullanırlar. anonuid, anongid: "nobody" kullanıcısı bu seçeneklerle tanımlanan UID ve GID yi kullanı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: /var/lib/nfs/rmtab : Her satır istemcinin adını ve bu sunucudan alınan dosya dizgesini gösterir. /var/lib/nfs/etab: /etc/exports dosyası sadece isteklerin listesini içerir.etab , exportfs tarafından yaratılır. Her satırında sadece bir kullanıcıya doğru, bir dosya dizgesi ihraç edilirken kullanılan seçenekler hakkında ayrıntılı bilgi vardır. Çalıştırıldığında rpc.mountd tarafından kullanılan başvuru(referans) dosyasıdır. /proc/fs/nfs/exports :istemcilerin listesini çekirdekçe bilindiği şekilde tutar. /var/lib/nfs/xtab: istemci adlarını ve makina adlarını wilcardlarla tuttuğu zaman kesinlik açısından kullanılır.Bu dosya sadece açık makina adlarını tutar. 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/localKomut, 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 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
Firewall daha iyi bir koruma sağlar.Farklı servisler tarafından kullanılan portları izler ,kullanılan protokoller:
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/netgroupNFS uyarıldığında, konfigürasyonun hayli kısıtlayıcı olduğunu biliyoruz. charly den /etc/exports dosyasının tuttuğu bilgi : # /etc/exportsihraç 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.mapBü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 @echo "Updating $@..."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.masterBundan 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. |
|
| Bağlantılar: bilgininefendisi.net |
| Open Source Document Project | AUP&TOS |