Nome
sshd - Demone SSH OpenSSH
Sinossi
sshd -deiqtD46 -B bit -f config_file -g login_grace_time -h host_key_file -K key_gen_time -o opzione -p porta -u len
Descrizione
sshd (Daemon SSH) è il programma daemon per ssh (1). Insieme sostituiscono questi programmi rlogin e rshe fornire comunicazioni crittografate sicure tra due host non fidati su una rete non protetta. I programmi devono essere facili da installare e utilizzare il più possibile.
sshd è il demone che ascolta le connessioni dai client. Normalmente è avviato all'avvio da / etc / rc. Forge un nuovo demone per ogni connessione in entrata. I daemon biforcati gestiscono lo scambio di chiavi, la crittografia, l'autenticazione, l'esecuzione dei comandi e lo scambio di dati. Questa implementazione disshd supporta entrambi i protocolli SSH versione 1 e 2 contemporaneamente.
Protocollo SSH versione 1
Ogni host ha una chiave RSA specifica dell'host (normalmente 1024 bit) utilizzata per identificare l'host. Inoltre, all'avvio del daemon, genera una chiave RSA del server (normalmente 768 bit). Questa chiave viene normalmente rigenerata ogni ora se è stata utilizzata e non viene mai memorizzata su disco.
Ogni volta che un client si connette il daemon risponde con le sue chiavi di host e server pubblici. Il client confronta la chiave host RSA con il proprio database per verificare che non sia stata modificata. Il client genera quindi un numero casuale a 256 bit. Codifica questo numero casuale utilizzando sia la chiave host che la chiave del server e invia il numero crittografato al server. Entrambe le parti utilizzano questo numero casuale come chiave di sessione che viene utilizzata per crittografare tutte le comunicazioni successive nella sessione. Il resto della sessione viene crittografato utilizzando un cifrario convenzionale, attualmente Blowfish o 3DES, con 3DES utilizzato di default. Il client seleziona l'algoritmo di crittografia da utilizzare tra quelli offerti dal server.
Successivamente, il server e il client entrano in una finestra di autenticazione. Il client tenta di autenticarsi utilizzando l'autenticazione .rhosts, l'autenticazione .rhosts combinata con l'autenticazione host RSA, l'autenticazione sfida-risposta RSA o l'autenticazione basata su password.
L'autenticazione di Rhosts è normalmente disabilitata perché è fondamentalmente insicura, ma può essere abilitata nel file di configurazione del server, se lo si desidera. La sicurezza del sistema non è migliorata a meno chershdrlogind e rexecd sono disabilitati (disabilitando così completamente rlogin e rsh nella macchina).
Protocollo SSH versione 2
La versione 2 funziona in modo simile: ogni host ha una chiave specifica dell'host (RSA o DSA) utilizzata per identificare l'host. Tuttavia, all'avvio del daemon, non viene generata una chiave del server. La sicurezza forward viene fornita tramite un accordo chiave Diffie-Hellman. Questo accordo chiave genera una chiave di sessione condivisa.
Il resto della sessione viene crittografato utilizzando un algoritmo simmetrico, attualmente AES a 128 bit, Blowfish, 3DES, CAST128, Arcfour, AES a 192 bit o AES a 256 bit. Il client seleziona l'algoritmo di crittografia da utilizzare tra quelli offerti dal server. Inoltre, l'integrità della sessione viene fornita tramite un codice di autenticazione dei messaggi crittografici (hmac-sha1 o hmac-md5).
Il protocollo versione 2 fornisce un metodo di autenticazione basato su chiave pubblica (PubkeyAuthentication) o host client (HostbasedAuthentication), autenticazione con password convenzionale e metodi basati su challenge-response.
Esecuzione comandi e inoltro dati
Se il client si autentica correttamente, viene immessa una finestra di dialogo per preparare la sessione. A questo punto il client può richiedere cose come allocare una pseudo-tty, inoltrare connessioni X11, inoltrare connessioni TCP / IP o inoltrare la connessione dell'agent di autenticazione attraverso il canale sicuro.
Infine, il client richiede una shell o l'esecuzione di un comando. I lati quindi entrano in modalità sessione. In questa modalità, entrambi i lati possono inviare dati in qualsiasi momento e tali dati vengono inoltrati alla / dalla shell o al comando sul lato server e al terminale utente sul lato client.
Quando il programma utente termina e tutti gli X11 inoltrati e le altre connessioni sono stati chiusi, il server invia lo stato di uscita di comando al client e entrambi i lati escono.
sshd può essere configurato utilizzando le opzioni della riga di comando o un file di configurazione. Le opzioni della riga di comando sovrascrivono i valori specificati nel file di configurazione.
sshd rilegge il suo file di configurazione quando riceve un segnale di hangup,SIGHUP eseguendo se stesso con il nome è stato avviato come, ad es., / usr / sbin / sshd
Le opzioni sono le seguenti:
-b bit
Specifica il numero di bit nella chiave server versione 1 del protocollo effimero (predefinito 768).
-d
Modalità di debug. Il server invia un output di debug dettagliato al log di sistema e non si posiziona in background. Anche il server non funzionerà e elaborerà solo una connessione. Questa opzione è intesa solo per il debug del server. Più opzioni -d aumentano il livello di debug. Il massimo è 3
-e
Quando questa opzione è specificata,sshd invierà l'output all'errore standard anziché al log di sistema.
-f file di configurazione
Specifica il nome del file di configurazione. Il valore predefinito è / etc / ssh / sshd_configsshdsi rifiuta di iniziare se non c'è un file di configurazione.
-g login_grace_time
Fornisce il tempo necessario ai client per autenticarsi (predefinito 120 secondi). Se il client non riesce a autenticare l'utente entro questo numero di secondi, il server si disconnette ed esce.Un valore pari a zero indica nessun limite.
-h host_key_file
Specifica un file da cui viene letta una chiave host. Questa opzione deve essere data sesshd non viene eseguito come root (poiché normalmente i normali file della chiave host non sono leggibili da nessuno tranne root). L'impostazione predefinita è / etc / ssh / ssh_host_key per la versione 1 del protocollo e / etc / ssh / host_rsa_key e / etc / ssh / ssh_host_dsa_key per la versione 2. del protocollo. È possibile avere più file chiave host per le diverse versioni di protocollo e chiave host algoritmi.
-io
Specifica quellosshd viene eseguito da inetd.sshd normalmente non viene eseguito da inetd perché deve generare la chiave del server prima che possa rispondere al client e questo potrebbe richiedere decine di secondi. I client dovrebbero attendere troppo a lungo se la chiave è stata rigenerata ogni volta. Tuttavia, con piccole dimensioni della chiave (ad es. 512) utilizzandosshd da inetd può essere fattibile.
-K key_gen_time
Specifica la frequenza di rigenerazione della chiave server versione 1 del protocollo effimero (valore predefinito 3600 secondi o un'ora). La motivazione per rigenerare la chiave abbastanza spesso è che la chiave non è memorizzata da nessuna parte, e dopo circa un'ora, diventa impossibile recuperare la chiave per decifrare le comunicazioni intercettate anche se la macchina è incrinata o fisicamente sequestrata. Un valore pari a zero indica che la chiave non verrà mai rigenerata.
-o opzione
Può essere usato per dare opzioni nel formato utilizzato nel file di configurazione. Questo è utile per specificare le opzioni per le quali non esiste un flag a riga di comando separato.
-p porta
Specifica la porta su cui il server ascolta le connessioni (valore predefinito 22). Sono consentite più opzioni di porta. Le porte specificate nel file di configurazione vengono ignorate quando viene specificata una porta della riga di comando.
-q
Modalità silenziosa. Nulla viene inviato al registro di sistema. Normalmente vengono registrati l'inizio, l'autenticazione e la terminazione di ciascuna connessione.
-t
Modalità di prova. Controlla solo la validità del file di configurazione e la correttezza delle chiavi. Questo è utile per l'aggiornamentosshd in modo affidabile in quanto le opzioni di configurazione potrebbero cambiare.
-u len
Questa opzione è usata per specificare la dimensione del campo nelutmp struttura che contiene il nome host remoto. Se il nome host risolto è più lungo di len verrà invece utilizzato il valore decimale punteggiato. Ciò consente agli host con nomi host molto lunghi che superano questo campo di essere identificati in modo univoco. Specifica -u0 indica che solo gli indirizzi decimali con punti devono essere inseriti nel file utmp. -u0 è anche usato per preveniresshd da fare richieste DNS a meno che il meccanismo di autenticazione o la configurazione lo richiedano. I meccanismi di autenticazione che potrebbero richiedere il DNS includonoRhostsAuthenticationRhostsRSAAuthentication HostbasedAuthentication e usando ada = pattern-listopzione in un file chiave. Le opzioni di configurazione che richiedono il DNS includono l'uso di un USER @ HOSTpattern inAllowUsers oDenyUsers
-D
Quando questa opzione è specificatasshd non si scollegherà e non diventerà un demone. Ciò consente un facile monitoraggio disshd
-4
forzesshd utilizzare solo indirizzi IPv4.
-6
forzesshd utilizzare solo indirizzi IPv6.
File di configurazione
sshd legge i dati di configurazione da / etc / ssh / sshd_config (o il file specificato con -f sulla riga di comando). Il formato del file e le opzioni di configurazione sono descritte in sshd_config5.
Processo di accesso
Quando un utente accede con successo,sshd fa quanto segue:
- Se il login è su un tty e non è stato specificato alcun comando, stampa l'ultimo tempo di accesso e / etc / motd (a meno che non sia impedito nel file di configurazione o da $ HOME / .hushlogin vedere la sezione Sx FILES).
- Se il login è su un tty, registra il tempo di accesso.
- Controlla / etc / nologin se esiste, stampa i contenuti e si chiude (a meno che non sia root).
- Modifiche per l'esecuzione con i normali privilegi dell'utente.
- Imposta l'ambiente di base.
- Legge $ HOME / .ssh / environment se esiste e gli utenti possono modificare il proprio ambiente. Vedere ilPermitUserEnvironment opzione in sshd_config5.
- Modifiche alla directory home dell'utente.
- Se $ HOME / .ssh / rc esiste, lo esegue; altrimenti se / etc / ssh / sshrc esiste, lo esegue; altrimenti esegue xauth. I file `` rc '' hanno il protocollo di autenticazione X11 e il cookie nello standard input.
- Esegue la shell o il comando dell'utente.
Formato file Authorized_Keys
$ HOME / .ssh / authorized_keys è il file predefinito che elenca le chiavi pubbliche consentite per l'autenticazione RSA nella versione 1 del protocollo e per l'autenticazione della chiave pubblica (PubkeyAuthentication) nella versione 2 del protocollo.AuthorizedKeysFile può essere usato per specificare un file alternativo.
Ogni riga del file contiene una chiave (le linee vuote e le righe che iniziano con `# 'vengono ignorate come commenti). Ogni chiave pubblica RSA è composta dai seguenti campi, separati da spazi: opzioni, bit, esponente, modulo, commento. Ogni chiave pubblica della versione 2 del protocollo è composta da: opzioni, tipo di chiave, chiave codificata base64, commento. Il campo delle opzioni è facoltativo; la sua presenza è determinata dal fatto che la linea inizi con un numero o meno (il campo delle opzioni non inizia mai con un numero). I campi bit, esponente, modulo e commento forniscono la chiave RSA per la versione 1 del protocollo; il campo dei commenti non viene utilizzato per nulla (ma potrebbe essere conveniente per l'utente identificare la chiave). Per la versione 2 del protocollo, il tipo di chiave è `` ssh-dss '' o `` ssh-rsa ''
Nota che le righe in questo file sono in genere lunghe diverse centinaia di byte (a causa della dimensione della codifica della chiave pubblica). Non vuoi scriverli; invece, copia identity.pub id_dsa.pub o id_rsa.pub e modificalo.
sshd applica una dimensione minima del modulo chiave RSA per le chiavi protocollo 1 e protocollo 2 di 768 bit.
Le opzioni (se presenti) sono costituite da specifiche di opzioni separate da virgole. Non sono consentiti spazi, tranne all'interno di virgolette. Sono supportate le seguenti specifiche di opzione (notare che le parole chiave di opzione non fanno distinzione tra maiuscole e minuscole):
da = pattern-list
Specifica che oltre all'autenticazione della chiave pubblica, il nome canonico dell'host remoto deve essere presente nell'elenco di modelli separati da virgola (`* 'e`?' Servono come caratteri jolly). L'elenco può contenere anche pattern annullati dal prefisso con `! ' ; se il nome host canonico corrisponde a un pattern negato, la chiave non viene accettata. Lo scopo di questa opzione è di aumentare facoltativamente la sicurezza: l'autenticazione a chiave pubblica di per sé non si fida della rete o dei name server o di nulla (ma la chiave); tuttavia, se qualcuno in qualche modo ruba la chiave, la chiave consente a un intruso di accedere da qualsiasi parte del mondo. Questa opzione aggiuntiva rende più difficile l'uso di una chiave rubata (i server dei nomi e / oi router dovrebbero essere compromessi in aggiunta alla sola chiave).
comando = comando
Specifica che il comando viene eseguito ogni volta che questa chiave viene utilizzata per l'autenticazione. Il comando fornito dall'utente (se presente) viene ignorato. Il comando viene eseguito su una pty se il client richiede una pty; altrimenti viene eseguito senza un tty. Se è richiesto un canale pulito a 8 bit, non è necessario richiedere una pty o specificareno-pty Una citazione può essere inclusa nel comando citandola con una barra rovesciata. Questa opzione potrebbe essere utile per limitare alcune chiavi pubbliche ad eseguire solo un'operazione specifica. Un esempio potrebbe essere una chiave che consente backup remoti ma nient'altro. Si noti che il client può specificare l'inoltro TCP / IP e / o X11 a meno che non siano esplicitamente vietati. Nota che questa opzione si applica all'esecuzione di shell, comando o sottosistema.
ambiente = NAME = valore
Specifica che la stringa deve essere aggiunta all'ambiente quando si effettua l'accesso utilizzando questa chiave. Le variabili d'ambiente impostate in questo modo sovrascrivono altri valori di ambiente predefiniti. Sono consentite più opzioni di questo tipo. L'elaborazione dell'ambiente è disabilitata per impostazione predefinita ed è controllata tramitePermitUserEnvironment opzione. Questa opzione è disabilitata automaticamente seUseLogin è abilitato.
no-port-forwarding
Proibisce l'inoltro TCP / IP quando questa chiave viene utilizzata per l'autenticazione. Qualsiasi richiesta di port forwarding da parte del client restituirà un errore. Questo potrebbe essere usato, ad es., In connessione concomando opzione.
no-X11-forwarding
Proibisce l'inoltro X11 quando questa chiave viene utilizzata per l'autenticazione. Qualsiasi richiesta inoltrata X11 da parte del client restituirà un errore.
no-agent-forwarding
Proibisce l'inoltro dell'agente di autenticazione quando questa chiave viene utilizzata per l'autenticazione.
no-pty
Impedisce l'assegnazione di tty (una richiesta di allocazione di una pty fallirà).
permitopen = host: porta
Limite locale`` ssh -L '' port forwarding in modo tale che possa connettersi solo all'host e alla porta specificati. Gli indirizzi IPv6 possono essere specificati con una sintassi alternativa: porta ospite multiplo permitopen le opzioni possono essere applicate separate da virgole. Nessuna corrispondenza di modello viene eseguita sugli hostname specificati, devono essere domini o indirizzi letterali.
Esempi
1024 33 12121 … 312314325 [email protected]
da = "*. niksula.hut.fi,! pc.niksula.hut.fi" 1024 35 23 … 2334 ylo @ niksula
command = "dump / home", no-pty, no-port-forwarding 1024 33 23 … 2323 backup.hut.fi
permitopen = "10.2.1.55:80", permitopen = "10.2.1.56:25" 1024 33 23 … 2323
Ssh_Known_Hosts Formato file
I file / etc / ssh / ssh_known_hosts e $ HOME / .ssh / known_hosts contengono le chiavi pubbliche host per tutti gli host conosciuti. Il file globale deve essere preparato dall'amministratore (facoltativo) e il file per utente viene gestito automaticamente: ogni volta che l'utente si connette da un host sconosciuto, la sua chiave viene aggiunta al file per utente.
Ogni riga in questi file contiene i seguenti campi: nomi host, bit, esponente, modulo, commento. I campi sono separati da spazi.
I nomi host sono un elenco di modelli separati da virgole ('*' e '?' Fungono da caratteri jolly); ciascun modello, a sua volta, viene confrontato con il nome host canonico (durante l'autenticazione di un client) o con il nome fornito dall'utente (durante l'autenticazione di un server). Un pattern può anche essere preceduto da `! ' per indicare la negazione: se il nome host corrisponde a un modello negato, non viene accettato (da quella riga) anche se corrisponde a un altro motivo sulla linea.
Bit, esponente e modulo vengono presi direttamente dalla chiave host RSA; possono essere ottenuti, ad esempio, da /etc/ssh/ssh_host_key.pub Il campo dei commenti facoltativi continua fino alla fine della riga e non viene utilizzato.
Le righe che iniziano con `# 'e le linee vuote vengono ignorate come commenti.
Quando si esegue l'autenticazione dell'host, l'autenticazione viene accettata se qualsiasi riga corrispondente ha la chiave corretta. È quindi consentito (ma non consigliato) di avere più righe o chiavi host diverse per gli stessi nomi. Ciò avverrà inevitabilmente quando nel file vengono inserite brevi forme di nomi host di domini diversi. È possibile che i file contengano informazioni contrastanti; l'autenticazione è accettata se è possibile trovare informazioni valide da entrambi i file.
Nota che le linee in questi file sono tipicamente lunghe centinaia di caratteri, e sicuramente non vuoi digitare manualmente le chiavi dell'host. Piuttosto, generarli da uno script o prendendo /etc/ssh/ssh_host_key.pub e aggiungendo i nomi host in primo piano.
Esempi
closenet, …, 130.233.208.41 1024 37 159 … 93 closenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ….. =
Guarda anche
scp (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, moduli (5), sshd_config5, sftp-server8
T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen "Architettura protocollo SSH" draft-ietf-secsh-architecture-12.txt Gennaio 2002 materiale in lavorazione
M. Friedl N. Provos W. A. Simpson "Diffie-Hellman Group Exchange per il protocollo SSH Transport Layer" draft-ietf-secsh-dh-group-exchange-02.txt Gennaio 2002 materiale in lavorazione
Importante: Utilizzare il uomo comando ( % uomo ) per vedere come viene utilizzato un comando sul tuo computer specifico.