GNU/Linux >> Linux Esercitazione >  >> Linux

Servizio del sistema operativo Linux 'sshd'

Il servizio sshd (Secure Shell Daemon) fa parte dell'implementazione OpenSSH per Linux che fornisce comunicazioni di rete crittografate end-to-end autenticate. Ad esempio, un utente su un host può accedere a un altro sistema senza utilizzare una password perché il servizio sshd può essere configurato per utilizzare tecniche di autenticazione alternative come lo scambio di informazioni sulla chiave condivisa.

OpenSSH utilizza una tecnologia client/server. Un client, come un utente che esegue il programma ssh, avvia una connessione al server sshd sull'host di destinazione. I messaggi nel protocollo SSH vengono scambiati per autenticare il client sull'host di destinazione e l'accesso remoto viene quindi consentito o negato. Se consentito, viene creata una connessione TCP/IP per consentire al client di scambiare comandi e dati con un'applicazione generata dal demone sshd sul sistema di destinazione.

Il vantaggio degli strumenti OpenSSH è che tutti gli scambi di comunicazione sono crittografati. Le informazioni di autenticazione come nomi utente, password e dati di sessione non vengono mai trasmesse in forma non crittografata. È diverso da alternative come telnet o ftp che utilizzano esclusivamente trasmissioni di testo in chiaro.

Il openssh-server Il pacchetto RPM fornisce /usr/sbin/sshd demone e i suoi file di configurazione.

Esistono due versioni del protocollo di comunicazione SSH, la versione 1 e la versione 2. Sia il client, come scp, sia il server sshd devono utilizzare la stessa versione del protocollo. Il server sshd supporta entrambe le versioni del protocollo per impostazione predefinita, ma ciascuna versione è configurata separatamente.

Le connessioni tra il client e il demone sshd vengono effettuate sulla porta TCP/IP 22 per impostazione predefinita, utilizzando i protocolli UDP o TCP. Innanzitutto, il client e il server devono concordare un metodo di crittografia:sshd invia un elenco di crittografie supportate e il client seleziona la sua preferenza. Il server identifica il suo host utilizzando la /etc/ssh/ssh_host_key (protocollo versione 1) o uno di /etc/ssh/ssh_host_[rd]sa_key (protocollo versione 2). Ciò consente al client di rilevare lo spoofing IP o gli attacchi man-in-the-middle. Con l'ID host verificato, il client prova quindi uno o più metodi di autenticazione per stabilire le credenziali di accesso al sistema per l'utente. Le chiavi di crittografia pubbliche vengono provate per prime, con il ricorso alle tradizionali sfide relative alle password. Utilizzando il client ssh, la negoziazione completa può essere visualizzata aggiungendo opzioni "-v", come questa:

$ ssh -vvv myhost.example.com

Il demone sshd usa /etc/pam.d/sshd file per determinare le regole di autenticazione necessarie per il suo host. Un file predefinito è fornito dal pacchetto RPM openssh-server ed è adeguato per la maggior parte dei siti.

Dopo che l'accesso dell'utente è stato autenticato, il demone sshd(8) avvia quindi il programma applicativo desiderato del client con i file di input/errore/output standard (stdin, stderr, stdout) allegati alla sessione TCP/IP.

Le caratteristiche e il comportamento disponibili con il demone sshd(8) sono controllati da un file di configurazione a livello di sistema /etc/ssh/sshd_config. Un file predefinito viene fornito con il pacchetto RPM, ma può essere modificato per soddisfare i requisiti locali. Ad esempio, per impedire l'accesso come root tramite ssh, l'impostazione sshd_config può essere modificata come in questo frammento:

# vi /etc/ssh/sshd_config
PermitRootLogin no

Controllo del servizio

Per gestire il servizio sshd su richiesta, utilizzare il comando service o eseguire direttamente lo script /etc/init.d/sshd:

# /sbin/service sshd help
Usage: /etc/init.d/sshd {start|stop|restart|reload|condrestart|status}
# /etc/init.d/sshd help
Usage: /etc/init.d/sshd {start|stop|restart|reload|condrestart|status}

I comandi disponibili sono:

Comando Descrizione
inizio Avvia il daemon sshd.
fermati Interrompi il demone sshd.
riavvia Equivalente a una fermata e poi a una sequenza di comandi di avvio.
ricarica Forza il demone sshd a rileggere i suoi file di configurazione senza un'interruzione del servizio.
condrestart Se il demone sshd è attualmente in esecuzione, equivale a un comando di riavvio. Se il demone non è in esecuzione, non viene eseguita alcuna azione. Spesso utilizzato nell'installazione del pacchetto RPM per evitare di avviare un servizio non già in esecuzione.
stato Se il demone sshd è in esecuzione, segnala il suo PID (ID processo). Se non è in esecuzione, segnalalo anche tu.

Il demone sshd è più comunemente avviato dal servizio sshd o dal demone xinetd(8). È possibile fornire direttamente argomenti della riga di comando, ma di solito non viene eseguito. Al contrario, è possibile fornire ulteriori argomenti della riga di comando al demone sshd(8) creando il file /etc/sysconfig/sshd e definendo la variabile ${OPTIONS}:

# Additional command line options for sshd
OPTIONS="-q"

Questo esempio attiverà la modalità silenziosa, impedendo a sshd di registrare l'inizio, l'autenticazione e la fine di ogni sessione. Consulta la pagina di manuale in linea di sshd per i dettagli sulle opzioni della riga di comando disponibili.

Configurazione

Per gestire il servizio sshd all'avvio, usa lo strumento chkconfig:

# /sbin/chkconfig --list sshd
sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# /sbin/chkconfig sshd on
# /sbin/chkconfig --list sshd
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Una varietà di file di configurazione viene utilizzata per adattare il demone sshd al funzionamento dipendente dal sito. Questi sono descritti di seguito:

Percorso del file di configurazione Descrizione
/etc/ssh/sshd_config File di configurazione richiesto. La maggior parte dei valori predefiniti vengono forniti come commenti.
/etc/ssh/ssh_host_key Contiene la chiave host utilizzata per la versione 1 del protocollo SSH. Necessaria solo se viene utilizzata la versione 1 del protocollo.
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_dsa_key
Contiene la chiave host utilizzata per il protocollo SSH versione 2. Necessario solo se viene utilizzato il protocollo versione 2.
/etc/motd File del messaggio del giorno presentato al client ssh dopo l'accesso.
~/.hushlogin Se il file esiste, il file /etc/motd non viene visualizzato da ssh in caso di accesso riuscito.
/etc/nologin Se il file esiste, il suo contenuto viene visualizzato dal client e la sessione viene quindi terminata. Ignorato per gli accessi root.
~/.ssh/ambiente Se il file esiste e il parametro sshd_config permitUserEnvironmentis è impostato, le variabili di ambiente della shell da questo file vengono esportate nella sessione SSH.
~/.ssh/rc
/etc/ssh/sshrc
I file vengono controllati nell'ordine mostrato e viene eseguito il primo trovato. Se non viene trovato nessuno dei due, viene eseguita l'utilità xauth.
~/.ssh/authorized_keys Elenca le chiavi pubbliche utilizzate per l'autenticazione della sessione RSA.
~/.ssh/known_hosts
/etc/ssh/ssh_known_hosts
Contiene le chiavi pubbliche dell'host per tutti gli host conosciuti. Il file per utente viene mantenuto automaticamente. Il file globale facoltativo è gestito dall'amministratore di sistema.
/etc/moduli
/etc/ssh/moduli
Contrariamente alla man page, il file /etc/moduli non viene utilizzato in questa implementazione. Il file /etc/ssh/moduli contiene i gruppi Diffie-Hellman utilizzati per la negoziazione del protocollo "Diffie-Hellman Group Exchange".
/var/empty/sshd directory chroot utilizzata durante la separazione dei privilegi prima del completamento della fase di autenticazione. Di proprietà di root e non scrivibile da tutto il mondo, questa directory in genere contiene solo un file etc/localtime per la presentazione di ora e data.
/etc/hosts.allow
/etc/hosts.deny
Controlli di accesso che devono essere applicati dalla struttura tcp_wrappers. Vedi tcpd per maggiori dettagli.
~/.rhosts Utilizzato per l'autenticazione RSA o l'autenticazione basata su host. Elenco di coppie nome utente/nome host per identificare gli accessi che non richiedono lo scambio di password.
~/.shosts Simile a ~/.rhosts, ma ignorato dalle utility rlogin o rshd.
/etc/hosts.equiv Elenco di host in cui non sono richieste verifiche della password purché il nome utente corrisponda sia sull'host client che su quello server. Se una riga contiene anche un nome utente, quell'utente sul computer client può accedere a qualsiasi account del server, anche all'account root dell'host; questo generalmente non è raccomandato.
/etc/shosts.equiv Elaborato in modo identico al file /etc/hosts.equiv , questo file viene ignorato dai daemon rsh e rshd.

File di configurazione /etc/ssh/sshd_config

Di seguito è riportato un file di configurazione di esempio /etc/ssh/sshd_config.

#	$OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
# problems.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation sandbox
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

# override default of no subsystems
Subsystem sftp	/usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server


Linux
  1. Servizio del sistema operativo Linux 'dhcpd'

  2. Servizio del sistema operativo Linux "anacron"

  3. Servizio del sistema operativo Linux "iptables"

  4. Sistema operativo Linux Servizio "rete"

  5. Servizio del sistema operativo Linux "portmap"

Servizio del sistema operativo Linux "NetFS"

Servizio del sistema operativo Linux 'ldap'

Servizio del sistema operativo Linux 'yppasswdd'

Servizio del sistema operativo Linux "xendomains"

Servizio del sistema operativo Linux 'nscd'

Servizio del sistema operativo Linux "calamaro"