Bentornati in questa terza guida dedicata alla migrazione da Windows a Linux. Questa volta ci focalizzeremo principalmente sulla configurazione del demone di OpenSSH e sulla gestione delle risorse di rete tramite shell ed i relativi tool integranti nelle distribuzioni. I professionisti del mondo IT, e non, si affidano non di rado ad OpenSSH per poter accedere a file e dati collocati su altri computer.
OpenSSH è dunque uno degli strumenti principali adottati dai sistemisti, o dai developer, per lavorare anche su decine di computer diversi. Linux è la piattaforma ideale per operare con SSH, questo perché tale protocollo nasce proprio in ambito Unix-like e dunque gode di un'integrazione nativa con tali sistemi.
Installazione del server OpenSSH
Il pacchetto del demone di OpenSSH è presente nei repository di quasi tutti i sistemi Linux. Per semplicità utilizzeremo come distribuzione di riferimento Linux Mint. Dunque avviamo bash ed iniziamo la procedura di configurazione invocando il package manager APT:
sudo apt install openssh-server
Come abbiamo spiegato nel tutorial precedente, il gestore di pacchetti si occupa anche di reperire ed installare le relative dipendenze. Oltre all'applicativo stesso vengono scaricati i pacchetti correlati ovvero: ncurses-term openssh-sftp-server
ed ssh-import-id
che vanno a gestire alcune funzioni extra del server SSH.
Dopo aver terminato il setting di tali pacchetti il server viene automaticamente avviato da systemd, il gestore dei demoni utilizzato da gran parte delle distribuzioni Linux. Tuttavia, se lo preferiamo, possiamo sempre chiedere ad systemd se OpenSSH è attivo:
sudo systemctl is-enabled ssh
Come output la shell dovrebbe risponderci con "enabled" ma è possibile sincerarsi che il demone sia in esecuzione anche in questo modo:
sudo systemctl status ssh
Nel caso in cui il sistema non proceda all'auto avvio di OpenSSH possiamo avviare il processo, ed impostarlo come l'autoavvio al boot, tramite il comando:
sudo systemctl enable ssh --now
sudo systemctl start ssh
Configurazione del firewall
Ora è necessario dare il permesso al server OpenSSH di scambiare dati con i client da altri computer. Per farlo è necessario creare un regola sul firewall di Linux Mint, chiamato UFW, in modo tale che venga anche aperta la porta TCP 22, usata appunto da SSH. Dunque torniamo su bash e digitiamo:
sudo ufw allow ssh
sudo ufw allow 22/tcp
Se si ha la necessità di autorizzare l'accesso ad un determinato set di IP possiamo specificarli manualmente ad UFW:
sudo ufw allow from IPdelPCdesiderato to any port 22
Infine abilitiamo le modifiche appena immesse alle regole del firewall:
sudo ufw enable
e riavviamo il UFW per sicurezza:
sudo ufw reload
Se desideriamo prendere visione delle regole impostate possiamo interfacciarsi con UFW in questo modo:
sudo ufw status verbose
A questo punto testiamo il server OpenSSH appena configurato. Dunque apriamo una shell da un altro PC, o da un macchina virtuale, e scriviamo:
ssh nomeutente@IPdelServerSSH
In questo caso potremo effettuare il login tramite l'uso delle classiche credenziali, nome utente e password, tuttavia tale configurazione non è di certo la più comoda quando è necessario connettersi a decine di computer diversi. Ecco perché consigliamo di utilizzare l'autenticazione tramite una SSH Public Key.
Autenticazione con SSH Public Key
Il principale vantaggio dell'uso di tale metodologia di autenticazione è la possibilità di eseguire il login senza password. Per generare la public key, da distribuire ai vari client che desideriamo autorizzare, basta immettere tale comando su bash:
ssh-keygen -t rsa
A questo punto tramite scp
possiamo copiare la chiave appena generata su di un PC remoto:
scp ~/.ssh/id_rsa.pub nomeutente@IPdelclient:~/.ssh/authorized_keys
È possibile anche sfruttare la funzione integrata in OpenSSH chiamata ssh-copy-id
:
ssh-copy-id nomeutente@IPdelclient
ssh-copy-id -i ~/.ssh/id_rsa.pub nomeutente@IPdelclient
Possiamo verificare manualmente se la copia è avvenuta correttamente tramite cat
:
cat ~/.ssh/id_rsa.pub
Dovremmo infatti ricevere un output simile al seguente:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAfawAABAQCyVGaw1PuEl98f4/7Kq3O9ZIvDwwaf2OFOSXAFVqilSFNkgawaewafwaghaHlefm1iMt iltuohostname@hostname
Ora l'utente potrà connettersi al server SSH senza dover digitare la password. È possibile anche disabilitare completamente il login tramite password andando a modificare il paramento chiamato "PasswordAuthentication
" in "No". Tale configurazione si trova nel file sshd_config
nella directory /etc/ssh
. Per operare questa modifica possiamo sfruttare ad esempio il pratico editor di testo da shell nano:
sudo nano /etc/ssh/sshd_config
Per salvare le modifiche ed uscire dal documento usiamo la combinazione di tasti CTRL+O e CTRL+X
Configurazione server Samba
Per eseguire lo condivisione di una o più directory tra più computer nella medesima rete LAN è possibile realizzare un server Samba. Quindi torniamo nel terminale e digitiamo:
sudo apt install samba wsdd avahi-daemon
A questo punto andiamo a realizzare una nuova directory dove collare i file da condividere e diamo i permessi di lettura/scrittura all'utente:
sudo mkdir -p /home/CartellaCondivisa
sudo chmod 777 /home/CartellaCondivisa
Ora è il momento di modificare il file di configurazione di Samba in modo tale da impostare tale cartella come posizione di riferimento per le operazioni di sharing:
sudo nano /etc/samba/smb.conf
Nel dettaglio bisogna modificare il parametro chiamato "patch=
" includendo la posizione della directory:
patch= /home/CartellaCondivisa
Inoltre assicuriamoci che le opzioni "writable", "guest" e "guest only" siano impostati su "yes".
Infine sinceriamoci che il firewall permetta a Samba di operare e di condividere i file:
sudo ufw allow samba
Configurare il Secure Samba Share
Se preferiamo consentire l'accesso al nostro serve Samba solo a determinati utenti dobbiamo implementare una configurazione particolare. Assegniamo prima di tutto la proprietà della directory appena creata al sambashare group:
sudo chgrp sambashare /home/CartellaCondivisa
Adesso generiamo un utente per samba (può essere identico a quello usato nel sistema) e la relativa password:
sudo useradd -M -d /home/share/NomeUtente -s /usr/sbin/nologin -G sambashare NomeUtente
sudo mkdir /home/CartellaCondivisa/NomeUtente
sudo chown NomeUtente:sambashare /home/CartellaCondivisa/NomeUtente
sudo chmod 2770 /home/CartellaCondivisa/NomeUtente
sudo smbpasswd -a NomeUtente
sudo smbpasswd -e NomeUtente
Ora è possibile generare un utente amministratore del server Samba e creare la tua directory dedicata:
sudo useradd -M -d /home/share/smbadmin -s /usr/sbin/nologin -G sambashare smbadmin
sudo mkdir /home/share/smbadmin sudo smbpasswd -a smbadmin
sudo smbpasswd -e smbadmin
sudo chown smbadmin:sambashare /home/share/smbadmin
sudo chmod 2770 /home/share/smbadmin
Ora torniamo nel file di configurazione di Samba:
sudo nano /etc/samba/smb.conf
ed aggiungiamo il parametro:
valird user = @smbadmin @sambashar
alla fine del documento. Infine riavviamo il server per confermare tutte le modifiche eseguite:
sudo systemctl restart smbd nmbd
Configurazione dei client Samba
Se invece desideriamo configurare semplicemente il client samba dobbiamo assicurarci di aver installato tali pacchetti:
sudo apt install samba-client cifs-utils
Proviamo quindi a connetterci alla directory condivisa:
smbclient //IPdelserverSamba/CartellaCondivisa -U NomeUtente
Se preferiamo avere la cartella condivisa sempre disponibile nel file manager è necessario sfruttare cifs
ed impostare tale regola nel file di configurazione di samba oltre che in fstab
:
sudo mkdir -p /mounts/shares
sudo mount -t cifs -o username=NomeUtente //IPdelserver/nomeutente ~/mounts/shares
Ora apriamo il file fstab
:
sudo nano /etc/fstab
ed aggiungiamo la seguente riga alla fine del documento:
//IPdelserver Samba/nomeutente /mnt/shares cifs credentials=/.sambacreds 0 0
Adesso configuriamo il client samba per l'automount, quindi apriamo il file di configurazione:
sudo nano/.sambacreds
ed aggiungiamo questi parametri:
username: nomeutente
password: lapassworddelserversamba
domain: WORKGROUP
Quindi controlliamo se tutti è andato a buon fine:
sudo mkdir -p /mnt/shares
sudo mount -a
df -hT | grep cifs
Dopo l'ultimo comando dovremmo ottenere un output simile a questo:
//ipdelserver/nomeutente cifs 40G 24G 14G 90% /mnt/shares