È essenziale per un amministratore essere in grado di connettersi ad un computer remoto. I server, confinati nella propria stanza, sono raramente dotati di tastiere e monitor permanenti, ma sono connessi alla rete.
9.2.1. Accesso remoto sicuro: SSH
Il protocollo SSH (Secure SHell) è stato progettato tenendo a mente sicurezza ed affidabilità. Le connessioni con SSH sono sicure: il partner è autenticato e tutti gli scambi di dati sono cifrati.
SSH offre anche due servizi di trasferimento di file. scp
è uno strumento a riga di comando che può essere utilizzato come cp
, tranne che qualsiasi percorso a un altro computer è fatto precedere dal nome della macchina, seguito da due punti («:»).
$
file macchina scp:/tmp/
sftp
è un comando interattivo, simile a ftp
. In una singola sessione, sftp
è in grado di trasferire più file, ed è possibile usarlo per manipolare i file remoti (eliminare, rinominare, modificare i permessi, ecc.).
Debian utilizza OpenSSH, una versione libera di SSH, mantenuta dal progetto OpenBSD
(un sistema operativo libero basato sul kernel BSD, incentrato sulla sicurezza) e fork del software originale SSH sviluppato dalla società finlandese SSH Communications Security Corp. Questa società ha inizialmente sviluppato SSH come software libero, ma alla fine ha deciso di continuare il suo sviluppo sotto una licenza proprietaria. Il progetto OpenBSD quindi ha creato OpenSSH per mantenere una versione free di SSH.
OpenSSH is split into two packages: the client part is in the openssh-client package, and the server is in the openssh-server package. The ssh meta-package depends on both parts and facilitates installation of both (apt install ssh
), while the task-ssh-server, often chosen during the initial installation, depends on the server package only.
9.2.1.1. Autenticazione basata su chiave
Ogni volta che qualcuno si collega tramite SSH il server remoto richiede una password per autenticare l'utente. Questo può essere problematico se si vuole automatizzare una connessione, o se si utilizza uno strumento che richiede collegamenti frequenti su SSH. È per questo che SSH offre un sistema di autenticazione basato su chiave.
The user generates a key pair on the client machine with ssh-keygen -t rsa
; the so generated public key is stored in ~/.ssh/id_rsa.pub
, while the corresponding private key is stored in ~/.ssh/id_rsa
. The user can then use ssh-copy-id server
to add their public key to the ~/.ssh/authorized_keys
file on the server, or, if SSH access hasn't been enabled yet, they have to ask the administrator to add their key manually.
If the private key was not protected with a “passphrase” at the time of its creation, all subsequent logins on the server will work without a password. Otherwise, the private key must be decrypted each time by entering the passphrase. Fortunately, ssh-agent
allows us to keep private keys in memory to not have to regularly re-enter the password. For this, you simply use ssh-add
(once per work session) provided that the session is already associated with a functional instance of ssh-agent
. Debian activates it by default in graphical sessions, but this can be deactivated by changing /etc/X11/Xsession.options
and commenting out use-ssh-agent
. For a console session, you can manually start the agent with eval $(ssh-agent)
.
9.2.1.2. Cert-Based Authentication
SSH keys cannot just be protected by a password (or not). An often unknown feature is that they can also be signed via certificate, both the host as well as the client keys. This approach comes with several advantages. Instead of maintaining an
authorized_keys
file per user as described in the previous section, the SSH server can be configured to trust all client keys signed by the same certificate (see also
Sezione 10.2.2, «Infrastruttura a chiave pubblica: easy-rsa») by using the
TrustedUserCAKeys
and
HostCertificate
directives in
/etc/ssh/sshd_config
.
TrustedUserCAKeys /etc/ssh/ssh_users_ca.pub
HostKey /etc/ssh/ssh_host_ecdsa_key
HostCertificate /etc/ssh/ssh_host_ecdsa_key-cert.pub
Vice-versa the clients can also be configured to trust the host key signed by the same authority, making it easier to maintain the known_hosts
file (even system wide via /etc/ssh/known_hosts
).
@cert-authority *.falcot.com ssh-rsa AAAA[..]
Both, public key and certificate authentication, can be used alongside each other.
9.2.1.3. Utilizzo di applicazioni X11 remote
Il protocollo SSH consente la trasmissione dei dati grafici (sessione «X11», dal nome del più diffuso sistema grafico in Unix), il server mantiene un canale dedicato per tali dati. In particolare, un programma grafico eseguito da remoto può essere visualizzato sul server X.org dello schermo locale e l'intera sessione (ingresso e visualizzazione) sarà sicura. Poiché questa funzionalità consente alle applicazioni remote di interferire con il sistema locale, è disabilitata in modo predefinito. È possibile abilitare questa funzionalità specificando X11Forwarding yes
nel file di configurazione del server (/etc/ssh/sshd_config
). Infine, l'utente deve anche richiederla aggiungendo l'opzione -X
alla riga di comando di ssh
.
9.2.1.4. Creazione di tunnel cifrati con il port forwarding
Le opzioni
-R
e
-L
consentono a
ssh
di creare «tunnel cifrati» tra due macchine, inoltrando in modo sicuro una porta TCP locale (vedere il riquadro
FONDAMENTALI TCP/UDP) ad un computer remoto o viceversa.
ssh -L 8000:server:25 intermediario
stabilisce una sessione SSH con l'host
intermediario e ascolta sulla porta locale 8000 (vedere
Figura 9.3, «Inoltro di una porta locale con SSH»). Per ogni connessione stabilita su questa porta,
ssh
avvierà una connessione dal computer
intermediario alla porta 25 sul
server legando insieme entrambe le connessioni.
Anche
ssh -R 8000:server:25 intermediario
stabilisce una sessione SSH al computer
intermediario, ma è in questa macchina che
ssh
è in ascolto sulla porta 8000 (vedere
Figura 9.4, «Inoltro di una porta remota con SSH»). Ogni connessione stabilita sulla porta farà sì che
ssh
aprirà una connessione dalla macchina locale alla porta 25 del
server legando insieme entrambe le connessioni.
In entrambi i casi, le connessioni sono realizzate sulla porta 25 dell'host server, e passano attraverso il tunnel SSH stabilito tra la macchina locale e la macchina intermediario. Nel primo caso, l'ingresso del tunnel è locale sulla porta 8000, ed i dati si muovono verso la macchina intermediario prima di essere diretti al server sulla rete «pubblica». Nel secondo caso, l'ingresso e l'uscita del tunnel sono invertiti, l'ingresso è la porta 8000 sulla macchina intermediario, l'uscita è sulla macchina locale, ed i dati vengono poi indirizzati al server. In pratica, il server è di solito o la macchina locale o l'intermediario. In questo modo SSH rende sicura la connessione da un'estremità all'altra.
9.2.2. Utilizzo di desktop remoti grafici
VNC (Virtual Network Computing) permette l'accesso remoto a desktop grafici.
Questo strumento è usato soprattutto per l'assistenza tecnica; l'amministratore può visualizzare gli errori che l'utente si trova ad affrontare, e mostrargli la cosa corretta da fare, senza dover essere fisicamente presente.
First, the user must authorize sharing their session. The GNOME graphical desktop environment includes that option via → (contrary to previous versions of Debian, where the user had to install and run vino
). For this to work network-manager must be managing the network used (e.g. enable the managed
mode for devices handled by ifupdown in /etc/NetworkManager/NetworkManager.conf
). KDE Plasma still requires using krfb
to allow sharing an existing session over VNC. For other graphical desktop environments, the x11vnc
or tightvncserver
commands (from the Debian packages of the same name) or tigervncserver
(tigervnc-standalone-server) serve the same purpose and provide the vnc-server virtual package; you can make either of them available to the user with an explicit menu or desktop entry.
When the graphical session is made available by VNC, the administrator must connect to it with a VNC client. GNOME has vinagre
and remmina
for that, while the KDE project provides krdc
(in the menu at → → ). There are other VNC clients that use the command line, such as xtightvncviewer
from the homonym package or xtigervncviewer
from the tigervnc-viewer Debian package. Once connected, the administrator can see what is going on, work on the machine remotely, and show the user how to proceed.