User Tools

Site Tools


doc:appunti:linux:tux:netdev

Montare un network filesystem

Con Debian Lenny per montare automaticamente al boot un filesystem nfs o smbfs bisogna usare l'opzione _netdev in /etc/fstab:

# <file system>     <mount point>     <type>  <options>                                        <dump>  <pass>
//WINSRV/Directory  /media/directory  smbfs   _netdev,credentials=/etc/smbfs/winsrv_directory  0       0

Ci pensa lo script /etc/network/if-up.d/mountnfs a fare il mount dopo che le interfacce di rete sono attive.

Smbfs, cifs, uid e gid

Se da un client Linux si monta con smbmount un filesystem Samba, molto probabilmente vengono utilizzate le CIFS Unix Extensions. Questo significa che gli UID e i GID del filesystem vengono ereditati dal server al client.

Tale comportamento non è desiderabile se il database utenti non coincide tra server e client. Purtroppo in questo caso le opzioni uid e gid di smbmount non funzionano.

Si devono disabilitare le Unix Extensions nel client eseguendo

echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled

Per rendere resitente al reboot questa opzione si può aggiungere questo in /etc/modprobe.d/local:

# Disable CIFS Unix Extensions after loading cifs module. 
install cifs \
    /sbin/modprobe --ignore-install cifs $CMDLINE_OPTS; \
    echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled

In alternativa si disabilitano le Unix Extensions dal server, configurando /etc/samba/smb.conf il parametro

unix extensions = no

In questo modo è possibile controllare proprietario e permessi dei file montati via smbfs con una entry simile in /etc/fstab:

//linux/Public  /media/pub  smbfs  _netdev,credentials=/etc/smbfs/credentials,uid=1000,gid=1000,file_mode=0644,dir_mode=0755  0 0

Problema filesystem NFS non montato

In una Debian Lenny il montaggio di uno share NFS è comandato da /etc/network/if-up.d/mountnfs, questo script utilizza come meccanismo di lock la directory /var/run/network/mountnfs. Se la directory non viene rimossa correttamente il montaggio NFS fallisce ad ogni reboot.

Si suggerisce di modificare /lib/init/bootclean.sh aggiungendo la seguente riga alla funzione clean_run():

test -d /var/run/network/mountnfs && rm -rf /var/run/network/mountnfs

Ovviamente conviene mettere on-hold il pacchetto initscripts:

echo initscripts hold | dpkg --set-selections

Vedere il bug 482176.

Montare un volume CIFS da utente

ATTENZIONE :!: a partire da Debian Squeeze l'eseguibile mount.cifs non è più installato setuid, perché tale pratica è fortemente sconsigliata dagli autori. Quindi il montaggio da parte dell'utente non privilegiato non funziona. Probabilmente il sistema giusto è usare smbnetfs.

Se si vuole consentire ad un utente non privilegiato di montare uno share CIFS, si può aggiungere una riga del genere in /etc/fstab:

//192.168.2.35/share  /media/share  cifs _netdev,noauto,user,user=cifsuser,uid=1000,gid=1000  0 0

L'opzione noauto evita che il filesystem sia montato automaticamente al boot.

Al momento del mount, all'utente verrà chiesta la password dell'account CIFS (cifsuser nell'esempio). Le opzioni uid e gid forzano proprietario e gruppo di tutti gli oggetti presenti nel filesystem montato, non sono obbligatorie.

ATTENZIONE: il punto di montaggio deve appartenere all'utente che effettua il mount, altrimenti si ottiene un errore:

$ mount /media/share
mount error: permission denied or not superuser and mount.cifs not installed SUID

Usare smbnetfs da utente

ATTENZIONE :!: Il metodo gvfs (vedi avanti) è supportato da praticamente tutti gli ambienti desktop, supporta svariati protocolli oltre a SMB/CIFS e può essere usato anche da riga di comando.

Il pacchetto smbnetfs consente ad un utente non privilegiato di navigare nelle condivisioni SMB/NMB (Windows) semplicemente navigando in una directory (mounting point). Viene utilizzato fuse per consentire il montaggio in user space, l'utente deve quindi appartenere al gruppo fuse.

Si devono fornire tre file di configurazione in $HOME/.smb/:

  • smb.conf
  • smbnetfs.conf
  • smbnetfs.auth

Il primo si copia da /etc/samba/smb.conf, il secondo da /etc/smbnetfs.conf, nel terzo mettiamo le credenziali per accedere agli share (proteggerlo con chmod 0600, oppure tenerlo in un filesystem criptato):

auth [computer[/share]] [domain_or_workgroup/]user password

Quindi si crea un punto di montaggio e si esegue il programma:

mkdir ~/media/smb
smbnetfs ~/media/smb

Per usare uno share è sufficiente cambiare directory:

cd ~/media/smb/HOST/SHARE

Per smontare il filesystem si usa fusermount:

fusermount -u ~/media/smb

Usare gvfs da utente

Installare i pacchetti gvfs, gvfs-backends, gvfs-fuse e gvfs-bin.

L'utente deve appartenere al gruppo fuse. L'ambiente desktop esegue automaticamente gvfs-fuse-daemon oppure lo si lancia manualmente:

/usr/lib/gvfs/gvfs-fuse-daemon ~/.gvfs

Con il file manager (Nautilus, Thunar, ecc.) si può aprire la risorsa smb://username@host/share/. Oppure si può eseguire il montaggio da riga di comando con gvfs-mount:

gvfs-mount smb://username@host/share/

Il punto di montaggio sarà qualcosa del tipo $HOME/.gvfs/share on host. Per smontare il device:

gvfs-mount -u smb://username@host/share/

Per smontare il virtual filesystem gvfs:

fusermount -u ~/.gvfs

Debian 10 Buster

Con Debian 10 il comando gvfs-fuse-daemon è sostituito da gvfsd-fuse e il punto di montaggio è sotto /run/user/UID/gvfs/:

/usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes

La nuova sintassi per fare il mount è:

gio mount smb://username@host/share/
doc/appunti/linux/tux/netdev.txt · Last modified: 2021/09/14 16:55 by niccolo