[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [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 279), 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 viene chiarito il significato delle opzioni usate.
#
lsh-keygen -l 8 | lsh-writekey /etc/lsh/lsh_host_key
[Invio]
In questo modo, usando un condotto, 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
[Invio]
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.
|
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.
|
Seguono alcuni esempi.
#
lsh-keygen -l 8 | lsh-writekey /etc/lsh/lsh_host_key
[Invio]
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
[Invio]
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
[Invio]
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
[Invio]
Come nell'esempio precedente, ma utilizzando la porta numero 4 711.
#
lshd --daemonic -h /etc/lsh/lsh_host_key --root-login
[Invio]
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
[Invio]
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
[Invio]
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:
|
Se ci si fida della connessione avvenuta, nel senso che si crede realmente che si tratti della chiave pubblica del nodo che si intende 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 è 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] nodo |
lshc [opzioni] nodo |
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
[Invio]
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
[Invio]
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
[Invio]
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
[Invio]
Esattamente come nell'esempio precedente, ma senza l'uso esplicito dell'opzione -E.
IETF SECSH Working Group
A GNU implementation of Secure Shell protocols
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) 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.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]