[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
LSH (1) è un sistema di comunicazione cifrata che consente di sostituirsi alle funzionalità di una shell remota, quale rsh. Il suo sviluppo è nato dalla necessità di realizzare qualcosa di simile e compatibile con il protocollo di Secure Shell (capitolo 202), ovvero quello che qui viene chiamato protocollo SECSH, secondo lo spirito del software libero, anche alla luce della sua standardizzazione attraverso il lavoro di IETF SECSH Working Group, <http://www.ietf.org/html.charters/secsh-charter.html>.
LSH si compone principalmente di quattro eseguibili essenziali: lshd, il demone che offre il servizio; lsh (oppure lshc), il programma cliente; lsh-keygen e lsh-writekey, per generare e memorizzare le chiavi pubbliche e private.
Attualmente, LSH non prevede file di configurazione, per cui i programmi ricevono le opzioni di funzionamento esclusivamente attraverso la riga di comando.
Perché sia possibile attivare il servizio per ricevere connessioni secondo il protocollo SECSH, è necessario avviare il demone lshd, il quale però richiede una coppia di chiavi, privata e pubblica, che deve essere realizzata preventivamente attraverso lsh-keygen e lsh-writekey.
Supponendo di volere collocare i file della coppia di chiavi pubblica e privata nella directory /etc/lsh/
, si può agire come si vede nell'esempio seguente. In seguito verrà chiarito il significato delle opzioni usate.
#
lsh-keygen -l 8 | lsh-writekey /etc/lsh/lsh_host_key
In questo modo, usando una pipeline, si crea la coppia di file /etc/lsh/lsh_host_key
e /etc/lsh/lsh_host_key.pub
. Il primo dei due contiene la chiave privata, mentre il secondo contiene la chiave pubblica. Dato lo scopo, la chiave privata non è protetta da una parola d'ordine, dal momento che il servizio deve essere reso automaticamente. Naturalmente, il file della chiave privata deve avere soltanto i permessi indispensabili per permettere a lshd di accedervi.
Per avviare lshd, in qualità di demone, utilizzando la coppia di chiavi appena creata, si potrebbe usare il comando seguente:
#
lshd --daemonic -h /etc/lsh/lsh_host_key
In questo modo, lshd si disimpegna dalla shell e si mette a funzionare sullo sfondo (l'opzione --daemonic), utilizzando la coppia di chiavi contenuta nei file /etc/lsh/lsh_host_key
e /etc/lsh/lsh_host_key.pub
, utilizzando la porta predefinita per le connessioni con questo tipo di protocollo.
A titolo di esempio, viene anche mostrato in che modo potrebbe essere organizzato uno script elementare per il controllo del servizio LSH, attraverso la procedura di inizializzazione del sistema.
#!/bin/sh test -f /usr/sbin/lshd || exit 0 case "$1" in start) echo -n "Avvio del servizio LSH: " /usr/sbin/lshd --daemonic -h /etc/lsh/lsh_host_key echo ;; stop) echo -n "Disattivazione del servizio LSH: " killall lshd echo ;; *) echo "Utilizzo: lshd {start|stop}" exit 1 esac |
lsh-keygen e lsh-writekey, utilizzati come si vede nello schema sintattico seguente, permettono di generare e memorizzare una coppia di chiavi (privata e pubblica). Il nome del file fornito come argomento di lsh-writekey è quello della chiave privata, intendendo che la chiave pubblica abbia in più l'estensione .pub
.
lsh-keygen [opzioni] | lsh-writekey file_chiave_privata
lsh-keygen da solo, genera le informazioni necessarie a definire la coppia di chiavi emettendo un certificato SPKI attraverso lo standard output, da cui lsh-writekey estrapola poi i file necessari. Segue la descrizione di alcune opzioni di lsh-keygen.
Opzione | Descrizione |
| Questa opzione servirebbe a consentire la selezione di un algoritmo particolare per la generazione della chiave. Attualmente è disponibile soltanto l'algoritmo DSA, come si vede dallo schema mostrato, che è ovviamente quello predefinito. |
| Questa opzione permette di definire la dimensione della chiave utilizzata. L'argomento numerico permette di richiedere un minimo di 512 bit, attraverso lo zero, fino a un massimo di 1 024 bit, attraverso il numero otto. Se non si specifica questa opzione, la scelta predefinita corrisponde al livello numero quattro, pari a 768 bit. |
Seguono alcuni esempi.
#
lsh-keygen -l 8 | lsh-writekey /etc/lsh/lsh_host_key
Genera una coppia di chiavi: /etc/lsh/lsh_host_key
e /etc/lsh/lsh_host_key.pub
. In particolare, viene richiesta la lunghezza di 1 024 bit.
#
lsh-keygen | lsh-writekey
Genera una coppia di chiavi utilizzando le informazioni predefinite. In particolare, dovrebbe trattarsi dei file /etc/lsh_host_key
e /etc/lsh_host_key.pub
.
lshd è il servente del servizio LSH. In linea di principio, si tratta di un programma che viene avviato e fermato automaticamente dalla procedura di inizializzazione del sistema, ma può essere usato anche da un utente comune, se in tal caso ci si limita a sfruttare porte TCP non privilegiate.
lshd [opzioni]
Si può osservare che lshd non si mette a funzionare sullo sfondo in modo automatico; per questo richiede espressamente l'opzione --daemonic. Inoltre, dal momento che non dispone (per ora) di un file di configurazione, tutto viene indicato attraverso la riga di comando.
Segue la descrizione di alcuni esempi.
#
lshd --daemonic -h /etc/lsh/lsh_host_key
Avvia lshd come demone, utilizzando la chiave privata contenuta nel file lsh_host_key
che si trova nella directory /etc/lsh/
.
#
lshd --daemonic -h /etc/lsh/lsh_host_key --port 4711
Come nell'esempio precedente, ma utilizzando la porta numero 4 711.
#
lshd --daemonic -h /etc/lsh/lsh_host_key --root-login
Come nell'esempio precedente, utilizzando la porta normale e concedendo all'utente root di accedere.
Il collegamento a un servizio LSH avviene attraverso il programma lsh. Anche questo non prevede alcun file di configurazione, per cui la serie di opzioni della riga di comando è molto lunga.
Prima che un utente possa utilizzare lsh è necessario che abbia predisposto la directory ~/.lsh/
(a partire dalla propria directory personale), in cui devono essere presenti inizialmente i file identity
e known_hosts
, anche se vuoti. Eventualmente, si può creare la propria coppia di chiavi nel modo seguente:
$
lsh-keygen -l 8 | lsh-writekey ~/.lsh/identity
Inizialmente è possibile tentare una connessione con un servizio già avviato, più o meno nel modo seguente, dove si immagina di voler accedere al nodo dinkel.brot.dg
con il nominativo tizio:
$
lsh --sloppy-host-authentication -l tizio dinkel.brot.dg
Dopo aver completato la connessione ed esserne usciti (probabilmente con un comando exit, a seconda della shell), si può osservare che è stato creato un file aggiuntivo, ~/.lsh/captured_keys
, contenente la chiave pubblica del nodo remoto appena contattato. Si tratta di una cosa simile a quella seguente:
; ACL for host dinkel.brot.dg {KDM6YWNsKDU6ZW50cnkoMTA6cHVibGljLWtleSgz...gtaG9zdGtleTk6bG9jYWxob3N0KSkpKQ==} |
Se ci si fida della connessione avvenuta, nel senso che si crede realmente che si tratti della chiave pubblica del nodo che si intendeva contattare, basta ricopiare queste due righe (la prima è un commento) nel file ~/.lsh/known_hosts
per poter controllare in seguito la sua identità. Infatti, l'opzione --sloppy-host-authentication era servita proprio per consentire la connessione anche senza disporre di questa informazione; in seguito, per contattare lo stesso nodo, non deve essere più usata.
lsh è quindi il programma cliente per l'accesso a un servizio LSH.
lsh [opzioni] host
lshc [opzioni] host
In generale viene usato per attivare una shell, in modo da intervenire in un elaboratore remoto presso un'utenza di cui si dispone. In pratica, si tratta di una shell remota, con la quale è possibile anche limitarsi ad avviare dei comandi, il cui risultato si vuole elaborare localmente.
Segue la descrizione di alcuni esempi.
$
lsh --sloppy-host-authentication
<-'
`->--capture-to ~/.lsh/known_hosts
<-'
`->-l tizio dinkel.brot.dg
Ci si connette presso il nodo dinkel.brot.dg
utilizzando il nominativo tizio, memorizzando la chiave pubblica di quel nodo direttamente nel file ~/.lsh/known_hosts
.
$
lsh -l tizio dinkel.brot.dg
Ci si connette presso il nodo dinkel.brot.dg
utilizzando il nominativo tizio, disponendo già di un file ~/.lsh/known_hosts
aggiornato in modo tale da poter identificare il nodo remoto.
$
lsh -l tizio -E ls dinkel.brot.dg > prova
Crea localmente il file prova
contenente l'elenco della directory personale dell'utente tizio presso il nodo dinkel.brot.dg
.
$
lsh -l tizio dinkel.brot.dg ls > prova
Esattamente come nell'esempio precedente, ma senza l'uso esplicito dell'opzione -E.
IETF SECSH Working Group
Martin Hamilton, psst...
daniele @ swlibero.org
2) Tuttavia, allo stato attuale, manca la possibilità di realizzare un file ~/.lsh/authorized_keys
, con il quale si renderebbe disponibile effettivamente questa funzionalità.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome lsh.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]