Linux: mappare le unità di rete in Ubuntu

Come montare le unità di rete in modo che appartengano al file system locale

 

Cavo Ethernet infilato in una presa, visto di profilo. Sullo sfondo, un occhio di donna

Nota!

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

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.

Messaggio d'errore "Impossibile leggere il contenuto di Condivisa - Non è una directory". Nella barra del percorso si legge il nome della condivisione di rete

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:

  1. avviare Nautilus (cliccando sul lanciatore File)
  2. cliccare su Altre posizioni
  3. sfogliare l'unità remota fino a individuare la condivisione che ti interessa
  4. 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.

Nel pannello sinistro della finestra del file manager Nautilus compare l'unità di rete Condivisa, con il simbolo che indica che è montata

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.

Finestra del file manager Nautilus: la cartella di rete condivisa viene interpretata come cartella locale, poiché è mappata

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 è.

libsmbclient anziché smbclient!

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

È una riga sola!

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.

Finestra del file manager Nautilus che mostra una sottocartella di una condivisione di rete mappata come unità locale

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.

A sinistra, l'accessorio con l'elenco delle applicazioni avviate automaticamente; a destra, i parametri di una applicazione (nome, comando e commento)

  1. Nella finestra Preferenze delle applicazioni d'avvio fai clic su Aggiungi.
  2. 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.
  3. Assegna un nome e un commento al programma, come nell’esempio della figura precedente.
  4. 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

Questo è il sito web personale di Claudio Romeo

Codice fiscale: RMOPQL63E17F205B

Puoi usare liberamente le informazioni qui riportate, ma solo se citi la fonte
Il copia e incolla non è invece permesso: se hai dubbi, scrivimi.