Files
MyLinuxBook/Kapitel9/RemoteVerbindung.tex
Uwe Schimanski beb969dc3d First Version
2024-10-14 17:00:20 +02:00

449 lines
18 KiB
TeX
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
\section{VNC Server}
\begin{flushleft}
Wie immer gibt es verschiedene M"oglichkeiten, den VNC Server einzurichten. Die Entscheidung,
welche M"oglichkeit zur Anwendung kommen soll, h"angt von den Einsatzbedingungen ab.
\subsection{Verbindung für alle}
\subsubsection{OpenSuSE}
Es gibt zwei M"oglichkeiten, allen Anwendern den Zugriff auf dem Computer zu erlauben. Dazu rufen
wir das Programm {\ttfamily YAST} auf und unter Punkt Administration {\ttfamily von einem entfernten Rechner}
wird der Punkt {\ttfamily Verwaltung via entfernten Rechner (remote) erlauben} aktiviert. Bevor
wir den Befehl {\ttfamily rcxdm restart} ausführen, wird in der Datei
{\ttfamily /etc/opt/kde3/share/config/kdm/kdmrc} unter dem Punkt {\ttfamily [Xdmcp]} die Variable {\ttfamily Enable} auf
{\ttfaily true} gesetzt. Danach kann der Dienst {\ttfamily rcxdm} neu gestart werden. Der Computer ist nun auf den
Ports 5901 (VNC) und 5801 (VNC über Browser) zu erreichen.\\[2ex]
In der zweiten M"oglichkeit kann man andere Aufl"osungen für VNC freischalten. Der Port 5x01 liefert
die Aufl"osung 1024x768, 5x02 1280x1024 und 5x03 1600x1200. Hierzu rufen wir wieder das
Programm {\ttfamily YAST} auf und unter {\ttfamily Netzwerkdienste Netzwerkdienste (xinetd)} werden alle
VNC Dienste ({\ttfamily vnc1, vnc2, vnc3, vnchttp1, ..}) aktiviert. Auch hier muss sie Datei {\ttfamily kdmrc}
editiert und mit {\ttfamily rcxdm} neu gestartet werden.\\[2ex]
Der VNC Server muss im Runlevel 5 laufen, da es sonst keinen laufenden X-Server gibt.
\subsection{Verbindung für einen}
Anstatt generell die Freigabe des Computers zu machen, kann auch jeder einzelne Benutzer den
seinen Desktop freigeben. Hierbei wird der VNC Server von Hand gestartet. Nach der Eingabe des
Befehls {\ttfamily vncserver} wird man nach einem Passwort gefragt. Dieses Passwort wird bei dem
Verbindungsaufbau abgefragt. Bei dem erfolgreichen starten des Servers erh"alt man die Meldung,
{\ttfamily 'the new 'X' desktop is tux:5'}. Anschließend ist die Datei {\ttfamily ~/.env/xstartup} zu editieren.
In der letzten Zeile steht der anzuzeigende Desktop. Standardm"a"sig ist der {\ttfamily twm} aktiviert. M"ochte man
einen anderen Desktop, so kann man für {\ttfamily KDE} den Wert {\ttfamily startkde}, für {\ttfamily Gnome gnome},
f"ur {\ttfamily XFCE} dann {\ttfamily startxfce4} und bei {\ttfamily Openbox openbox}. Das {\ttfamily \& Zeichen}
am Ende darf nicht gel"o"scht werden.\\[2ex]
Den VNC Server kann man mit dem Befehl {\ttfamily vncserver kill tux:5} beenden.\\
M"ochte man das starten des VNC Servers automatisieren, so ist der Aufruf in der {\ttfamily .profile} Datei
vorzunehmen.
\end{flushleft}
\section{SSH}
\begin{flushleft}
Eine Remote Verbindung mittels {\ttfamily SSH} ist einer {\ttfamily Telnet} Verbindung vorzuziehen, da im Gegensatz zu
einer {\ttfamily Telnet} Session die "Ubertragung verschl"uüsselt durchgeführt wird.
In der nachfolgenden Tabelle ist ein Auszug der Optionen für SSH (aus Linux User 11.2017).
\begin{table}[ht]
\begin{tabular}{|l|p{12cm}|} % l => Text left, c => center, r => right, p => zeilenumbruch
\hline \rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline -2 & Nur Protokollversion 2\\
\hline -4 & Nur IPv4-Adressen\\
\hline -6 & Nur IPv6-Adressen\\
\hline -b IP & IP-Adresse verwenden\\
\hline -C & Kompression verwenden\\
\hline -F Datei & Angabe alternative Konfigurationsdatei\\
\hline -i Datei & Angabe der Private-Key Datei\\
\hline -p Port & Angabe der Portnummer\\
\hline -v & Ausgabe der Meldungen\\
\hline -t & Interaktive Men"us\\
\hline -w Rechner:Port & Weiterleiten der Standardein- und -ausgabe vom lokalen System zum entfernten System\\
\hline -X & Display ungesch"utzt umleiten\\
\hline -Y & Display gesch"utzt umleiten\\
\hline -N & F"ur Tunnelzwecke, kein Kommand\\
\hline
\end{tabular}
\caption{Optionen SSH}
\end{table}
\subsection{SSH Konfiguration}
Die Konfiguration von SSH wird in der Datei {\ttfamily sshd_config} im Verzeichnis {\ttfamily /etc/ssh} vorgenommen.
In der nachfolgenden Tabelle sind einige Optionen aufgelistet.
\begin{table}[ht]
\begin{tabular}{|l|l|p{12cm}|} % l => Text left, c => center, r => right, p => zeilenumbruch
\hline \rowcolor{hellgrau}\emph{\textbf{Schl"ussel}} & \emph{\textbf{Wert}} & \emph{\textbf{Beschreibung}}\\
\hline PermitRootLogin & no / yes & Root-Zugang erlauben\\
\hline AllowGroups & Gruppe & Nur Benutzer in Gruppe d"urfen sich anmelden.\\
\hline AllowUsers & User & Nur Benutzer User darf sich anmelden\\
\hline PasswordAuthentication & no / yes & Unterbindet das Anmelden mit einem Passwort\\
\hline ChallengeResponseAuthentication & no / yes & Nur "uber einen Schl"ussel anmelden\\
\hline PermitEmptyPasswords & no / yes & Keine leeren Kennw"orter erlauben\\
\hline Port & Nummer & Abweichenden Port festlegen\\
\hline ListenAddress & IP & Netzwerkschnittstelle benutzen, je IP-Adresse eine Zeile\\
\hline MaxSessions & &Auf kritischen Systemen so niedrig wie m"oglich (1)\\
\hline MaxStartups & &Auf kritischen Systemen so niedrig wie m"oglich (1)\\
\hline
\end{tabular}
\caption{Optionen SSH}
\end{table}
In der nachfolgenden Tabelle sind die wichtigsten Client Dateien für SSH aufgelistet. Sie befinden sich
alle im Verzeichnis {\ttfamily ~/.ssh}.
\begin{table}[ht]
\begin{tabular}{|l|p{12cm}|} % l => Text left, c => center, r => right, p => zeilenumbruch
\hline \rowcolor{hellgrau}\emph{\textbf{Name}} & \emph{\textbf{Beschreibung}}\\
\hline config & Benutzerdefinerte Einstellungen, "uberschreibt die Systemeinstellungen\\
\hline known_hosts & Liste der Systeme, wo schon eine Verbindung aufgebaut wurde und der Schl"ussel akzeptiert worden ist.\\
\hline authorized_keys & "Offentlicher Schl"ussel, wenn der Rechner als Server fungiert.\\
\hline id_rsa & Privater Schl"ussel\\
\hline id_rsa.pub & "Offentlicher Schl"ussel\\
\hline
\end{tabular}
\caption{Optionen SSH}
\end{table}
\subsection{Root Login disable}
In der Datei {\ttfamily /etc/ssh/sshd_config} ist der Eintrag {\ttfamily PermitRootLogin} auf
{\ttfamily no} zu setzten, um das Root Login zu verbieten. Für {\ttfamily PermitRootLogin}
kann man folgende Parameter setzen:\\
\begin{table}[ht]
\begin{tabular}{|l|p{12cm}|} % l => Text left, c => center, r => right, p => zeilenumbruch
\hline \rowcolor{hellgrau}\emph{\textbf{Parameter}} & \emph{\textbf{Beschreibung}}\\
\hline yes & Anmelden am System erlaubt\\
\hline no & Anmelden am System nicht erlaubt\\
\hline without-password & Das Anmelden ist ohne Passwort m"oglich\\
ßhline forced-commands-only & Anmelden mit public key m"oglich, aber nur in Verbindung mit der command Option.\\
\hline
\end{tabular}
\caption{Parameter PermitRootLogin}
\end{table}
\subsection{User Verbindungen}
Der Eintrag {\ttfamily AllowUsers} in der Datei {\ttfamily /etc/ssh/sshd_config} listet alle zugelassenen User auf,
die eine SSH Verbindung aufbauen d"urfen.\\[2ex]
Die Syntax für den Eintrag lautet: {\ttfamily AllowUsers <user1> <user2>}
Ebenso muss die Variable {\ttfamily PasswordAuthentication} auf {\ttfamily yes} gesetzt werden.
\subsectin{SSH Banner}
M"ochte man bei einer SSH Verbindung ein Banner anzeigen, so muss in der Datei
{\ttfamily /etc/ssh/sshd_config} die Zeile {\ttfamily #Banner} auskommentiert und der Pfad zur Banner Datei
angegeben werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Banner, label=lst:bash]
uws@tux>grep Banner /etc/ssh/sshd_config
Banner /etc/ssh/sshd-banner
uws@tux>cat /etc/ssh/sshd-banner
*************************************************
WARNING:
========
Only authorized User to used this system.
Are you not authorized User, leave this session.
*************************************************
\end{lstlisting}
\subsection{SSH Dienst}
Bei jeder "Anderung an der SSH Konfiguration muss der Dienst neu gestartet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Start SSH Service, label=lst:bash]
root@tux>/etc/init.d/sshd restart
root@tux>service sshd restart
root@tux>#unter SystemD
root@tux>systemctl restart sshd
\end{lstlisting}
\subsection{X11 Forwarding}
M"ochte man die Graphische Ausgabe auf seinem Rechner haben, so schaltet man auf dem
Zielrechner das {\ttfamily X11Forwarding} ein. In der Datei {\ttfamily /etc/ssh/sshd_config} werden die Parameter
{\ttfamily X11Forwarding yes, X11DisplayOffset 10} und {\ttfamily X11UseLocalhost yes} aktiviert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel X11 Forwarding, label=lst:bash]
uws@tux>ssh -X -C uws@tux01
uws@tux01>export DISPLAY='tux:10.0'
uws@tux01>xclock &
\end{lstlisting}
\subsection{SSH Key erstellen}
Einen Schl"ussel kann man mit {\ttfamily ssh-keygen} erstellen. Es werden zwei Schl"ussel erstellt, ein
{\ttfamily Privater} und ein {\ttfamily Public} Schl"ussel. Den Public Schl"ussel kann an andere Remote Systeme
gesendet werden. L"asst man bei der Passwort Abfrage das Passwort leer, so kann man sich sp"ater an
dem Remote System ohne Passwort anmelden. Kann gut in Scripte verwendet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create SSH Key, label=lst:bash]
uws@tux>ssh-keygen t rsa b 4096
\end{lstlisting}
-t => Typ des Schl"ussels, hier RSA\\
-b => L"ange des Schl"ussels, hier 4096 Bits. Je l"anger, desto schwerer zu entschl"usseln.
\subsection{SSH Key senden}
Den erstellen Public Key Schl"ussel kann man mit {\ttfamily ssh-copy-id} zu den Remote Systemen "ubertragen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Send SSH Key, label=lst:bash]
uws@tux>ssh-copy-id <user>@<hostname>
\end{lstlisting}
\subsection{SSH Key entfernen}
Hat sich der SSH Key eines Remote Zieles ver"andert, so kann man den SSH Key aus der Datei
{\ttfamily known_host} mit dem folgenden Befehlt entfernen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Delete SSH Key, label=lst:bash]
uws@tux>ssh-keygen R tux10 f /home/uws/.ssh/known_hosts
\end{lstlisting}
\subsection{Alias}
In der Datei {\ttfamily ~/.ssh/config} k"onnen Verbindungen definiert werden, die dann mit einem Alias
aufgerufen werden. Die config-Datei darf nur f"ur den User bearbeitbar sein. Es muss unbedingt mit
{\ttfamily chmod 600} auf diese Datei gemacht werden, sonst kommt es zu einer Fehlermedung.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Alias, label=lst:bash]
uws@tux>cat ~/.ssh/config
Host Remote1
HostName 10.81.3.16
User Carl
CheckHostIP no
uws@tux>ssh Remote1
\end{lstlisting}
\subsection{TCP-Stealth}
Wird in der Datei {\ttfamily /etc/ssh/sshd_config} die Option {\ttfamily TCPStealthSecret} auf dem Server / Client
aktiviert, so klappt es mit der Verbindung. Ansonsten wird sie abgelehnt. Der eingetragene Wert ist ein
Autorisierung-Token. Nur wenn beide gleich sind, wird eine Verbindung ausgebaut.
Diesen Modus kann man nur einschalten, wenn auch der Kernel mit {\ttfamily TCPStealthSecret} kompiliert
worden ist.
\subsection{Match}
Mit Match kann man Parameter gezielt setzen. Entweder für User, Gruppen, Computer, Ports,
Adressen oder Local Adressen. Die Syntax eines Match Blocks ist:
\listBash
\begin{lstlisting}[captionpos=b, caption=Syntax Match, label=lst:bash]
Match <Condition> <Value>
Parameter <new Value>
Parameter <new Value>
\end{lstlisting}
In dem Block kann man folgende Parameter setzen.
\begin{table}[ht]
\begin{tabular}{|l|l|p{12cm}|} % l => Text left, c => center, r => right, p => zeilenumbruch
%\hline \rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
AcceptEnd & AllowAgentForwarding& AllowGroups\\
AllowStreamLocalForwarding & AllowTcpForwarding & AllowUsers\\
AuthenticationMethods & AuthorizedKeyCommand & AuthorizedKeyCommandUser\\
AuthorizedKeysFile & AuthorizedPrincipalsCommand & AuthorizedPrincipalsCommandUser\\
AuthorizedPrincipalsFile & Banner & ChrootDirectory\\
DenyGroups & DenyUsers & ForceCommand\\
GatewayPorts & GSSAPIAuthentication & HostbasedAcceptKeyTypes\\
HostbasedAuthentication & HostbasedUsesNameFromPacketOnly & IPQoS\\
KbdInteractiveAuthentication & KerberosAuthentication & MaxAuthTries\\
MaxSessions & PasswordAuthentication & PermitEmptyPasswords\\
PermitOpen & PermitRootLogin & PermitTTY\\
PermitTunnel & PermitUserRC & PubkeyAcceptedKeyTypes\\
PubkeyAuthentication & RekeyLimit & RevokedKeys\\
RhostsRSAAuthentication & RSAAuthentication & StreanLocalBindMask\\
StreamLocalBindUnlink & TrustedUserCAKeys & X11DisplayOffsett\\
X11Forwarding\\
\end{tabular}
\caption{Parameter Match Block}
\end{table}
Als Beispiel wird ein Anmelden als Root ohne Passwort erlaubt und ein User muss sich mit Kennwort
anmelden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Match, label=lst:bash]
PermitRootLogin no
PasswordAuthentication no
AllowUsers paul root
Match Address 192.168.70.0/24,192.168.8.0/24,127.0.0.1
PermitRootLogin without-password
PasswordAuthentication yes
\end{lstlisting}
\subsection{2.13 Chroot für Sftp}
Mit {\ttfamily ChrootDirectory} kann man wie in Linux eine Chroot Umgebung für Sftp-User einrichten. In dieser
Umgebung k"onnen die Sftp-User nicht die anderen Verzeichnisse sehen und auch nicht dorthin wechseln.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel SFTP Chroot, label=lst:bash]
root@tux># create group sftpuser
root@tux>groupadd sftuser
root@tux># create user paul
root@tux>useradd d /sftp/paul G sftpuser s /bin/false paul
root@tux># create directories and permissions
root@tux>mkdir p /sftp/paul
root@tux>chown R root:root /sftp
root@tux>chmod R 775 /sftp
root@tux>mkdir p /sftp/paul/daten
root@tux>chown paul:sftuser /sftp/paul/daten
root@tux>chmod 775 /sftp/paul/daten
root@tux># edit /etc/ssh/sshd_config
# disable next
#Subsystem sftp /usr/lib/ssh/sftp-server
# new value
Subsystem sftp internal-sftp
# ChrootPermission root:root 775
# Directorys under Chroot, paul:sftpuser 775
Match User paul
ChrootDirectory /sftp/paul
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
Banner /etc/ssh/sftp.txt
ForceCommand internal-sftp
root@tux># restart sshd service
root@tux>systemctl restart sshd
\end{lstlisting}
Subsection{2.14 Error}
Taucht in der {\ttfamily /var/log/messages} folgender Fehler auf:
{\ttfamily sshd syslogin_perform_logout:logout() returned an error}, so ist die Datei {\ttfamily utmp} im
Verzeichnis {\ttfamily /var/run} neu anzulegen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Recreate utmp, label=lst:bash]
root@tux>rm /var/run/utmp
root@tux>touch /var/run/utmp
\end{lstlisting}
\subsection{2.15 Beispiele}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele, label=lst:bash]
uws@tux># Dateien packen und senden
uws@tux>tar czvf - <path> | ssh user@host cd <path> && tar xzpvf
uws@tux># Dateien holen und entpacken
uws@tux>ssh user@host cd <path> && tar czvf - <path> | tar -xzfv -
\end{lstlisting}
\end{flushleft}
\section{Displaymanager}
\subsection{Konfiguration}
\begin{flushleft}
Die Variable {\ttfamily DISPLAYMANAGER_REMOTE_ACCESS} wird auf {\ttfamily yes} gesetzt, die sich in der Datei
{\ttfamily /etc/sysconfig/displaymanager} befindet. Danach in der Datei {\ttfamily /etc/X11/xdm/Xaccess} das
Kommentarzeichen aus der Zeile {\ttfamily \* #any host can get a login\ entfernen.
\subsection{3.2 Dienst starten}
Nach einer "Anderung in der Datei {\ttfamily displaymanager} m"ussen folgende Schritte f"ur OpenSuSE gemacht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Reconfig, label=lst:bash]
root@tux>SuSEconfig
root@tux>rcxdm restart
\end{lstlisting}
Bei "Anderungen in der Datei {\ttfamily Xaccess} muss der Dienst neu gestartet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Restart KDM Service, label=lst:bash]
root@tux>kdm Stopp
root@tux>kdm start
root@tux># SystemD Systeme
root@tux>systemctl restart kdm
\end{lstlisting}
\subsection{Root Login GDM}
Standardm"a"sig kann man sich nicht mit dem User {\ttfamily root} an einem {\ttfamily Oracle Linux Server} anmelden
(GUI). Damit man sich anmelden kann, muss in der Datei {\ttfamily /etc/pam.d/gdm} die folgende Zeile
auskommentiert werden:
\listBash
\begin{lstlisting}[captionpos=b, caption=Datei gdm, label=lst:bash]
auth required pam_succeed_if.so user != root quit
\end{lstlisting}
\subsection{ Anmelde Bildschirm}
Damit man bei einer Remote Anmeldung (GUI) die Login Oberfl"ache angezeigt bekommt, f"ugt man in
der Datei {\ttfamily /etc/gdm/custom.conf} im Abschnitt {\ttfamily [xdmcp]} den Eintrag {\ttfamily Enable=true} ein.
\end{flushleft}
\section{SCP}
\begin{flushleft}
Um Dateien zwischen von einem Linux Rechner auf einem anderen Rechner zu kopieren, so gibt es
hierzu den Befehl {\ttfamily scp}. In den nachfolgenden Beispielen werden zuerst Dateien von einem Rechner
zu einem anderen kopiert. Im zweiten Beispiel wird eine Verbindung zu dem Zielrechner mit einem
anderen Benutzername hergestellt. Und im letzten Beispiel werden Dateien von einem entfernten
Rechner kopiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele scp, label=lst:bash]
uws@tux>scp /home/uws/transfer/*.jpg tux01:/home/uws/transfer
uws@tux>scp /home/uws/transfer*.jpg jan@tux01:/home/jan/transfer
uws@tux>scp jan@tux01:/home/jan/bin/*.sh uws@tux:/home/uws/bin
\end{lstlisting}
In der nachfolgenden Tabelle sind einige Optionen Optionen für scp aufgelistet.
\begin{table}[ht]
\begin{tabular}{|l|p{12cm}|} % l => Text left, c => center, r => right, p => zeilenumbruch
\hline \rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline -C & Kompremieren\\
\hline -F & Datei Alternative Konfigurationsdatei\\
\hline -i & Datei Privater Schl"ussel Datei\\
\hline -l & Wert Bandbreite, Angabe in kbit/s\\
\hline -o & Option SSH-Optionen\\
\hline -P & Port Portangabe, Standard Port 22\\
\hline -p & Dateiattribute übertragen\\
\hline -q & Meldungen einschr"anken\\
\hline -r & Rekursiv kopieren, Symlinks folgen\\
\hline -v & Ausf"uhrliche Meldungen\\
\end{tabular}
\caption{Optionen scp}
\end{table}
\end{flushleft}