Sieťové súborvé systémy

Miroslav Mažgut, xmazgut@fi.muni.cz

SMB/CIFS a Samba

Protokol SMB/CIFS

SMB (Server Message Block), tiež známy ako CIFS (Common Internet File System), je sieťový protokol na aplikačnej vrstve, ktorý umožňuje vzdialený prístup k súborom, tlačiarňam, sériovým portom a ďalším zariadeniam v sieti. Pôvodne vyvinutý firmou IBM. Tento klient/server protokol je široko využívaný v systémoch Windows od spoločnosti Microsoft.

Verzie protokolu:

  • SMB 1.0
    1983 Vyvinutý Barry Feigenbaum vo firme IBM.
  • CIFS
    1996 Snaha spoločnosti Microsoft premenovať protokol. Podpora symbolických a pevných odkazov, ako aj práca so súbormi veľkých veľkostí.
  • SMB 2.0
    2006 Vyvinutý spoločnosťou Microsoft (predstavený s operačným systémom Windows Vista). Aj keď je protokol proprietárny, jeho špecifikácia bola zverejnená, aby umožnila iným systémom spolupracovať s operačnými systémami Microsoft, ktoré používajú nový protokol. Protokol znížil počet príkazov z pôvodných 100 na 19."
  • SMB 3.0
    2012 Predstavený spolu s operačným systémom Windows 8, tento protokol funguje cez RDMA (Remote Direct Memory Access).

Samba

Samba je open-source implementácia sieťového protokolu SMB/CIFS, ktorý sa využíva predovšetkým na vzdialený prístup k súborom a tlačiarňám v systémoch Windows. Vo verzii 3, okrem služieb na zdieľanie súborov a tlačových služieb pre klientov systému Windows, je možné ju použiť aj na integráciu do domény Windows. Môže plniť úlohu primárneho doménového radič alebo fungovať ako bežný klient v doméne. Samba môže byť aj súčasťou domény Active Directory.

Samba démoni

  • smbd: poskytuje možnosti zdieľania súborov a tlačiarní.
  • nmbd: poskytuje preklad NetBIOS na IP adresu.
  • winbindd: Name Service Switch démon na resolvovanie mien z NT (Windows) serverov

Zabezpečenie v Sambe

Samba poskytuje 2 typy zabezpečenia a to user-level a share-level.
  • user-level: Tento typ poskytuje 4 módy zabezpečenia:
    1. Bez explicitnej konfigurácie Samby sa uživateľ musí autentizovať pomocou mena a hesla priamo na servery.
    2. Domain Security Mode: V tomto režime zabezpečenia má nastarosti autentifikáciu radič domény.
    3. Active Directory Security Mode: Autentifikácia pomocou Kerbera v Active Directory prostredí.
    4. Server Security Mode: Autentifikáciu zaobstaráva iný server. V dnešnej dobe sa neodporúča používať.
  • share-level: Zabezpečenie pomocou hesla bez autentizácie uživatela (neodporuča sa používať).
Konfigurácia zabezpečenia

# Default (user-level)
[GLOBAL]
...
security = user
...


# Domain Security Mode
[GLOBAL]
...
security = domain
workgroup = MARKETING
...


# Active Directory Security Mode
[GLOBAL]
...
security = ADS
realm = EXAMPLE.COM
password server = kerberos.example.com
...


# Server Security Mode
[GLOBAL]
...
encrypt passwords = Yes
security = server
password server = "NetBIOS_of_Domain_Controller"
...


# Share level
[GLOBAL]
...
security = share
...

Konfigurácia servera Samby

Samba je obsiahnutá vo väčšine Linuxových distribúciach. Konfigurácia Samby je obsiahnutá v jednom konfiguračnom súbore (typicky sa nachádza v /etc/smb.conf alebo /etc/samba/smb.conf).

Konfigurácia sa skladá zo sekcí a tie z parametrov. Názov sekcie má tvar [méno-sekcie](napríklad: [global], [home], [printers] ...). Názov sekcie zároveň slúži ako meno zdielaného zdroja. Parametre majú tvar parameter = hodnota(napríklad: path = /public).

Sekcia global definuje parametry platné pre celý server, východzie hodnoty pre parametre použitých v ostatných sekciach a nastavenie zabezpečenia.

Príklad konfigurácie

[global]
workgroup = STAFF
hosts allow = 10.0.100
security = share

[homes]
comment = %u's Home Directory
browsable = no
read only = no
map archive = yes

[merlin]
path = /staff/merlin
browseable = no
read only = no
force create mode = 0660
force directory mode = 2770
valid users = merlin @kmadmin

Pomocou príkazu $ testparm vieme zvalidovať konfiguračný súbor.

Vytvorenie uživatela
  1. Vytvoríme unixového uživatela: $ useradd merlin
  2. Pridáme uživatela do Samby: $ smbpasswd -a merlin
  3. Aktivovanie uživatela: $ smbpasswd -e merlin
Vzdialený prístup

Pomocou nástroja smbclient sa dokážeme pripojiť zdialene na server Samby.

Prikad: $ smbclient //10.0.100.1/merlin -U merlin

Pripojenie zväzku

Na pripojenie zväzku budeme potrebovať balíček cifs-utilst.

Prikad: $ mount -t cifs //10.0.100.1/merlin /mnt -o user=merlin

Konfigurácia Samby ako člen domény

Konfiguračný súbor:
[global]
workgroup = SAMDOM
security = ADS
realm = SAMDOM.EXAMPLE.COM
winbind refresh tickets = Yes
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes
winbind use default domain = yes
username map = /usr/local/samba/etc/user.map
Príkazy:
$ net ads join -U administrator / $ samba-tool domain join samdom.example.com MEMBER -U administrator
$ !root = SAMDOM\Administrator

Konfigurácia Samby ako kontrolér domény

Nastavenie:
$ samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=SAMDOM.EXAMPLE.COM --domain=SAMDOM --adminpass=Passw0rd
Príkazy:
$ cp /usr/local/samba/private/krb5.conf /etc/krb5.conf

RPC, portmapper/rpcbind, NFS, Automounter

RPC

RPC (remote procedure call) je technika, dovolujúca programu vykonávať kód na inom mieste, než ke umiestnený voljúci program. Technika je založená na klinet-server modely.

Jednotlivé kroky RPC

  1. Na klientovy prebehne zabalenie identifikátorov procedúry a vstupných parametrov do formy vhodné pre prenos (tzv. marshalling).
  2. Balíček sa odošle serveru.
  3. Server balíček rozbalí a zanalyzuje obsah (tzv. unmarshalling).
  4. Dôjde k vykonaniu procedúry.
  5. Server zabalí výstup procedúry.
  6. Data sa odošlú späť klientovi.
  7. Na strane klienta dôjde ku rozbaleniu.
  8. Prebehne predanie obsahu nadradenému programu.

portmapper/rpcbind

Ide o služby, ktoré poskytujú klientovi informácie ohľadom RPC programov ležiace na servery. Portmap vracia port a rpcbind vracia univerzálnu adresu (definovaná RFC 3530). Služby vždycky počúvajú na portu 111 na TCP i na UDP. Musia byť spustené ešte pred tým, než začne bežat akýkoľvek RPC server.

NFS

NFS (Network File System) je protokol distribuovaného súborového systému pôvodne vyvinutý spoločnosťou Sun Microsystems (Sun) v roku 1984, ktorý umožňuje používateľovi na klientskom počítači pristupovať k súborom cez počítačovú sieť podobne ako pri prístupe k lokálnemu úložisku. NFS, podobne ako mnohé iné protokoly, stavia na systéme RPC. NFS je otvorený štandard IETF definovaný v RFC, ktorý umožňuje komukoľvek implementovať protokol.

Verzie protokolu:

  • NFSv1
    1984 Bol používany pre experimentálne účely spločnosti SunMicrosystems. Keď vývojársky tím pridal podstatné zmeny do verzie 1 NFS a vydal ju mimo spoločnosti Sun, rozhodol sa vydať novú verziu ako v2.
  • NFSv2
    1989 Pracoval iba na UDP. Jeho dizajnéri zamýšľali ponechať serverovú stranu bez stavu, s uzamknutím (napríklad) implementovaným mimo základného protokolu.
  • NFSv3
    1995 Podporoval 64 bitové veľkosti súborov (súbory väčšie než 2GB). Bola implementovaná asynchoný zápis na server, aby sa zlepšila rýchlosť zápisu. Podpora protokolu TCP. Ďalšie atributy súborov v odpovediach.
  • NFSv4
    2003 Vyvinutý Internet Engineering Task Force (IETF). Predstavenie stavového protokolu. Lepšie použite cez firewall bez použitia portmapu. Pevne daný TCP port 2049.
  • NFSv4.1
    2010 sa zameriava na poskytovanie podpory protokolov na využitie výhod klastrových serverových nasadení vrátane schopnosti poskytovať škálovateľný paralelný prístup k súborom distribuovaným medzi viacerými servermi (rozšírenie pNFS). Taktiež zahŕňa mechanizmus spájania relácií (známy aj ako NFS Multipathing).
  • NFSv4.2
    2016 Klonovanie a kopírovanie na strane servera, odporúčanie pre vstup/výstup aplikácie, riedke (sparse) súbory, rezervácia miesta, blok údajov aplikácie (ADB), označený NFS s označením sec_label, ktorý sa prispôsobí akémukoľvek bezpečnostnému systému MAC,

Zamikanie na NFS

Protokol NFS (verzie 2 a 3) nepodporuje uzamykanie súborov, ale prostredie NFS podporuje pomocný protokol s názvom NLM, ktorý pôvodne znamenal „Network Lock Manager“. Keď súborový systém NFS na klientovi NFS dostane požiadavku na uzamknutie súboru, namiesto volania vzdialenej procedúry NFS vygeneruje volanie vzdialenej procedúry NLM.

Od verzie 4 podpora uzamykania súborov je súčasťou protokolu NFS. Užívateľ klienta si môže zvoliť uzamknutie celého súboru alebo bajtového rozsahu v rámci súboru.

Caching

Client-side caching

NFS klient má možnosť async mount, ktorá ukladá zápisy do RAM klienta, kým nie sú splnené určité podmienky.

Zápisy aplikácií sa odkladajú, dokým nenastane jedna z následujúcich akcí:

  • nedostatok operačnej pamäte
  • explicitnému vyprázdneniu pomocou sync, msync, fsync
  • zatvorenia súboru alebo zamknutia/odemknutia súboru

Ak je sync špecifikovaný, údaje sa vylejú na server s každým systémovým volaním, ktoré zapisuje údaje, čím sa zabezpečuje väčšia koherencia vyrovnávacej pamäte údajov medzi klientmi, ale za značné náklady na výkon.

Server-side caching

Táto Možnosť async umožňuje serveru NFS porušiť protokol NFS a odpovedať na požiadavky skôr, ako budú akékoľvek zmeny vykonané touto požiadavkou potvrdené do stabilného úložiska (napr. disková jednotka).

Pri nastavení sync sa na požiadavky odpovedá až po potvrdení zmien na stabilnom úložisku

Konfigurácia NFS

Na servery je potrebné nainštalovať balík nfs-kernel-server. Na klientovi nfs-common.

Konfigurácia servera prebieha v zložke /etc/exports. Konfigurácie majú tvar zdielaný_súbor ip_klienta(nastavenie1,...,nastavenieN). Príklad

/mnt/volume-nyc3-01/nfs/ 10.0.100.0/24(rw,sync,no_subtree_check)

Pripojenie zložky ku klientovi.

$ mount 10.0.100.1:/mnt/volume-nyc3-01/nfs/ /nfs/general

Kerberos

Server (nfs-secure-server):
  1. kadmin: addprinc -randkey nfs/nfsserver.example.com
  2. kadmin: ktadd nfs/nfsserver.example.com
  3. pridanie sec=krb5 k záznamom v /etc/exports
  4. pridať sec=krb5 k záznamom v /etc/exports
  5. $ exportfs -avr
  6. $ systemctl enable nfs-secure-server && systemctl start nfs-secure-server
Klient (nfs-secure):
  1. kadmin: addprinc -randkey nfs/nfsclient.example.com
  2. kadmin: ktadd nfs/nfsclient.example.com
  3. $ systemctl enable nfs-secure && systemctl start nfs-secure
  4. $ systemctl enable nfs-client.target && systemctl start nfs-client.target
  5. $ mount -t nfs4 -o sec=krb5 nfsserver.example.com:/home/tools /mnt
  6. $ systemctl enable nfs-secure-server && systemctl start nfs-secure-server

Automounter

Automaticky pripája a odpája odpojitelné zariadenia podla aktivity užívatela. Vyžaduje podpru kernela.

Konfigurácia

V systéme sa nachádza hlavný mapovací súbor /etc/auto.master a samotný mapovací súbor /etc/auto.xxxx.

Konfigurácia v /etc/auto.master je vo formáte miesto_pripojenia mapovací_súbor hodnota_timeoutu. Príklad:

/dbstuff /etc/auto.nfsdb --timeout=180

Konfigurácia v /etc/auto.xxxx je vo formáte miesto_pripojenia nastavenia lokácia_v_rámci_súborového_systému. Príklad:

db_backup -fstype=nfs,rw,soft,intr 192.168.1.21:/db_backup

AFS, GFS

AFS

AFS (Andrew File System)je distribuovaný súborový systém, ktorý využíva súbor dôveryhodných serverov na prezentovanie homogénneho, location-transparent súborového menného priestoru všetkým klientským pracovným staniciam. Jeho primárne využitie je v distribuovaných výpočtoch.

GFS

GFS (Global File System) je žurnálovací klastrový súborový systém pre počítačové klastre bežiace na Linuxe. Umožňuje všetkým uzlom súčasný priamy prístup k zdieľanému bloku.

Literatura