Nastavitev strežnika NFS v Linuxu za skupno rabo imenika prek NFS
Raven: Napredno
Ocenjeni čas: ~30 minut
Cilj: Nastaviti strežnik NFS v sistemu Linux za souporabo imenika z več odjemalci, kar olajša avtomatizacijo rutinskih opravil in proaktivno varnostno revizijo.
Uvod
Upravljanje skupne shrambe podatkov v flotah strežnikov je temeljna zahteva za vzdrževanje produkcijskih okolij z visokimi zahtevami glede razpoložljivosti. Protokol NFS (Network File System) sistemu omogoča, da prek omrežja omogoči souporabo imenika prek NFS in tako deluje kot NAS (Network Attached Storage). Z namestitvijo strežnika NFS v sistemu Linux lahko hkrati zagotovite centraliziran dostop do datotek več odjemalcem NFS. Ta vodič prikazuje, kako učinkovito nastaviti strežnik NFS v sistemu Linux, privzeto z uporabo različice NFSv4.2.
Ta vodič uporablja varnostni način sec=sys (AUTH_SYS). V tem načinu strežnik odjemalcu glede identifikacije uporabnikov (UID/GID) načeloma zaupa brez kakršnega koli kriptografskega preverjanja pristnosti. Nadzor dostopa temelji izključno na filtriranju naslovov IP v datoteki /etc/exports in na standardnih dovoljenjih UNIX za datoteke. Takšna nastavitev je odlična za zaupanja vredna notranja omrežja (na primer znotraj navideznega okolja Proxmox), vendar je za nezaupanja vredna omrežja ne priporočamo. Za dodatno varnost razmislite o uvedbi overjanja Kerberos (npr. sec=krb5, sec=krb5i ali sec=krb5p).
Predpogoji
Preden začnete, se prepričajte, da so izpolnjeni naslednji pogoji:
- Operacijski sistem: Ubuntu 22.04/24.04 LTS, Debian 12/13 ali CentOS/RHEL 9/AlmaLinux 10
- Zahtevana programska oprema:
nfs-kernel-server(2.6+) za Ubuntu/Debian alinfs-utils(2.x+) za CentOS/RHEL/AlmaLinux - Dostop: dostop
sudoalirootna vseh računalnikih - Omrežje: strežniki morajo med seboj komunicirati prek zasebnega omrežja.
- Zahtevano znanje: samozavestna uporaba ukazne vrstice v sistemu Linux.
Terminologija
Preden nadaljujete, se seznanite z naslednjimi osnovnimi pojmi:
- NFS (Network File System): protokol, ki uporabnikom omogoča dostop do datotek prek omrežja, kot da bi bile shranjene lokalno.
- Strežnik NFS: osrednji računalnik, ki gostuje datoteke in jih daje na voljo v omrežju.
- Odjemalec NFS: oddaljeni računalnik, ki se poveže s strežnikom za dostop do skupnih datotek.
- Skupni imenik (Shared Directory): lokalna mapa na strežniku, ki bo na voljo odjemalcem.
- Izvoz (Export): postopek, s katerim lokalni imenik postane dostopen odjemalcem prek omrežja.
- /etc/exports: glavna konfiguracijska datoteka, ki jo demon NFS uporablja za določitev, kateri imeniki se izvozijo in kakšna so pravila dostopa.
- Priklop (Mounting): postopek pripenjanja oddaljene omrežne souporabe na lokalno strukturo imenikov.
- Priklopna točka (Mount Point): lokalni imenik na odjemalcu, na katerega je pripet oddaljeni datotečni sistem.
- nfs-utils: programski paket z orodji in demoni, potrebnimi za odjemalca in strežnik NFS.
- RPC (Remote Procedure Call): protokol, s katerim lahko program zahteva storitev od programa v drugem računalniku.
- Portmapper / rpcbind: storitev, ki številke programov RPC preslika v številke omrežnih vrat; NFS jo potrebuje za dogovarjanje o povezavah.
- Dovoljenja (Permissions): pravice dostopa, ki določajo, kdo lahko datoteke bere, piše ali izvaja.
- Dostop samo za branje (RO): stanje dovoljenj, ki odjemalcem omogoča ogled datotek, ne pa njihovega spreminjanja.
- Dostop za branje in pisanje (RW): stanje dovoljenj, ki odjemalcem omogoča spreminjanje skupnih datotek.
- root_squash: varnostna funkcija, ki zahteve oddaljenega uporabnika root preslika v neprivilegiranega uporabnika (nobody) in tako prepreči nepooblaščen dostop z pravicami root.
- Požarni zid (Firewall): omrežni varnostni sistem, ki nadzoruje in upravlja dohodni in odhodni omrežni promet.
- Datotečni sistem Linux: strukturirana metoda, s katero Linux shranjuje in organizira datoteke na disku.
- Ime gostitelja (Hostname): človeku berljiva oznaka, dodeljena napravi, povezani v računalniško omrežje.
- Naslov IP: enolični številski identifikator, dodeljen vsaki napravi v omrežju.
- Automount (samodejni priklop): praksa samodejnega priklopa datotečnih sistemov ob zagonu.
- NAS (Network Attached Storage): arhitektura shranjevanja na ravni datotek, ki podatke omogoča dostopne prek omrežja.
1. korak: Namestite potrebne pakete
Najprej namestite potrebno programsko opremo na strežnik in odjemalce. Paket nfs-utils zagotavlja demone in orodja za upravljanje datotečnega sistema. Sodobne nastavitve naj privzeto uporabljajo NFSv4.2, ki je stanjski (stateful) in poenostavi pravila požarnega zidu.
Na strežniku NFS (Debian/Ubuntu):
sudo apt update sudo apt install nfs-kernel-server
Na strežniku NFS (CentOS/RHEL/AlmaLinux):
sudo dnf install nfs-utils sudo systemctl enable --now rpcbind nfs-server
Pri čisti nastavitvi NFSv4 storitev rpcbind za sam priklop NFS tehnično ni potrebna. Potrebna pa je, če nameravate za odkrivanje izvozov uporabiti ukaz showmount (kot je prikazano v 5. koraku) ali če morate podpirati starejše odjemalce NFSv3.
Na odjemalcu NFS (Debian/Ubuntu):
sudo apt update sudo apt install nfs-common
Na odjemalcu NFS (CentOS/RHEL/AlmaLinux):
sudo dnf install nfs-utils
Namestitev bi se morala uspešno zaključiti. Potrebne storitve RPC in NFS so zdaj nameščene in delujejo.
2. korak: Ustvarite skupni imenik in nastavite dovoljenja NFS
Na strežniku ustvarite imenik, ki ga želite izvoziti:
sudo mkdir -p /mnt/nfs_share
Nastavite ustrezna dovoljenja NFS, da bodo odjemalci lahko dostopali do datotek. V tem vodiču bomo lastništvo dodelili namenskemu neprivilegiranemu uporabniku storitve in podelili ustrezna skupinska dovoljenja.
Debian/Ubuntu:
sudo chown nobody:nogroup /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share
CentOS/RHEL/AlmaLinux:
sudo chown nobody:nobody /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share
Ta konfiguracija ne obide lokalnega modela dovoljenj v sistemu Linux, zato nadzor dostopa NFS ni vaša edina varnostna plast. Dovoljenje 2775 varno omogoča skupinsko sodelovanje, ne da bi kršilo načelo najmanjših pravic.
3. korak: Nastavite strežnik NFS v sistemu Linux
Za določitev pravil izvoza morate na strežniku urediti datoteko /etc/exports.
Odprite datoteko:
sudo nano /etc/exports
Dodajte naslednjo vrstico, da dodelite dostop določenemu podomrežju odjemalcev (npr. <CLIENT_SUBNET>):
/mnt/nfs_share <CLIENT_SUBNET>(rw,sync,no_subtree_check,root_squash)
Strežnik bo imenik izvozil z naslednjimi možnostmi:
rw: dodeli dostop za branje in pisanje (RW). Za dostop samo za branje (RO) uporabitero.sync: zahteva, da se spremembe zapišejo na disk, preden strežnik odgovori odjemalcu.no_subtree_check: onemogoči preverjanje poddrevesa (subtree), kar izboljša zanesljivost.root_squash: izrecno preslika zahteve oddaljenega uporabnikarootv neprivilegiranega uporabnika (nobody). To je privzeto vedenje, vendar ga je zaradi revizije vedno treba navesti izrecno. Možnostno_root_squashuporabljajte samo v strogo nadzorovanih okoljih.
Več odjemalcev lahko določite tako, da v isto vrstico dodate več naslovov IP ali podomrežij, ločenih s presledki, s čimer omogočite dostop več računalnikom.
Uveljavite konfiguracijo izvoza:
Debian/Ubuntu:
sudo exportfs -a sudo systemctl restart nfs-kernel-server
CentOS/RHEL/AlmaLinux:
sudo exportfs -a sudo systemctl restart nfs-server
Strežnik zdaj aktivno izvaža imenik v omrežje.
4. korak: Nastavite požarni zid
Na strežniku morate v požarnem zidu dovoliti promet NFS, da omogočite povezave odjemalcev.
Z UFW (Debian/Ubuntu):
Pri sveži namestitvi sistema Ubuntu je UFW privzeto neaktiven. Na čistem sistemu Debian 13 morda sploh ni nameščen. Če nameravate uporabljati UFW, poskrbite, da je nameščen (sudo apt install ufw) in izrecno omogočen, preden dodate pravila:
sudo ufw enable sudo ufw allow from <CLIENT_SUBNET> to any port nfs
S Firewalld (CentOS/RHEL/AlmaLinux):
sudo firewall-cmd --permanent --zone=public --add-service=nfs sudo firewall-cmd --permanent --zone=public --add-service=rpc-bind sudo firewall-cmd --permanent --zone=public --add-service=mountd sudo firewall-cmd --reload
AlmaLinux/RHEL (SELinux): pri čisti namestitvi AlmaLinux je SELinux nastavljen na Enforcing. Za privzeto pot /mnt/nfs_share, uporabljeno v tem vodiču, je obstoječi kontekst mnt_t združljiv z demonom nfsd. Če pa nameravate izvažati nestandardne poti (npr. /srv, /data ali /home/...), NFS vanje ne bo mogel pisati, dokler ustrezno ne nastavite SELinuxa. Lahko vklopite globalno logično vrednost (sudo setsebool -P nfs_export_all_rw 1) ali pa z orodjem semanage nastavite pravilen fcontext.
Odjemalci iz dovoljenega podomrežja zdaj lahko dosežejo storitve NFS.
5. korak: Preverite izvoz z ukazom showmount
Na strežniku proaktivno preverite aktivne izvoze in notranje revizijsko stanje, da zagotovite skladnost z varnostnimi zahtevami. Zaženite naslednji ukaz in preverite natančne možnosti izvoza, ki jih uporablja demon NFS:
sudo cat /var/lib/nfs/etab
Za podroben seznam izvozov lahko uporabite tudi sudo exportfs -v.
Nato na računalniku odjemalca z ukazom showmount preverite, ali je izvoz viden prek omrežja. <SERVER_IP> zamenjajte z dejanskim naslovom IP svojega strežnika NFS.
showmount zahteva, da so na strežniku odprta vrata 111 (rpcbind). Če uporabljate čisto nastavitev NFSv4 in teh vrat niste odprli, ta korak preskočite: izvoze na strežniku preverite z ukazom sudo exportfs -v, dosegljivost z odjemalca pa preizkusite s priklopom v 6. koraku.
showmount -e <SERVER_IP>
Pričakovani izpis:
Export list for <SERVER_IP>: /mnt/nfs_share <CLIENT_SUBNET>
Če je izvoz na seznamu, je konfiguracija strežnika pravilna in dosegljiva z odjemalca.
6. korak: Priklopite datotečni sistem NFS na odjemalcu
Za uporabo souporabe morate priklopiti datotečni sistem NFS na lokalno priklopno točko na odjemalcu.
Ustvarite priklopno točko:
sudo mkdir -p /mnt/client_share
Priklopite imenik:
sudo mount -t nfs -o vers=4.2 <SERVER_IP>:/mnt/nfs_share /mnt/client_share
Souporaba je zdaj priklopljena. To lahko preverite z ukazom df -h, ki prikaže pripeti omrežni pogon. Z navedbo vers=4.2 zagotovite, da odjemalec izrecno uporabi najnovejšo različico protokola in se ne zniža tiho na NFSv3 ali NFSv4.0.
Da bo odjemalec ob zagonu samodejno priklopil datotečni sistem NFS, lahko nastavite statični priklop z dodajanjem vnosa v /etc/fstab. Upoštevajte, da gre za statični priklop; prave, dinamične konfiguracije Automount se v produkciji običajno izvedejo prek autofs (/etc/auto.master).
Odprite /etc/fstab:
sudo nano /etc/fstab
Dodajte naslednjo vrstico:
<SERVER_IP>:/mnt/nfs_share /mnt/client_share nfs auto,nofail,noatime,_netdev,hard,vers=4.2,timeo=600 0 0
S tem preprečite, da bi odjemalec blokiral postopek zagona, če je strežnik začasno nedosegljiv.
Preverjanje
Da potrdite, da so dovoljenja NFS in omrežne nastavitve pravilne, z odjemalca izvedite preizkus branja in pisanja:
touch /mnt/client_share/test_file.txt ls -l /mnt/client_share/
Pričakovani izpis:
-rw-r--r-- 1 nobody nogroup 0 May 24 12:00 test_file.txt
Glede na operacijski sistem odjemalca bo lastnik datoteke prikazan kot nobody nogroup (Debian/Ubuntu) ali nobody nobody (RHEL/AlmaLinux). To je pričakovano vedenje preslikave identitet (idmapping) v NFSv4, kadar so zahteve pravilno preslikane v neprivilegiranega uporabnika. Če opazite neujemanja, preverite, ali se parameter Domain v /etc/idmapd.conf ujema na strežniku in odjemalcu.
Če je datoteka uspešno ustvarjena, lahko vaši odjemalci komunicirajo s strežnikom in zapisujejo podatke po načrtih.
Razveljavitev sprememb
Za odklop souporabe na odjemalcu:
sudo umount /mnt/client_share
Če ste dodali vnos v /etc/fstab na odjemalcu, ga odstranite.
Če želite prenehati s souporabo imenika na strežniku, odstranite ustrezno vrstico iz /etc/exports in uveljavite spremembe:
Debian/Ubuntu:
sudo exportfs -a sudo systemctl restart nfs-kernel-server
CentOS/RHEL/AlmaLinux:
sudo exportfs -a sudo systemctl restart nfs-server
Za popolno odstranitev nameščenih paketov:
Debian/Ubuntu:
sudo apt remove nfs-kernel-server nfs-common
CentOS/RHEL/AlmaLinux:
sudo dnf remove nfs-utils
To dejanje bo na vaših računalnikih popolnoma onemogočilo delovanje NFS.
Zaključek
Uspešno ste se naučili, kako nastaviti strežnik NFS v sistemu Linux. S pravilno konfiguracijo lahko varno omogočite souporabo imenika prek NFS z več odjemalci NFS. Ta nastavitev je zanesljiva osnova za avtomatizacijo rutinskih administrativnih opravil in centralizacijo dnevnikov za proaktivne varnostne revizije.
Različica dokumenta: 1.0
Zadnja posodobitev: maj 2026
Lastnik: Ekipa za tehnično dokumentacijo