Linux Server setup

Authentifizierungsmethode ändern und testen

Im vorherigen Unterkapitel RSA Schlüssel erzeugen haben wir ein Schlüsselpaar erzeugt und den öffentlichen Schlüssel auf dem Server hinterlegt. Jetzt werden wir die SSH Konfigurationsdatei so abändern, dass die Anmeldung ausschließlich mit dem privaten Schlüssel erfolgt.

In diesem Unterkapitel konfigurieren wir die schlüsselbasierte Authentifizierungsmethode.

Nach heutigen Stand der Technik, ist diese Maßnahme der stärkste Authentifizierungsschutz. Sie macht Brute-Force-Angriffe eigentlich unmöglich. Um das bisschen Restrisiko werden wir uns später noch kümmern.

Doch Vorsicht vor den Quantencomputern. Sie können Kryptographische Schlüssel in annehmbarer Rechenzeit entschlüsseln. Da es aber in keinem wirtschaftlichen Verhältnis steht, die immens teure Betriebszeit solcher Computer einzusetzen, um meine uninteressanten Daten zu klauen, mache ich mir persönlich in dieser Sache (noch!) keine Sorgen. Früher oder später wird dieses Thema ganz sicher für Furore sorgen.


Ändern der SSH Konfiguration

Die zuständige Konfigurationsdatei für den SSH Dienst ist /etc/ssh/sshd_config. Dort befinden sich eine Menge Konfigurationszeilen, die meisten jedoch sind nach einer frischen Linux Installation Auskommentiert. Das wird durch die Raute (#) am Anfang einer Zeile symbolisiert. Eine umfängliche Dokumentation über sshd_config gibt es auf der openbsd.org.

Wir öffnen die Datei mit sudo:


__$ sudo nano /etc/ssh/sshd_config
 

Uns interessieren an dieser Stelle nur folgende Zeilen:

Auszug aus /etc/ssh/sshd_config


...
#PubkeyAuthentication yes
...
#AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2
...

Kommentieren wir #PubkeyAuthentication yes ein, indem wir das Kommentarsymbol (#) entfernen. Den Wert für AuthorizedKeysFile ändern wir zu %h/.ssh/authorized_keys. Die Variable %h steht für das home Verzeichnis des Benutzers. Wenn sich tom anmeldet, wird in seinem Benutzer Verzeichnis nach einem öffentlichen Schlüssel gesucht, um den eingereichten privaten Schlüssel zu verifizieren. In diesem Fall in der Datei /home/tom/.ssh/authorized_keys. Im letzten Kapitel haben wir hier bereits einen öffentlichen Schlüssel für tom hinterlegt.

Die gesamte /etc/ssh/sshd_config Datei sollte schließlich so aussehen:

/etc/ssh/sshd_config


#       $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

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

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

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

Include /etc/ssh/sshd_config.d/*.conf

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

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

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile     %h/.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

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

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

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange 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'.
UsePAM yes

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

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

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

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

Speichern wir die Datei noch ab (STRG+s, STRG+x) und starten den SSH Dienst neu, damit die Änderungen auch wirksam werden:


__$ sudo systemctl restart sshd
 

Damit ist die Anmeldung am Server auf zwei Arten möglich: Zum einen wie gehabt mit einem Benutzer Passwort und zum anderen mit dem privaten Schlüssel. Die erste Variante, also die reine passwortbasierte Anmeldung, werden wir im nächsten Kapitel abschalten. Bevor wir das tun, sollten wir zunächst testen, ob die neue Anmeldemethode auch funktioniert. Sonst laufen wir Gefahr, uns unwiderruflich auszusperren. Wir halten uns also die Möglichkeit offen, Konfigurationsfehler noch korrigieren zu können.

Melden wir uns zunächst ab, um den Test vollziehen zu können:


__$ logout

Je nach Betriebssystem oder Klienten variiert die Anmeldung mit Schlüssel. Nachfolgend die Beschreibung zu Windows, Mac und Linux.


Testen der schlüsselbasierten Anmeldung (Windows)

Mit PuTTY und privatem Schlüssel anmelden

Wie gewohnt öffnen wir PuTTY. Falls Du Deine Verbindung unter Sessions abgelegt hast, wählst Du diese aus und lädst sie mit load. Ansonsten trägst Du die Server IP ein wie in Putty SSH Verbindung beschrieben. In der linken Spalte unter Connections -> SSH -> Auth befindet sich das Feld Private key file for authentication. Dort hinterlegen wir den Pfad zu unserer Schlüsseldatei private-key.ppk. Danach wechseln wir wieder über die linke Spalte nach Sessions und speichern diese Einstellungen mit Save.

privaten Schlüssel hinterlegen
Session speichern
mit Server verbinden

Jetzt können wir wie gewohnt die Verbindung starten mit Open.

Mit Cygwin und privatem Schlüssel anmelden

Bei Cygwin gehst Du genauso vor, wie es die Mac und Linux Benutzer machen. Also mit dem Parameter -i, gefolgt vom Pfad zum privaten Schlüssel. Ein entscheidender Unterschied ist noch, dass das lokale Dateisystem über den Mount /cygdrive/d (für Laufwerk D) führt:


__$ ssh tom@116.203.69.89 -i /cygdrive/d/linux-server/keys/private-key
 

Testen der schlüsselbasierten Anmeldung (Mac und Linux)

Unter Mac und Linux mit privatem Schlüssel anmelden

Im Terminal geben wir zusätzlich zum Benutzernamen und der IP noch den Parameter –i mit an, gefolgt vom Pfad zum privaten Schlüssel:


__$ ssh tom@116.203.69.89 -i ~/linux-server/id_rsa
 

Vertrauen ist gut, Kontrolle ist besser

Es ist wirklich wichtig, dass die Anmeldung funktioniert, bevor Du zum nächsten Kapitel übergehst!