Questa guida spiega come configurare un server NFS e un client NFS su Debian 9. NFS sta per Network File System; tramite NFS, un client può accedere (leggere, scrivere) una condivisione remota su un server NFS come se fosse sul disco rigido locale. In questo tutorial, ti mostrerò due diverse esportazioni NFS, l'esportazione di una directory client che memorizza i file come utente nessuno/nogroup senza preservare i permessi del filesystem e un'esportazione della directory /var/www che conserva i permessi e la proprietà dei file, come richiesto su una configurazione del server di hosting.
1 Nota preliminare
Sto usando due sistemi Debian Wheezy qui:
- Server NFS:server.example.com, indirizzo IP:192.168.1.100
- Client NFS:client.example.com, indirizzo IP:192.168.1.101
2 Installazione di NFS
Assicurati che il server sia aggiornato aggiornando gli elenchi dei pacchetti e installa gli aggiornamenti in sospeso su entrambi i server
apt-get update
apt-get upgrade
Quindi continua con l'installazione del server e del client NFS.
server:
Sul server NFS eseguiamo:
apt-get install nfs-kernel-server nfs-common
Quindi creiamo i collegamenti di avvio del sistema per il server NFS e lo avviamo:
cliente:
Sul client possiamo installare NFS come segue (questo è in realtà lo stesso che sul server):
apt-get install nfs-common
3 Esportazione di directory sul server
server:
Vorrei rendere le directory /home/client1 e /var/www accessibili al client per mostrare le due diverse modalità di accesso del server NFS. La directory /home/client1 è condivisa in modalità standard, quindi tutti i file scritti in questa directory vengono archiviati come utente nessuno e gruppo nogruppo. Per la directory /var/www utilizzo l'opzione no_root_squash che indica al server NFS di preservare le autorizzazioni e la proprietà dei file. Questo è ad es. richiesto quando si desidera esportare la directory /var/www di un server Web gestito con ISPConfig 3
Per prima cosa creerò la directory /home/client1
mkdir /home/client1
chown nobody:nogroup /home/client1
chmod 755 /home/client1
La directory /var/www esiste molto probabilmente sul tuo server. In caso contrario, crealo:
mkdir /var/www
chown root:root /var/www
chmod 755 /var/www
Ora dobbiamo modificare /etc/exports dove "esportiamo" le nostre condivisioni NFS. Specifichiamo /home/client1 e /var/www come condivisioni NFS e diciamo a NFS di fare accessi a /home/client1 come utente nessuno (per saperne di più su /etc/exports, il suo formato e le opzioni disponibili, dai un'occhiata a
man 5 exports
)
nano /etc/exports
/home/client1 192.168.1.101(rw,sync,no_subtree_check) /var/www 192.168.1.101(rw,sync,fsid=0,crossmnt,no_subtree_check,no_root_squash)
(L'opzione no_root_squash consente di accedere a /var/www come root.)
Per applicare le modifiche in /etc/exports, riavviamo il server nfs del kernel
service nfs-kernel-server restart
4 Montaggio delle condivisioni NFS sul Cliente
cliente:
Innanzitutto, creiamo le directory in cui vogliamo montare le condivisioni NFS, ad esempio:
mkdir -p /mnt/nfs/home/client1
mkdir -p /var/www
Se la directory /var/www esiste già sul tuo server, ferma Apache, rinomina la directory e crea una nuova directory vuota come punto di montaggio
service apache2 stop
mv /var/www /var/www_bak
mkdir -p /var/www
Successivamente, possiamo montarli come segue:
mount 192.168.1.100:/home/client1 /mnt/nfs/home/client1
mount 192.168.1.100:/var/www /var/www
Ora dovresti vedere le due condivisioni NFS negli output di
df -h
[email protected]:/tmp# df -h
Filesystem Size Used Avail Use% Mounted on
udev 990M 0 990M 0% /dev
tmpfs 201M 6.0M 195M 3% /run
/dev/sda1 28G 1.2G 25G 5% /
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/1000
192.168.1.100:/home/client1 28G 1.2G 25G 5% /mnt/nfs/home/client1
192.168.1.100:/var/www 28G 1.2G 25G 5% /var/www
[email protected]:/tmp#
e
mount
[email protected]:/tmp# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1012912k,nr_inodes=253228,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204804k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9848)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=204800k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
192.168.1.100:/home/client1 on /mnt/nfs/home/client1 type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
192.168.1.100:/var/www on /var/www type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
[email protected]:/tmp#
5 Test
Sul client, ora puoi provare a creare file di test sulle condivisioni NFS:
cliente:
touch /mnt/nfs/home/client1/test.txt
touch /var/www/test.txt
Ora vai al server e controlla se riesci a vedere entrambi i file di prova:
server:
ls -l /home/client1/
[email protected]:/tmp# ls -l /home/client1/
total 0
-rw-r--r-- 1 nobody nogroup 0 Nov 16 10:52 test.txt
[email protected]:/tmp#
ls -l /var/www
[email protected]:/tmp# ls -l /var/www
total 0
-rw-r--r-- 1 root root 0 Nov 16 10:52 test.txt
[email protected]:/tmp#
(Si prega di notare le diverse proprietà dei file di test:la condivisione NFS /home/client1 ha accesso come nessuno / nogroup ed è di proprietà di nessuno / nogroup; la condivisione /var/www ottiene l'accesso come root, quindi /var/www/test .txt è di proprietà dell'utente e del gruppo root.)
6 Montaggio di condivisioni NFS all'avvio
Invece di montare manualmente le condivisioni NFS sul client, puoi modificare /etc/fstab in modo che le condivisioni NFS vengano montate automaticamente all'avvio del client.
cliente:
Apri /etc/fstab e aggiungi le seguenti righe:
nano /etc/fstab
[...] 192.168.1.100:/home/client1 /mnt/nfs/home/client1 nfs rw,sync,hard,intr 0 0 192.168.1.100:/var/www /var/www nfs rw,sync,hard,intr 0 0
Invece di rw,sync,hard,intr puoi usare diverse opzioni di montaggio. Per saperne di più sulle opzioni disponibili, dai un'occhiata a
man nfs
Per verificare se il tuo /etc/fstab modificato funziona, smonta le condivisioni ed esegui mount -a:
umount /mnt/nfs/home/client1
umount /var/www
mount -a
Ora dovresti vedere le due condivisioni NFS negli output di
df -h
[email protected]:/# df -h
Filesystem Size Used Avail Use% Mounted on
udev 990M 0 990M 0% /dev
tmpfs 201M 6.0M 195M 3% /run
/dev/sda1 28G 1.2G 25G 5% /
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/1000
192.168.1.100:/home/client1 28G 1.2G 25G 5% /mnt/nfs/home/client1
192.168.1.100:/var/www 28G 1.2G 25G 5% /var/www
[email protected]:/#
e
mount
[email protected]:/# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1012912k,nr_inodes=253228,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204804k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9848)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=204800k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
192.168.1.100:/home/client1 on /mnt/nfs/home/client1 type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
192.168.1.100:/var/www on /var/www type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
[email protected]:/#
7 crediti
Questo tutorial si basa sul tutorial Centos NFS Server di Falko Timme.
8 link
- Linux NFS:http://nfs.sourceforge.net/
- Debian:http://www.debian.org/