An vielen Standorten wird vorgeschrieben, dass Sie sich nicht mehr über Telnet mit dem System verbinden, sondern stattdessen SSH verwenden. Der Grund dafür ist eine höhere Sicherheit. Wenn Sie sich über Telnet anmelden, werden Ihr Passwort sowie alle anderen Daten im Klartext übertragen. Jeder, der über einen Netzwerkanalysator verfügt, kann Ihre Daten mitlesen. SSH hingegen verschlüsselt alle Daten und macht sie damit unlesbar. Es wird oft angenommen, dass die Telnet- und SSH-Daemons eine austauschbare Benutzererfahrung bieten; dies ist jedoch falsch.
Erstens gibt es viele verschiedene SSH- und Telnet-Clients. Diese verfügen über unterschiedliche Benutzeroberflächen und verwenden möglicherweise verschiedene Terminaltypen. Selbst bei Verwendung desselben Terminaltyps können sie sich unterschiedlich verhalten, da sie ein Terminal emulieren und Emulationen nicht perfekt sind. Aber selbst wenn man Unterschiede in der Client-Software außer Acht lässt, gibt es mehrere subtile und weniger subtile Unterschiede zwischen einer Sitzung, die mit einem Telnet-Daemon (entweder telnetd oder telnet_msd) verbunden ist, und einer, die mit dem SSH-Daemon verbunden ist. Es gibt auch eine Reihe von Fehlern, auf die ich eingehen werde. Beachten Sie, dass ich den SSH-Daemon aus dem Internet Security Pack (ISP) für OpenVOS Release 2.1.0k verwende. Dies ist die aktuellste Version, die zum Zeitpunkt der Erstellung dieses Artikels verfügbar war.
Benutzernamen:
Noch bevor Sie sich überhaupt anmelden, gibt es einen Unterschied darin, wie Telnet und SSH Ihren Benutzernamen behandeln. Die Telnet-Daemons lassen eine Anmeldung mit jeder eindeutigen Variante Ihres Benutzernamens zu, wobei bei der Eingabe die Groß- und Kleinschreibung keine Rolle spielt. Bei dem Benutzernamen Noah_Davids kann ich mich bei Telnet als Noah_D, noah_d, NoAh_D oder NoAh_DaViDs anmelden, aber bei SSH funktioniert nur Noah_Davids. Mein Alias nd verhält sich genauso. Bei Telnet kann ich nd, ND oder nD verwenden, bei SSH funktioniert jedoch nur nd.
Gruppennamen:
Die bei einer Telnet-Verbindung angezeigte Anmeldeaufforderung ermöglicht es mir, einen Gruppennamen
telnet 164.152.77.217 Wird versucht... Verbindung zu 164.152.77.217 hergestellt. Das Escape-Zeichen ist '^]'. OpenVOS Release 17.1.0ax, Modul %phx_vos#m17 Bitte anmelden 15:24:14 Anmeldung nd.SysAdmin Passwort? [Passwort hier eingeben] Noah_Davids.SysAdmin angemeldet auf %phx_vos#m17 am 12.12.12 um 15:24:55 Uhr MST. |
| Abbildung 1 – Telnet-Anmeldung mit Gruppennamen |
Das SSH-Protokoll lässt jedoch nur einen Benutzernamen zu. Wenn ich den Gruppennamen hinzufüge, wird dieser als Teil des Benutzernamens behandelt, und die Anmeldung schlägt fehl.
>system>openssl>bin>ssh [email protected] nd.SysAdminPasswort von @164.152.77.217: [Passwort hier eingeben] Zugriff verweigert, bitte versuchen Sie es erneut. Passwort von [email protected]: |
| Abbildung 2 – SSH-Anmeldung mit Gruppennamen |
Sobald Sie angemeldet sind, können Sie Ihre Gruppe über eine Unteranmeldung ändern (beachten Sie jedoch den Abschnitt zu SSL-403 weiter unten bezüglich der aktuellen Einschränkungen)
Unterschiede bei Passwörtern:
Der größte Unterschied bei der Passwortverwaltung zwischen Telnet- und SSH-Verbindungen besteht darin, dass SSH keine Passwörter für die Authentifizierung benötigt. Sie können ein Paar aus öffentlichem und privatem Schlüssel einrichten und so den gesamten Schritt der Passworteingabe überspringen. Eine Anleitung zur Einrichtung finden Sie unter „Einrichten von Stratus SSH für die Authentifizierung mit öffentlichen Schlüsseln “.
Wenn Sie Passwörter verwenden, gibt es einige Unterschiede, die Sie beachten müssen. Erstens wird das Ablaufen von Passwörtern anders gehandhabt. Bei Telnet werden Sie an der Anmeldeaufforderung gewarnt, wenn Ihr Passwort bald abläuft, und können es ändern.
telnet 164.152.77.217\
Wird versucht...\
Verbindung zu 164.152.77.217 hergestellt.\
Das Escape-Zeichen ist '^]'.
OpenVOS Release 17.1.0ax, Modul %phx_vos#m17
Bitte melden Sie sich an 14:04:40
login nd
Passwort? [aktuelles Passwort hier eingeben]
Ihr Passwort läuft in 5 Tagen ab.
Neues Passwort (erste Eingabe)?
|
| Abbildung 3 – Warnung/Eingabeaufforderung zum Ablauf des Passworts für die Telnet-Verbindung |
SSH gibt eine Warnung aus, aber Sie haben keine Möglichkeit, dies zu ändern. Sie müssen den Befehl `change_password` verwenden, um Ihr Passwort ungültig zu machen, wodurch Sie bei der nächsten Anmeldung gezwungen sind, Ihr Passwort zu ändern.
ssh [email protected] Passwort für [email protected]: [aktuelles Passwort hier eingeben] Ihr Passwort läuft in 5 Tagen ab. Noah_Davids.CAC hat sich am 09.01.13 um 13:06:35 MDT auf %phx_vos#m17 angemeldet. Willkommen. Bereit 13:06:35 Passwort ändern Ihr Passwort ist nicht mehr gültig. Sie müssen es bei Ihrer nächsten Anmeldung ändern. bereit 13:06:49 |
| Abbildung 4 – Warnung zum Ablauf des Passworts für die SSH-Verbindung und der Befehl „change_password“ |
Sobald Ihr Passwort abläuft (oder Sie es mit dem Befehl `change_password` ungültig gemacht haben), werden Sie aufgefordert, es zu ändern. Anders als bei Telnet ist dies nicht optional; Sie müssen Ihr Passwort an dieser Stelle ändern. Nach der Änderung Ihres Passworts werden Sie automatisch abgemeldet und müssen sich erneut anmelden.
ssh [email protected]\[email protected] Passwort: WARNUNG: Ihr Passwort ist abgelaufen. Sie müssen Ihr Passwort jetzt ändern und sich erneut anmelden! Aktuelles Passwort? [aktuelles Passwort hier eingeben] Neues Passwort (erste Eingabe)? [neues Passwort hier eingeben] Neues Passwort (zweite Eingabe)? [neues Passwort hier eingeben] Verbindung zu 164.152.77.217 geschlossen. |
| Abbildung 5 – Passwort während einer SSH-Verbindung ändern |
Ein weiterer Unterschied besteht darin, dass SSH-Verbindungen keine Challenge-Response-Passwörter unterstützen, während dies bei Telnet-Verbindungen der Fall ist.
Teilsysteme:
Wenn Sie sich zum ersten Mal über Telnet mit einem Modul verbinden, können Sie mit dem Befehl „login“ ein Subsystem
OpenVOS Release 17.1.0ax, Modul %phx_vos#m17
Bitte melden Sie sich an 11:23:40
login -form -usage
--------------------------------- Anmeldung -------------------------------
Benutzername:
-privilegiert: wie registriert
-Passwort:
-Passwort ändern: nein
-Priorität:
home:
-Modul:
-Subsystem:
|
| Abbildung 6 – Über die Telnet-Verbindung können Sie einen Subsystemnamen angeben |
Das SSH-Protokoll verfügt über keinen Mechanismus zur Angabe eines Subsystemnamens. Wenn in Ihrem Eintrag in der Registrierungsdatenbank das Flag „must_use_subsystem“ gesetzt ist, wird automatisch das erste in Ihrem Registrierungseintrag angegebene Subsystem verwendet. Ist das Bit nicht gesetzt, wird kein Subsystem verwendet. (Beachten Sie, dass vor der Version ISP 2.1.0j das erste Subsystem verwendet wurde, auch wenn das Bit „must_use_subsystem“ nicht gesetzt war.) Während die Argumente des Befehls „login“, die vor der eigentlichen Anmeldung verfügbar sind, eine Möglichkeit zur Angabe des Subsystems enthalten (siehe Abbildung 6), ist diese Option nach der Anmeldung nicht mehr verfügbar (siehe Abbildung 7).
Anmeldung – Formular – Verwendung --------------------------------- Anmeldung ------------------------------- Gruppenname: CAC -privilegiert: ja -Priorität: -Passwort: -Modul: |
| Abbildung 7 – Befehlszeilenargumente für „sub-login“ |
Die einzige Möglichkeit, nach der Anmeldung in ein Subsystem zu gelangen, besteht darin, sich per Telnet wieder mit dem System zu verbinden und sich erneut anzumelden.
telnet 127.0.0.1 Versuche... Verbunden mit 127.0.0.1. Das Escape-Zeichen ist '^]'. OpenVOS Release 17.1.0ax, Modul %phx_vos#m17 Bitte anmelden 11:37:34 Anmeldung nd -Subsystem test_ss Passwort? Noah_Davids.CAC hat sich am 12.12.13 um 11:37:49 Uhr (MST) bei %phx_vos#m17 angemeldet. Dies ist das Testsubsystem. Bereit 11:37:49 |
| Abbildung 8 – Verbinde dich per Telnet mit der Loopback-Adresse und melde dich erneut an, um zu einem Subsystem zu gelangen |
Zugangskontrolle:
Sowohl Telnet- als auch SSH-Verbindungen unterstützen TCP-Wrapper, sodass Sie den Zugriff anhand der IP-Adresse einschränken können. Bei den Telnet-Daemons sind TCP-Wrapper jedoch standardmäßig nicht aktiviert, und Sie müssen sie explizit mit dem Steuerargument -tcpwrapper_check aktivieren. Beim SSH-Daemon hingegen sind TCP-Wrapper standardmäßig aktiviert, und es gibt keine Möglichkeit, sie zu deaktivieren. Sie können sie effektiv deaktivieren, indem Sie alle SSH-Verbindungen in der Konfigurationsdatei `hosts.allow` von TCP Wrappers zulassen.
telnetd -form -usage
------------------------------- telnetd ------------------------------
-service_file: >system>stcp>telnetservice
-tcpwrapper_check: nein
-numeric: yes
|
| Abbildung 9 – Aktivieren von TCP-Wrappern im telnetd-Daemon |
telnet_msd -form -usage
------------------------------ telnet_msd ----------------------------
-network_port: 24
-max_sessions: 28
-error_severity: 2
-separate_log: yes
-log_dir: >system>stcp>logs
-vterm_starname: telnet*
-vterm_login: ja
-vterm_slave_id:
-extension: 133
-force_edit: ja
-EC_decimal_value: 8
-EL_decimal_value: 21
-tcpwrapper_check: nein
-numeric: no
|
| Abbildung 10 – Aktivieren von TCP-Wrappern im telnet_msd-Daemon |
Der sshd-Daemon unterstützt außerdem Optionen in der Datei sshd_config, mit denen Sie Benutzer oder Gruppen angeben können, denen der Zugriff über SSH gewährt (die Anweisungen „AllowUsers“ und „AllowGroups“) oder verweigert werden soll (die Anweisungen „DenyUsers“ und „DenyGroups“). Mit diesen Anweisungen können Sie Benutzernamen, Quelldomänen oder Kombinationen davon angeben. Es ist möglich, noah_davids von corp.stratus.com zuzulassen, den Zugriff von az.stratus.com jedoch zu verweigern.
Zugelassene Benutzer: *@*.stratus.com Abgelehnte Benutzer: *@*az.stratus.com |
| Abbildung 11 – Beispiel für die Anweisungen „AllowUsers“ und „DenyUsers“ in der Datei „sshd_config“ |
>system>openssl>bin>ssh [email protected]\ [email protected] Passwort:\ \ Zugriff verweigert, bitte versuchen Sie es erneut.\ [email protected] Passwort: |
| Abbildung 12 – Anmeldung über phxtest-m15.az.stratus.com aufgrund der Anweisung „DenyUsers“ verweigert |
Befehlsumgebung:
Sobald Sie angemeldet sind, gelangen Sie bei einer Telnet-Verbindung in die Standard-VOS-Befehlsumgebung. Mit SSH kann ein Administrator entweder die Standard-Befehlsumgebung oder die Bash-Shell-Umgebung festlegen. Dies geschieht anhand der Portnummern.
d sshservices %phx_vos#m17_mas>opt>openssl>etc>sshservices 13.12.12 12:31:31 MST ssh "window_term" "" "login" 1 1 s$pt_log.m16 ssh2200 "window_term" "-shell" "bash" 1 1 s$pt_log.m16 |
| Abbildung 13 – Datei „sshservices“: Port 22 ist die Standard-VOS-Befehlszeile, Port 2200 ist die Bash-Shell |
>system>openssl>bin>ssh [email protected] -p 2200 [email protected] Passwort: Willkommen. sh-2.05$ |
| Abbildung 14 – SSH-Verbindung über Port 2200 und Aufruf einer Bash-Shell |
Umgebungsvariablen:
Standardmäßig werden bei Telnet-Verbindungen nur 6 Umgebungsvariablen gesetzt, während bei SSH-Verbindungen 12 gesetzt werden
env HOME LOGNAME=root PATH=.:/system/command_library:/system/applications_library:/system/maint_library +y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml +2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library +:/system.17.1/gnu_library/bin VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m +ysql:/system/stcp/include_library/compat:/system/include_library VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/ +stcp/object_library/complib:/system/posix_object_library/pthread:/system/posix_ +object_library:/system/c_object_library:/system/object_library TERM=vt100 |
| Abbildung 15 – In einer Telnet-Verbindung festgelegte Umgebungsvariablen |
env HOME PATH=.:/system/command_library:/system/applications_library:/system/maint_librar +y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml +2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library\ +:/system.17.1/gnu_library/bin VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m +ysql:/system/stcp/include_library/compat:/system/include_library VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/ +stcp/object_library/complib:/system/posix_object_library/pthread:/system/posix_ +object_library:/system/c_object_library:/system/object_library\ TERM=vt100\ TZ=mst+07:00:00\ USER=Noah_Davids\ LOGNAME=Noah_Davids\ MAIL=/var/spool/mail/Noah_Davids\ SHELL=/bin/sh SSH_CONNECTION=164.152.77.34 49573 164.152.77.217 22 SSH_TTY=#s$pt_log.m16_3 |
| Abbildung 16 – In einer SSH-Verbindung festgelegte Umgebungsvariablen |
Gerätetypen:
Letztendlich handelt es sich hierbei nicht wirklich um einen Unterschied zwischen Telnet und SSH, sondern zwischen den Daemons „telnetd“ und „sshd“ einerseits und dem Daemon „telnet_msd“ andererseits. Sowohl „telnetd“ als auch „sshd“ verwenden „window_term“-Geräte, während „telnet_msd“ „vterm“-Geräte nutzt. Es gibt einige Unterschiede zwischen der Art und Weise, wie vterm- und window_term-Geräte mit bestimmten Funktionstasten (wie CANCEL) an der Befehlszeile umgehen, und der Art und Weise, wie sie die rohe Bildschirmausgabe verarbeiten. Einige Anwendungen, die eigene Formulare erstellen und noch nicht auf die neuen s$control-OP_CODES aktualisiert wurden, stellen diese Formulare bei Verwendung von window_term-Geräten nicht korrekt dar. Die zweitbeste Möglichkeit, mit diesen Anwendungen umzugehen, besteht darin, einen SSH-Tunnel für die Verbindung zum System zu verwenden; der Tunnel wird dann so konfiguriert, dass er eine Verbindung zum telnet_msd-Daemon herstellt. Die beste Lösung ist natürlich, die Anwendung zu aktualisieren, damit sie die neuen OP_CODES verwendet.
Neben den oben genannten Unterschieden, die Telnet und SSH eigen sind, gibt es einige Fehler, die in einer zukünftigen Version behoben werden.
ssl-403 Verfügbare Gruppen:
Bei einer Verbindung über Telnet stehen alle in Ihrem Registrierungseintrag angegebenen Gruppen für Unteranmeldungen zur Verfügung, bei SSH hingegen nur die ersten fünf Gruppen.
Da ich in den Gruppen CAC, SysAdmin, Group_3, Group_4, Group_5 und Group_6 registriert bin, kann ich über eine Telnet-Verbindung ein Unter-Login mit einer beliebigen dieser Gruppen durchführen.
telnet 164.152.77.217 Wird versucht... Verbunden mit 164.152.77.217. Das Escape-Zeichen ist '^]'. OpenVOS Release 17.1.0ax, Modul %phx_vos#m17 Bitte melden Sie sich an 15:38:02 login nd Passwort? [aktuelles Passwort hier eingeben] Noah_Davids.CAC hat sich am 12.12.12 um 15:38:08 Uhr (MST) bei %phx_vos#m17 angemeldet. Anmeldung Group_5 Noah_Davids.Group_5 hat sich am 12.12.12 um 15:39:39 Uhr (MST) bei %phx_vos#m17 angemeldet. Bereit 15:39:39 Abmelden Anmeldung Group_6 Noah_Davids.Group_6 hat sich am 12.12.12 um 15:40:13 Uhr (MST) bei %phx_vos#m17 angemeldet. bereit 15:40:13 |
| Abbildung 17 – Unterkonten mit Telnet-Verbindung |
Wenn ich jedoch bei SSH versuche, „Group_6“ zu verwenden, erhalte ich eine Fehlermeldung.
>system>openssl>bin>ssh [email protected]\[email protected] Passwort: Noah_Davids.CAC hat sich am 12.12.12 um 15:41:02 MST auf %phx_vos#m17 angemeldet. bereit 15:41:02 Anmeldung Group_5 Noah_Davids.Group_5 hat sich am 12.12.12 um 15:41:24 MST auf %phx_vos#m17 angemeldet. bereit 15:41:24 Abmelden Anmeldung Group_6 Anmeldung: Ungültiges Format im Argument. Group_6 ist für group_name nicht zulässig. Bereit 15:41:59 |
| Abbildung 18 – Unterkonten mit SSH-Verbindung |
ssl-418 – Die Ebene „sub_process_level“:
Anmeldungen über Telnet haben eine Subprozess-Stufe von 0, während Anmeldungen über SSH eine Subprozess-Stufe von 3 haben.
telnet 164.152.77.217
Wird versucht...
Verbunden mit 164.152.77.217.
Das Escape-Zeichen ist '^]'.
OpenVOS Release 17.1.0ax, Modul %phx_vos#m17
Bitte anmelden 14:15:34
login nd
Passwort? [aktuelles Passwort hier eingeben]
Noah_Davids.CAC hat sich am 12.12.13 um 14:15:39 mst auf %phx_vos#m17 angemeldet.
bereit 14:15:39
display_line (process_info sub_process_level)
0
Bereit 14:15:49
|
| Abbildung 19 – In einer Telnet-Verbindung festgelegte Subprozess-Ebene |
>system>openssl>bin>ssh [email protected]\[email protected] Passwort: [aktuelles Passwort hier eingeben] Noah_Davids.CAC hat sich am 12.12.13 um 14:12:23 Uhr (MST) auf %phx_vos#m17 angemeldet. bereit 14:12:23 display_line (process_info sub_process_level) 3 bereit 14:12:37 |
| Abbildung 20 – In einer SSH-Verbindung festgelegte Subprozess-Ebene |
Update vom 14. Januar 2013: Es hat sich herausgestellt, dass dies ein Feature und kein Fehler ist. Der sshd-Prozess wird erstens bei Ausführung von start_process verzweigt, um den Listening-Prozess zu starten, zweitens, wenn sshd die Verbindung akzeptiert, und drittens, wenn der Benutzer-Login-Prozess erstellt wird. Telnet verwendet einen anderen Mechanismus zum Starten des Benutzerprozesses, der keine verzweigten Prozesse zur Folge hat.
Probleme mit der Zeitzone:
Abschließend möchte ich noch darauf hinweisen, dass es eine Reihe von Problemen im Zusammenhang mit der Umstellung zwischen Sommer- und Winterzeit bzw. ganz allgemein mit dem Wechsel zwischen Zeitzonen gab. Bei über SSH angemeldeten Sitzungen wurden die neuen Standardeinstellungen nicht übernommen. Diese Probleme sollten in der aktuellen Version (2.1.0k) alle behoben sein.
