Linux: mappare le unità di rete in Ubuntu
Come montare le unità di rete in modo che appartengano al file system locale
Questa è la versione aggiornata al febbraio 2020 del mio articolo apparso nella vecchia edizione del mio blog. Si basa su Ubuntu 19.10.
Tutte le maggiori distribuzioni Linux mettono a disposizione strumenti semplici per accedere alle unità di rete, anche quelle che sono raggiungibili mediante il protocollo SMB (Server Message Block), cioè quello usato da Windows. Il protocollo SMB e le sue tante versioni sono diventati gli standard di fatto per gli ambienti misti, in cui cioè convivono computer che usano sistemi operativi diversi.
È normale che le unità di rete condivise siano raggiungibili mediante i protocolli SMB, poiché questi protocolli sono disponibili per tutte le piattaforme grazie soprattutto a Samba, un progetto aperto solido e diffusissimo.
Perciò, in ambienti misti è d’uso condividere le risorse (di solito su un server o su un NAS) mediante SMB e accedere ad esse dai client di qualunque tipo: se si tratta di computer Windows, l’accesso “rimane in famiglia” poiché il protocollo è nativo, mentre con Linux o OS X si usa Samba.
Questa guida ti aiuterà a
- comprendere perché è conveniente mappare le unità di rete
- sapere quali sono i pacchetti necessari per mappare le unità di rete
- modificare il file /etc/sudoers per abilitare gli utenti al montaggio delle unità remote senza richiesta di password
- costruire uno script per montare e mappare le unità di rete con una configurazione diversa per ogni utente
- montare e mappare automaticamente le unità di rete ad ogni login.
Questa guida non ti aiuterà invece nel documentarti né su Samba né su SMB. Se sei digiuno di questi argomenti, torno a consigliarti Wikipedia per avere le informazioni essenziali, sia su Samba sia su SMB.
Perché mappare le unità di rete?
Per renderti conto immediatamente di quale sia il grande vantaggio del mappare le unità di rete, fai una piccola prova: apri Writer, crea un nuovo documento e cerca di salvarlo su un’unità di rete (che deve essere stata condivisa in precedenza).
Non ci riesci: benché la finestra di file di LibreOffice consenta di esplorare la rete, non è possibile salvare il documento direttamente in una cartella remota. Oltretutto, l'errore che viene visualizzato è abbastanza criptico se non sei un tecnico.
A prima vista, la soluzione potrebbe sembrare semplice: prima monti l’unità di rete e poi salvi in essa il documento. Per montare un'unità di rete devi:
- avviare Nautilus (cliccando sul lanciatore File)
- cliccare su Altre posizioni
- sfogliare l'unità remota fino a individuare la condivisione che ti interessa
- inserire il nome utente e la password per accedere alla condivisione.
Devi poi salvare il file nella cartella desiderata.
In effetti, un’unità di rete montata mediante tale procedura di Ubuntu appare nell’elenco delle risorse della finestra di file di LibreOffice.
A differenza del passato, oggi Ubuntu è in grado di memorizzare un documento su un’unità remota dall’interno di una finestra di file di un’applicazione, ma occorre che l’unità remota sia già montata.
Questo è un limite che può diventare irritante, soprattutto se le unità di rete sono molte e c’è la necessità di accedere spesso ad esse dalle finestre di file delle applicazioni. Non va infatti dimenticato che l’impossibilità dell’accesso esiste non solo in scrittura ma anche in lettura.
Un altro motivo per cui ritengo che sia conveniente mappare le unità di rete è che il percorso viene visto come se le cartelle remote facessero parte del file system locale e che perciò è facile usare tale percorso in tutte le situazioni, senza dover trafficare con server e protocolli.
La sottostante mostra proprio il contenuto di un’unità di rete mappata: nota che la posizione della cartella è espressa nella consueta forma di un percorso locale.
Infine, la mappatura delle unità di rete permette di montare automaticamente le cartelle remote non all’avvio del computer ma al login dell’utente, facendo così in modo che per ogni utente possano essere configurate risorse specifiche che appaiono locali pur essendo remote.
Ogni utente, quando monta tali risorse ne risulta il proprietario ed ha perciò diritto di vita e di morte sui file in esse contenuti: esattamente come se operasse in locale, con l’unica differenza che non ha potere sui permessi perché questi sono stati impostati nello script per il montaggio delle unità.
Pacchetti necessari per montare condivisioni Windows
Per montare le condivisioni Windows come unità di rete hai in particolare bisogno di due pacchetti:
- smbclient (verificare se funziona lo stesso con libsmbclient)
- cifs-utils.
Il primo dovrebbe essere già installato, il secondo di solito non lo è.
Vedo che nelle ultime versioni di Ubuntu è installato il pacchetto libsmbclient al posto di smbclient. Si tratta di una libreria che permette il trattamento di risorse di rete CIFS/SMB da parte dei browser e dei file manager. Sembra che con libsmbclient funzioni tutto, ma puoi sempre installare smbclient se dovessi avere probemi. In caso di malfunzionamenti, ti prego di segnalarmeli mediante i commenti. Grazie!
Per installare cifs-utils puoi usare Ubuntu Software. Se preferisci il Terminale, puoi usare la comune sintassi
sudo apt install cifs-utils
Nota che ora non è più necessario specificare apt-get ma basta apt.
Modifica del sudoers
Come vedrai più avanti, per mappare le unità di rete Windows si farà uso del comando mount. Questo comando è riservato al superutente.
Per far sì che lo possa usare anche un utente normale bisogna dichiararlo esplicitamente nel file /etc/sudoers.
Tecnicamente, i sudoers sono gli utenti che sono abilitati a usare il comando sudo ed agire così come superutente (o root). Di norma, solo gli amministratori possono usare il comando sudo, perciò è necessario specificare nel file sudoers gli utenti normali che possono agire come superutenti su determinati comandi e, ovviamente, indicare questi comandi.
In aggiunta, nel file sudoers si può specificare che quando un determinato utente impartisce un determinato comando, non debba essere richiesta la password. Ciò è importante se il comando viene impartito mediante uno script e non in modalità interattiva. Il parametro NOPASSWD viene indicato proprio per evitare la richiesta della password.
In questo esempio, gli utenti sono tre:
- claudio, utente normale
- luisa, utente normale
- amministatore, che ha i privilegi di amministratore.
Per la gestione delle condivisioni vengono specificati due file:
- /bin/mount, che permette di montare le condivisioni
- /bin/umount, che permette di smontare le condivisioni.
Il file /etc/sudoers può essere modificato solo come superutente ed è conveniente agire da Terminale. Impartisci perciò il comando
sudo nano /etc/sudoers
e modifica il file secondo le tue esigenze. Per salvarlo usa la combinazione Ctrl+O e per uscire Ctrl+X.
Le sezioni del file sudoers che devono essere modificate per ottenere il risultato desiderato sono User privilege specification e Members of the admin group may gain root privileges , come negli esempi seguenti.
# User privilege specification
root ALL=(ALL:ALL) ALL
claudio ALL=(ALL) NOPASSWD: /bin/mount
claudio ALL=(ALL) NOPASSWD: /bin/umount
luisa ALL=(ALL) NOPASSWD: /bin/mount
luisa ALL=(ALL) NOPASSWD: /bin/umount
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
amministratore ALL = NOPASSWD: /bin/mount
amministratore ALL = NOPASSWD: /bin/umount
Ovviamente devi sostituire i nomi degli utenti con quelli adatti al tuo caso.
Script per montare e smontare le cartelle remote
Per montare le cartelle remote è conveniente costruire uno script, in modo da non dover digitare tutto il comando ogni volta.
Il comando generico è
sudo mount -t cifs //Server/Condivisione PuntoDiMount -o user=NomeUtente,pass=PasswordUtente,rw,uid=NomeUtente
Il comando precedente è uno solo, anche se visivamente può apparire su più righe.
Per evitare errori, ti conviene copiarlo e incollarlo nel Terminale (CTRL+MAIUSC+V).
Di seguito riporto la spiegazione dei parametri in corsivo.
- Server/Condivisione: il nome o l’indirizzo IP del server e il nome della condivisione (così come è stata impostata in Samba o in Windows). Per esempio, per montare la condivisione Archivio sul server con IP 192.168.3.86 il parametro è 192.168.3.86/Archivio.
- PuntoDiMount: il punto del file system locale in cui montare la condivisione. Per esempio, per montare la condivisione nella cartella Documenti della home dell’utente claudio, il parametro è /home/claudio/Documenti/Archivio. Nota che la cartella Archivio deve essere già stata creata nel file system.
- NomeUtente: il nome breve dell’utente. Per esempio, per montare la condivisione accedendo ad essa come utente claudio, il parametro è user=claudio.
- PasswordUtente: la password dell’utente indicato nel parametro precedente. Per esempio, se la password di claudio è VivaTux, il parametro è pass=VivaTux.
- NomeUtente: il nome dell'utente che diventerà proprietario di tutti i file e di tutte le cartelle che verranno montate se il server non fornisce indicazioni sui proprietari. Nella mia configurazione (ma non è detto che debba essere così per tutti), chi monta le condivisioni ha pieni poteri sui file. Per esempio, se l'utente è claudio il parametro è uid=claudio.
Ipotizzando che l’utente claudio voglia montare le condivisioni remote Archivio e Articoli, montandole in omonime sottocartelle della propria cartella Documenti, lo script potrebbe essere quello seguente.
#! /bin/bash
sudo mount -t cifs //192.168.3.86/Archivio /home/claudio/Documenti/Archivio -o user=claudio,pass=VivaTux,rw,uid=claudio
sudo mount -t cifs //192.168.3.86/Articoli /home/claudio/Documenti/Articoli -o user=claudio,pass=VivaTux,rw,uid=claudio
Questo script può essere eseguito al bisogno o, come descritto più avanti, può essere inserito tra le applicazioni eseguite automaticamente al login.
Nella figura sottostante puoi osservare un esempio di unità di rete mappate come cartelle locali.
Nella home dell’utente è stata creata una cartella Rete, che contiene le due sottocartelle Popolo e Bugigattolo (i nomi dei due server nella LAN); in ognuna delle due sottocartelle sono state create altre sottocartelle con i nomi delle condivisioni remote. Ogni condivisione remota usa come punto di mount la cartella locale con il proprio nome.
Per smontare le condivisioni, è sufficiente uno script con un comando generico, come quello seguente.
#!/bin/bash
sudo umount -a -t cifs
Se vuoi solo fare il logout per accedere come nuovo utente, ti conviene configurare uno script che smonti le condivisioni e faccia poi il logout: talvolta Ubuntu non riesce a smontare correttamente le condivisioni CIFS. Ti consiglio perciò di fare qualche prova, soprattutto se la connessione è senza fili: se il logout avviene correttamente e le condivisioni sono smontate, usa pure la procedura normale di Ubuntu. Se ti accorgi che il logout non funziona o che le condivisioni non vengono smontate (te ne accorgi se, accedendo come altro utente, le condivisioni dell’utente precedente sono ancora attive), allora usa lo script seguente per il logout.
#!/bin/bash
# Logout.sh
sudo umount -a -t cifs
gnome-session-quit --logout
Montaggio automatico delle cartelle remote al login
Per far sì che le cartelle remote siano montate automaticamente al login dell’utente, la procedura è molto semplice.
Innanzi tutto, per ogni utente crea uno script per il montaggio delle condivisioni, specificando i punti di mount all’interno della home.
Salva tutti gli script in una cartella del file system. Poiché gli script contengono il nome utente e la password è opportuno inserirli in una cartella sufficientemente protetta contro curiosità indebite: /sbin potrebbe essere una buona scelta.
Per inserire i file in /sbin devi operare come superutente.
Ricordati che i file devono avere il permesso di esecuzione attivo. Per assegnare il permesso di esecuzione, impartisci il comando
sudo chmod +x NomeFile
operando come superutente. Sostituisci NomeFile con il nome effettivo del file.
Poi, per ogni utente, apri la Dash e avvia Applicazioni d’avvio, poi compi i passi seguenti.
- Nella finestra Preferenze delle applicazioni d'avvio fai clic su Aggiungi.
- Nella finestra Aggiunta programma d’avvio (che diventa Modifica programma d'avvio quando modifichi un'applicazione già impostata), inserisci nella casella Comando il nome dello script che hai creato, completo del percorso. Se ti è comodo, usa il pulsante Esplora per sfogliare le cartelle del disco.
- Assegna un nome e un commento al programma, come nell’esempio della figura precedente.
- Fai clic su Aggiungi. Ora la finestra Preferenze delle applicazioni d'avvio riporta come applicazione d’avvio lo script indicato.
Adesso puoi chiudere tutto, riavviare e goderti la tua impostazione del sistema.
Il sistema dei commenti è di CComment