GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Betriebssystemdienst „sshd“

Der Dienst sshd (Secure Shell Daemon) ist Teil der OpenSSH-Implementierung für Linux, die eine authentifizierte, Ende-zu-Ende-verschlüsselte Netzwerkkommunikation bereitstellt. Beispielsweise kann sich ein Benutzer auf einem Host bei einem anderen System anmelden, ohne ein Passwort zu verwenden, da der sshd-Dienst so konfiguriert werden kann, dass er alternative Authentifizierungstechniken wie den Austausch von Shared-Key-Informationen verwendet.

OpenSSH verwendet eine Client/Server-Technologie. Ein Client, beispielsweise ein Benutzer, der das ssh-Programm ausführt, initiiert eine Verbindung zum sshd-Server auf dem Zielhost. Nachrichten im SSH-Protokoll werden ausgetauscht, um den Client gegenüber dem Zielhost zu authentifizieren, und der Fernzugriff wird dann zugelassen oder verweigert. Falls erlaubt, wird eine TCP/IP-Verbindung aufgebaut, damit der Client Befehle und Daten mit einer Anwendung austauschen kann, die vom sshd-Daemon auf dem Zielsystem erzeugt wird.

Der Vorteil der OpenSSH-Tools besteht darin, dass der gesamte Kommunikationsaustausch verschlüsselt ist. Authentifizierungsinformationen wie Benutzernamen, Passwörter und Sitzungsdaten werden niemals unverschlüsselt übertragen. Das ist anders als Alternativen wie Telnet oder FTP, die ausschließlich Klartextübertragungen verwenden.

Der openssh-Server Das RPM-Paket stellt die Datei /usr/sbin/sshd bereit Daemon und seine Konfigurationsdateien.

Es gibt zwei Versionen des SSH-Kommunikationsprotokolls, Version 1 und Version 2. Sowohl der Client, z. B. scp, als auch der sshd-Server müssen dieselbe Protokollversion verwenden. Der sshd-Server unterstützt standardmäßig beide Protokollversionen, aber jede Version wird separat konfiguriert.

Verbindungen zwischen dem Client und dem sshd-Daemon werden standardmäßig auf TCP/IP-Port 22 hergestellt, wobei entweder UDP- oder TCP-Protokolle verwendet werden. Zunächst müssen sich Client und Server auf eine Verschlüsselungsmethode einigen:Der sshd sendet eine Liste der unterstützten Chiffren und der Client wählt seine Präferenz aus. Der Server identifiziert seinen Host entweder mit dem /etc/ssh/ssh_host_key (Protokollversion 1) oder eines von /etc/ssh/ssh_host_[rd]sa_key (Protokollversion 2). Dadurch kann der Client IP-Spoofing oder Man-in-the-Middle-Angriffe erkennen. Wenn die Host-ID verifiziert ist, versucht der Client dann eine oder mehrere Authentifizierungsmethoden, um die Systemzugriffsdaten für den Benutzer einzurichten. Öffentliche Verschlüsselungsschlüssel werden zuerst ausprobiert, wobei auf herkömmliche Kennwortherausforderungen zurückgegriffen wird. Mit dem ssh-Client kann die vollständige Aushandlung angezeigt werden, indem „-v“-Schalter wie folgt hinzugefügt werden:

$ ssh -vvv myhost.example.com

Der sshd-Daemon verwendet /etc/pam.d/sshd -Datei, um die erforderlichen Authentifizierungsregeln für ihren Host zu ermitteln. Eine Standarddatei wird vom Openssh-Server-RPM-Paket bereitgestellt und ist für die meisten Sites ausreichend.

Nachdem der Benutzerzugriff authentifiziert wurde, startet der sshd(8)-Daemon das gewünschte Anwendungsprogramm des Clients mit den standardmäßigen Eingabe-/Fehler-/Ausgabedateien (stdin, stderr, stdout), die an die TCP/IP-Sitzung angehängt sind.

Die Funktionen und das Verhalten des sshd(8)-Daemons werden durch eine systemweite Konfigurationsdatei /etc/ssh/sshd_config gesteuert. Mit dem RPM-Paket wird eine Standarddatei bereitgestellt, die jedoch an lokale Anforderungen angepasst werden kann. Um zum Beispiel Root-Logins mit ssh zu verhindern, kann die Einstellung sshd_config wie in diesem Snippet geändert werden:

# vi /etc/ssh/sshd_config
PermitRootLogin no

Dienststeuerung

Um den sshd-Dienst bei Bedarf zu verwalten, verwenden Sie den Befehl service oder führen Sie das Skript /etc/init.d/sshd direkt aus:

# /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}

Die verfügbaren Befehle sind:

Befehl Beschreibung
beginnen Starten Sie den sshd-Daemon.
Halt Stoppen Sie den sshd-Daemon.
Neustart Entspricht einer Stopp- und dann einer Start-Befehlsfolge.
neu laden Zwingen Sie den sshd-Daemon, seine Konfigurationsdateien ohne Dienstunterbrechung erneut zu lesen.
condrestart Wenn der sshd-Daemon derzeit ausgeführt wird, entspricht dies einem Neustartbefehl. Wenn der Daemon nicht läuft, wird keine Aktion ausgeführt. Wird häufig bei der Installation von RPM-Paketen verwendet, um zu vermeiden, dass ein Dienst gestartet wird, der noch nicht ausgeführt wird.
Status Falls der sshd-Daemon läuft, melden Sie seine PID (Prozess-ID). Wenn es nicht läuft, melde es auch.

Der sshd-Daemon wird am häufigsten vom sshd-Dienst oder vom xinetd(8)-Daemon gestartet. Das direkte Bereitstellen von Befehlszeilenargumenten ist möglich, wird aber normalerweise nicht gemacht. Stattdessen können zusätzliche Befehlszeilenargumente an den sshd(8)-Daemon geliefert werden, indem die Datei /etc/sysconfig/sshd erstellt und die Variable ${OPTIONS} definiert wird:

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

Dieses Beispiel schaltet den stillen Modus ein und verhindert, dass sshd den Beginn, die Authentifizierung und das Ende jeder Sitzung protokolliert. Konsultieren Sie die Online-Handbuchseite für sshd für Einzelheiten zu den verfügbaren Befehlszeilenoptionen.

Konfiguration

Um den sshd-Dienst beim Booten zu verwalten, verwenden Sie das chkconfig-Tool:

# /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

Eine Vielzahl von Konfigurationsdateien wird verwendet, um den sshd-Daemon für den Site-abhängigen Betrieb anzupassen. Diese werden im Folgenden beschrieben:

Pfad der Konfigurationsdatei Beschreibung
/etc/ssh/sshd_config Erforderliche Konfigurationsdatei. Die meisten Standardwerte werden als Kommentare bereitgestellt.
/etc/ssh/ssh_host_key Enthält den für die SSH-Protokollversion 1 verwendeten Hostschlüssel. Nur erforderlich, wenn die Protokollversion 1 verwendet wird.
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_dsa_key
Enthält Hostschlüssel, der für die SSH-Protokollversion 2 verwendet wird. Nur erforderlich, wenn Protokollversion 2 verwendet wird.
/etc/motd Nachricht der Tagesdatei, die dem ssh-Client nach erfolgreicher Anmeldung präsentiert wird.
~/.hushlogin Falls Datei vorhanden ist, wird die Datei /etc/motd bei erfolgreicher Anmeldung nicht von ssh angezeigt.
/etc/nologin Wenn eine Datei existiert, wird ihr Inhalt vom Client angezeigt und die Sitzung wird dann beendet. Wird bei Root-Anmeldungen ignoriert.
~/.ssh/environment Wenn die Datei existiert und der sshd_config-Parameter PermitUserEnvironment festgelegt ist, werden Shell-Umgebungsvariablen aus dieser Datei in die SSH-Sitzung exportiert.
~/.ssh/rc
/etc/ssh/sshrc
Dateien werden in der angezeigten Reihenfolge geprüft und die zuerst gefundene wird ausgeführt. Wenn beides nicht gefunden wird, wird das Dienstprogramm xauth ausgeführt.
~/.ssh/authorized_keys Listet die öffentlichen Schlüssel auf, die für die RSA-Sitzungsauthentifizierung verwendet werden.
~/.ssh/known_hosts
/etc/ssh/ssh_known_hosts
Enthält öffentliche Hostschlüssel für alle bekannten Hosts. Die Benutzerdatei wird automatisch verwaltet. Die optionale globale Datei wird vom Systemadministrator gepflegt.
/etc/moduli
/etc/ssh/moduli
Im Gegensatz zur Manpage wird die Datei /etc/moduli in dieser Implementierung nicht verwendet. Die Datei /etc/ssh/moduli enthält Diffie-Hellman-Gruppen, die für die Protokollaushandlung „Diffie-Hellman Group Exchange“ verwendet werden.
/var/empty/sshd Chroot-Verzeichnis, das während der Privilegientrennung vor Abschluss der Authentifizierungsphase verwendet wird. Dieses Verzeichnis ist im Besitz von root und nicht weltweit beschreibbar. Es enthält normalerweise nur eine etc/localtime-Datei für die Darstellung von Uhrzeit und Datum.
/etc/hosts.allow
/etc/hosts.deny
Zugriffskontrollen, die von der Einrichtung tcp_wrappers durchgesetzt werden müssen. Siehe tcpd für weitere Details.
~/.rhosts Wird für RSA-Authentifizierung oder hostbasierte Authentifizierung verwendet. Liste von Benutzername/Hostname-Paaren, um Anmeldungen zu identifizieren, die keinen Passwortaustausch erfordern.
~/.shosts Ähnlich wie ~/.rhosts, aber von den Dienstprogrammen rlogin oder rshd ignoriert.
/etc/hosts.equiv Liste der Hosts, bei denen keine Passwortabfrage erforderlich ist, solange der Benutzername sowohl auf dem Client- als auch auf dem Serverhost übereinstimmt. Wenn eine Zeile auch einen Benutzernamen enthält, kann sich dieser Benutzer auf dem Client-Rechner bei jedem Serverkonto anmelden, sogar beim Host-Root-Konto; Dies wird im Allgemeinen nicht empfohlen.
/etc/shosts.equiv Diese Datei wird genauso verarbeitet wie die /etc/hosts.equiv-Datei, wird aber von den rsh- und rshd-Daemons ignoriert.

Konfigurationsdatei /etc/ssh/sshd_config

Unten ist eine Beispiel-Konfigurationsdatei /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. Linux-Betriebssystemdienst „iptables“

  2. Linux-Betriebssystemdienst „Netzwerk“

  3. Linux-Betriebssystemdienst „portmap“

  4. Linux-Betriebssystemdienst „auditd“

  5. Linux-Betriebssystemdienst „nfs“

Linux-Betriebssystemdienst „anacron“

Linux-Betriebssystemdienst „hplip“

Linux-Betriebssystemdienst „smartd“

Linux-Betriebssystemdienst „irqbalance“

Linux-Betriebssystemdienst „rpcgssd“

Linux-Betriebssystemdienst „yum-updatesd“