123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606 |
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui">
- <title>Linux-Kurs - Erweiterte Konfiguration</title>
- <link type="text/css" rel="stylesheet" href="assets/css/github-markdown.css">
- <link type="text/css" rel="stylesheet" href="assets/css/pilcrow.css">
- <link rel="shortcut icon" href="assets/favicon.ico">
- </head>
- <body>
- <article class="markdown-body"><h1 id="linux-kurs---erweiterte-konfiguration"><a class="header-link" href="#linux-kurs---erweiterte-konfiguration"></a>Linux-Kurs - Erweiterte Konfiguration</h1>
- <p><a href="https://linuxkurs.ch">https://linuxkurs.ch</a></p>
- <p>Du hast bereits gelernt wie du zusätzlich Programme installieren kannst und konntest sicherlich schon die ein oder andere neue Anwendung ausprobieren. Nun geht es darum, deinem Linux den nötigen Feinschliff zu verpassen. Dabei behandeln wir Aspekte wie die Konfiguration von Systemdiensten, Sicherheitseinstellungen, die Einrichtung von Hardwarekomponenten sowie die Installation einer weiteren Desktopumgebung.</p>
- <h1 id="ntp"><a class="header-link" href="#ntp"></a>NTP</h1>
- <p>Die Uhrzeit deines Rechners lässt sich automatisch mit Zeitservern im Internet abgleichen. Dies erfolgt beispielsweise mithilfe des Programms <strong>ntpd</strong>, welches unter Slackware Bestandteil der Distribution ist. NTP ist ein Akronym für <em>Network Time Protocol</em>. Das <em>d</em> am Ende von <em>ntpd</em> steht für Daemon. Bei einem Daemon handelt es sich um einen im Hintergrund laufende Prozess. Im Falle von <em>ntpd</em> sorgt es dafür, dass die Uhrzeit regelmässig abgeglichen wird.</p>
- <p>Zunächst muss <strong>ntpd</strong> konfiguriert werden. Dies erfolgt in der Datei <em>/etc/ntp.conf</em>. Um den Dienst nutzen zu können, reicht es aus die zu verwendenden Timeserver anzugeben. Dazu kannst du die Konfigurationsdatei als Root im Editor öffnen:</p>
- <pre class="hljs"><code>su -
- vi <span class="hljs-regexp">/etc/</span>ntp.conf</code></pre><p>Unter <em># NTP server</em> kannst du folgende Serverkonfiguration hinterlegen:</p>
- <pre class="hljs"><code>server <span class="hljs-number">0</span><span class="hljs-selector-class">.ch</span><span class="hljs-selector-class">.pool</span><span class="hljs-selector-class">.ntp</span><span class="hljs-selector-class">.org</span> iburst
- server <span class="hljs-number">1</span><span class="hljs-selector-class">.ch</span><span class="hljs-selector-class">.pool</span><span class="hljs-selector-class">.ntp</span><span class="hljs-selector-class">.org</span> iburst
- server <span class="hljs-number">2</span><span class="hljs-selector-class">.ch</span><span class="hljs-selector-class">.pool</span><span class="hljs-selector-class">.ntp</span><span class="hljs-selector-class">.org</span> iburst
- server <span class="hljs-number">3</span><span class="hljs-selector-class">.ch</span><span class="hljs-selector-class">.pool</span><span class="hljs-selector-class">.ntp</span><span class="hljs-selector-class">.org</span> iburst</code></pre><p>Dabei handelt es sich um in der Schweiz lokalisierte Server aus dem offiziellen Pool von ntp.org. Der Parameter <em>iburst</em> (initial burst) am Ende jeder Serverdefinition beschleunigt das Synchronisieren beim ersten Verbindungsaufbau.</p>
- <p>Bevor wir den Dienst aktivieren und Starten, bietet es sich an die Synchronisation einmalig manuell auszuführen, um zu grosse Abweichungen zu korrigieren. Dazu gibt es das Hilfsprogramm <strong>ntpdate</strong>. Du kannst es als Root-Benutzer unter Angabe eines der Timeserver aufrufen:</p>
- <p><code>ntpdate 0.ch.pool.ntp.org</code></p>
- <p>Mithilfe des bereits bekannten Befehls <strong>hwclock</strong> kannst du die abgeglichene Uhrzeit in das BIOS deines Computers schreiben:</p>
- <p><code>hwclock --systohc</code></p>
- <div style="page-break-after: always;"></div>
- <p>Den Dienst kannst du für den Systemstart aktivieren, indem du die Runlevel-Datei als ausführbar markierst:</p>
- <p><code>chmod +x /etc/rc.d/rc.ntpd</code></p>
- <p>Der manuelle Start im laufenden System erfolgt über den Aufruf des Startscriptes mit dem entsprechenden Parameter</p>
- <p><code>/etc/rc.d/rc.ntpd start</code></p>
- <p>Mithilfe des <strong>ntpq</strong> Befehls kannst du unter Angabe des Parameters <strong>-p</strong> (für <em>peers</em>) ausgeben lassen, welche Timeserver verwendet werden:</p>
- <p><code>ntpq -p</code></p>
- <p class="img-container"><img src="./slackware_ntpq.png" alt=""></p>
- <h1 id="bash-konfiguration"><a class="header-link" href="#bash-konfiguration"></a>BASH Konfiguration</h1>
- <p>Die globalen BASH Einstellungen findest du in der Datei <em>/etc/profile</em>. Sie werden bei jedem interaktiven Login angewendet.</p>
- <p>Schaue dir die Datei einmal im Betrachtungsmodus des Editors <em>vim</em> an:</p>
- <p><code>view /etc/profile</code></p>
- <p class="img-container"><img src="./slackware_etc_profile.png" alt=""></p>
- <p>Zur persönlichen Anpassung der BASH lassen sich die Konfigurationsdateien <em>~/.bash_profile</em> und <em>~/.bashrc</em> verwenden. Die Datei <em>~/.bash_profile</em> hast du bereits im Kursteil <em>Erste Schritte</em> kennengelernt. <em>~/.bash_profile</em> wird genau wie <em>/etc/profile</em> nur bei interaktiven Login-Shells geladen, also immer dann, wenn sich der Benutzer am System anmeldet. Die Datei <em>~/.bashrc</em> wird bei interaktiven nicht Login-Shells verarbeitet, wie zum Beispiel beim Start eines Terminalprogramms. </p>
- <p>Um die in der <em>.bashrc</em> Datei gemachten Konfigurationseinstellungen auch bei Logins zu aktivieren, kannst du die <em>.bashrc</em> in der <em>.bash_profile</em> Datei <em>sourcen</em>.</p>
- <div style="page-break-after: always;"></div>
- <p>Öffne dazu als Benutzer ein Terminal und erstelle mit dem Editor eine neue <em>.bash_profile</em> Konfigurationsdatei in deinem Heimatverzeichnis:</p>
- <p><code>vi ~/.bash_profile</code></p>
- <p>Den Inhalt kannst du wie folgt definieren:</p>
- <pre class="hljs"><code><span class="hljs-keyword">if</span> [ -f ~<span class="hljs-string">/.bashrc</span> ]; then
- . ~<span class="hljs-string">/.bashrc</span>
- fi</code></pre><p>Speichere die Datei ab und verlasse den Editor. Die if-Abfrage ermittelt mithilfe des <strong>test</strong> Kommandos (welches nicht explizit aufgeführt werden muss) über den Parameter <strong>-f</strong> ob die Datei <em>~/.bashrc</em> existiert und ob es sich dabei um eine reguläre Datei handelt. Falls ja, wird diese Datei <em>gesourced</em>, also nachgeladen. Das erkennst du an dem Punkt und dem Leerzeichen vor der Angabe von <em>~/.bashrc</em> in der zweiten Zeile.</p>
- <p>Das <em>fi</em> beendet die if-Abfrage.</p>
- <p>Erstelle nun die <em>~/.bashrc</em> Konfigurationsdatei. </p>
- <p><code>vi ~/.bashrc</code></p>
- <p>Zum Einstieg kannst du einige Parameter einfügen. </p>
- <p><strong>HINWEIS</strong>: unter der grafischen Oberfläche kannst du Text ganz einfach mit der linken Maustaste markieren und durch Klicken der mittleren Maustaste in einem beliebigen Programm wieder einfügen. </p>
- <pre class="hljs"><code>shopt -q login_shell || . /etc<span class="hljs-built_in">/profile
- </span>shopt -s checkwinsize
- <span class="hljs-builtin-name">export</span> <span class="hljs-attribute">PS1</span>=<span class="hljs-string">'\u@\h:\w\$ '</span>
- [[ <span class="hljs-string">"<span class="hljs-variable">$TERM</span>"</span> = <span class="hljs-string">"xterm"</span> || <span class="hljs-string">"<span class="hljs-variable">$TERM</span>"</span> = <span class="hljs-string">"xterm-256color"</span> ]] && <span class="hljs-builtin-name">export</span> <span class="hljs-attribute">PROMPT_COMMAND</span>=<span class="hljs-string">'echo -ne "\033]0;$USER@$HOSTNAME\007" '</span>
- alias <span class="hljs-attribute">rm</span>=<span class="hljs-string">'rm -i'</span></code></pre><p>Speichere die Datei ab und verlasse den Editor. </p>
- <h2 id="globale-umgebungseinstellungen"><a class="header-link" href="#globale-umgebungseinstellungen"></a>Globale Umgebungseinstellungen</h2>
- <p>In der Datei <em>/etc/profile/</em> und im Verzeichnis <em>/etc/profile.d</em> werden globale Umgebungseinstellungen definiert. Diese werden standardmässig bei jeder interaktiven Login-Shell geladen. Um sie auch bei interaktiven nicht Login-Shells einzulesen, prüfen wir zunächst mit dem <strong>shopt</strong> BASH-builtins ob es sich um eine interaktive Login-Shell handelt. BASH-builtins sind Befehle, die direkt in die BASH integriert sind.</p>
- <div style="page-break-after: always;"></div>
- <p>Für <strong>shopt</strong> gibt es eine Hilfeseite, die du dir über das <strong>help</strong> Kommando anzeigen lassen kannst:</p>
- <p><code>help shopt</code></p>
- <p class="img-container"><img src="./slackware_bash_help.png" alt=""></p>
- <p>Du siehst, dass über den Parameter <strong>-q</strong> die Ausgabe unterdrückt wird.</p>
- <p>Wenn du den Befehl in einem Terminal ausführst, wirst du keinerlei Ausgabe erhalten. Lediglich der sogenannte <em>Return-Code</em> wird zurückgeliefert. Diesen kannst du dir mithilfe von <code>echo $?</code> anzeigen lassen. <strong>0</strong> ist gleichbedeutend mit <em>true</em> also wahr. Probiere den Befehl in einer interaktiven nicht Login-Shell aus, zum Beispiel mit deinem normalen Benutzeraccount in einem Xfce-Terminal:</p>
- <pre class="hljs"><code><span class="hljs-built_in">shopt</span> -q login_shell
- <span class="hljs-built_in">echo</span> $?</code></pre><p>Der Rückgabewert ist <strong>1</strong>, also nicht <em>true</em>. Führe den gleichen Befehl nun in einer interaktiven Login-Shell aus. Du kannst diese beispielsweise mit <code>su -</code> für den Benutzer Root öffnen:</p>
- <pre class="hljs"><code>su -
- <span class="hljs-built_in">shopt</span> -q login_shell
- <span class="hljs-built_in">echo</span> $?</code></pre><p>Der Rückgabewert ist <strong>0</strong> und somit <em>true</em>, da es sich um eine interaktive Shell handelt. Bei dem <code>||</code> handelt es sich um die logische ODER-Verküpfung. Diese stellt sicher, dass der darauf folgende Befehl nur ausgeführt wird, wenn der erste Befehl nicht erfolgreich beendet wurde. Somit wird die systemweite <em>/etc/profile</em> Datei nur <em>gesourced</em>, wenn es sich um eine interaktive nicht Login-Shell handelt.</p>
- <div style="page-break-after: always;"></div>
- <h2 id="copy--paste"><a class="header-link" href="#copy--paste"></a>Copy & Paste</h2>
- <p>In der zweiten Zeile der <em>.bashrc</em> Datei wird mithilfe des <strong>shopt</strong> BASH-builtins eine Shell Option gesetzt, die verhindert, dass Zeilen falsch umgebrochen werden, wenn zum Beispiel Text mit der mittleren Maustaste in das xfce4-terminal eingefügt wird.</p>
- <p>Schaue dir die man-page von bash an um zu erfahren, was die Option <em>checkwinsize</em> bedeutet:</p>
- <p><code>man bash</code></p>
- <blockquote>
- <p>If set, bash checks the window size after each command and, if necessary, updates the values of LINES and COLUMNS.</p>
- </blockquote>
- <p><em>checkwinsize</em> stellt sicher, dass auch bei einer Änderung der Grösse des Terminalfensters die Zeilen- und Spaltenanzahl korrekt ist.</p>
- <h2 id="bash-prompt"><a class="header-link" href="#bash-prompt"></a>BASH-Prompt</h2>
- <p>Beim sogenannte BASH-Prompt handelt es sich um den Teil, der am Anfang jeder neuen Zeile in einem Terminal ausgegeben wird. Er wird über die Variable PS1 gesteuert.</p>
- <p>Für interaktive Login Shells wird diese Variable bereits innerhalb der <em>/etc/profile</em> Datei gesetzt. Da wir das Prompt auf unsere Bedürfnisse hin anpassen möchten, definieren wir PS1 ebenfalls in der <em>.bashrc</em> Konfigurationsdatei. </p>
- <p>Weil wir die Datei <em>~/.bashrc</em> in der persönlichen <em>~/.bash_profile</em> Konfigurationsdatei einbinden, gilt letztendlich für interaktive Login- sowie nicht Login-Shells die hier vorgenommene Einstellung für den BASH Prompt, denn die Dateien werden wie folgt abgearbeitet und die zuletzt gesetzte Definition von PS1 überschreibt die vorangegangenen exports der gleichen Variable:</p>
- <ul class="list">
- <li>/etc/profile</li>
- <li>~/.bash_profile</li>
- <li>~/.bash_login</li>
- <li>~/.profile</li>
- </ul>
- <p>In der Beispiel <em>.bashrc</em> Datei wird PS1 wie folgt gesetzt:</p>
- <p><code>export PS1='\u@\h:\w\$ '</code></p>
- <p>Dies entspricht der Einstellung, die in der systemweiten <em>/etc/profile</em> Datei vorgenommen wird, welche wir im Folgenden anpassen werden. </p>
- <p>Mithilfe des <strong>export</strong> Befehls wird die Variable in der aktuellen Shell als Umgebungsvariable verfügbar gemacht wird.</p>
- <p>Über die Zeichenkette <code>\u@\h:\w\$ </code> wird festgelegt, dass der BASH-Prompt wie folgt aufgebaut sein soll:</p>
- <ul class="list">
- <li><code>\u</code> Name des Benutzers der gerade an der Shell angemeldet ist</li>
- <li><code>@</code> das AT-Zeichen</li>
- <li><code>\h</code> der Hostname bis zum ersten Punkt, bei <em>darkstar.example.net</em> wäre dies <em>darkstar</em></li>
- <li><code>:</code> ein Doppelpunkt</li>
- <li><code>\w</code> das aktuelle Verzeichnis, in dem sich der Benutzer befindet (working directory)</li>
- <li><code>$</code> ein Dollarzeichen</li>
- <li>abschliessend folgt ein Leerzeichen</li>
- </ul>
- <p>Daraus ergibt sich anhand unseres Beispielbenutzers folgender BASH-Prompt:</p>
- <p><code>linuxuser@darkstar:~$ </code></p>
- <p>Wenn du nun das Verzeichnis wechselt, zum Beispiel mit <code>cd /tmp</code> wird der neue Pfad im Prompt angezeigt:</p>
- <p><code>linuxuser@darkstar:/tmp$ </code></p>
- <p>Der Prompt lässt sich mithilfe von Terminal-Kontroll-Sequenzen eingefärbt werden. Diese beginnen jeweils mit <em>\033[</em> und enden mit <em>m</em> und werden durch [ am Anfang und ] am Ende begrenzt. Die letzte angegebene Farbe definiert in welcher Farbe die Benutzereingaben erfolgen sollen.</p>
- <p><code>export PS1='\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$ '</code></p>
- <div style="page-break-after: always;"></div>
- <p class="img-container"><img src="./slackware_bash_colored_prompt.png" alt=""></p>
- <p>Im obigen Beispiel wurden folgende Farbsequenzen verwendet:</p>
- <table>
- <thead>
- <tr>
- <th>Sequenz</th>
- <th>Farbe</th>
- </tr>
- </thead>
- <tbody><tr>
- <td>[\033[1;32m]</td>
- <td>hellgrün</td>
- </tr>
- <tr>
- <td>[\033[0m]</td>
- <td>farblos (Farbe zurücksetzen)</td>
- </tr>
- <tr>
- <td>[\033[1;34m]</td>
- <td>hellblau</td>
- </tr>
- </tbody></table>
- <p>Eine vollständige Liste der verfügbaren Farben und Variablen findest du zum Beispiel im Wiki von ubuntuusers.de: <nbro><a href="https://wiki.ubuntuusers.de/Bash/Prompt/">https://wiki.ubuntuusers.de/Bash/Prompt/</a></nobr>.</p>
- <p>Probiere den farbigen Prompt in der aktuellen Shell durch Eingabe des obigen <strong>export</strong> Befehls aus. Falls du für dein Benutzerkonto diese Variante vorziehst, bearbeite die <em>.bashrc</em> Datei und passe den Export der PS1-Variable entsprechend an.</p>
- <p>Es empfiehlt sich zur besseren Unterscheidung für den normalen Benutzer und für Root unterschiedliche Prompts zu verwenden. Eine Möglichkeit wäre die Nutzung des farbigen Prompts für den normalen Benutzer und das Setzen des farblosen Prompts für Root, oder umgekehrt.</p>
- <div style="page-break-after: always;"></div>
- <h3 id="apropos-und-whatis"><a class="header-link" href="#apropos-und-whatis"></a>apropos und whatis</h3>
- <p>Weitere Informationen findest du in der <em>man-page</em> von xauth. Möchtest du herausfinden in welchen <em>man-pages</em> ein bestimmtes Thema behandelt wird, kannst du <strong>man</strong> mit dem Parameter <strong>-k</strong> gefolgt von einem Suchbegriff aufrufen. Alternativ kannst du das äquivalente Kommando <strong>apropos</strong> nutzen.</p>
- <p><code>man -k xauth</code></p>
- <p class="img-container"><img src="./slackware_apropos.png" alt=""></p>
- <p>Allenfalls musst du noch die Datenbank mithilfe von <strong>mandb</strong> aktualisieren.</p>
- <p>Der Befehl durchsucht die Namen sowie die Kurzbeschreibungen von <em>man-pages</em> nach dem entsprechenden Begriff. Es wird zuerst der Name der gefundenen <em>man-page</em>, gefolgt von der <em>Section</em> in der das Suchwort vorkommt sowie die Kurzbeschreibung ausgegeben. </p>
- <p>Folgende <em>Sections</em> sind auf deinem Linux System verfügbar:</p>
- <ul class="list">
- <li><code>1</code> User Commands </li>
- <li><code>2</code> System Calls </li>
- <li><code>3</code> C Library Functions </li>
- <li><code>4</code> Devices and Special Files </li>
- <li><code>5</code> File Formats and Conventions </li>
- <li><code>6</code> Games et. Al. </li>
- <li><code>7</code> Miscellanea</li>
- <li><code>8</code> System Administration tools and Daemons</li>
- </ul>
- <p>Diese <em>Sections</em> sind nicht zu verwechseln mit den einzelnen Paragrafen innerhalb einer <em>man-page</em>.</p>
- <p>Einige <em>man-pages</em> sind verteilt über mehrere <em>Sections</em>, wie zum Beispiel die Handbuchseiten vom Kommando <strong>man</strong>:</p>
- <p><code>whatis man</code></p>
- <p class="img-container"><img src="./slackware_whatis.png" alt=""></p>
- <p>Der Befehl <strong>whatis</strong> durchsucht im Gegensatz zu <strong>man -k</strong> oder <strong>apropos</strong> nur die Namen der <em>man-pages</em>, die in der sogenannten whatis-Datenbank gespeichert sind.</p>
- <p>Um einen der Treffer anzeigen zu lassen, kannst du zum Beispiel <code>man 7 man</code> eingeben, also <strong>man</strong> gefolgt von der <em>Section</em> und dem Namen der <em>man-page</em>.</p>
- <div style="page-break-after: always;"></div>
- <h2 id="fenstertitel"><a class="header-link" href="#fenstertitel"></a>Fenstertitel</h2>
- <p><code>[[ "$TERM" = "xterm" || "$TERM" = "xterm-256color" ]] && export PROMPT_COMMAND='echo -ne "\033]0;$USER@$HOSTNAME\007" '</code></p>
- <p>Zunächst wird mithilfe des logischen oder-Operators <code>||</code> geprüft, ob die Umgebungsvariable <em>TERM</em> den Inhalt <em>xterm</em> oder <em>xterm-256color</em> hat. Dies ist zum Beispiel der Fall, wenn es sich um ein grafisches Terminal wie das xfce4-terminal handelt. Das && sorgt dafür, dass der folgende Teil nur dann ausgeführt wird, wenn das Ergebnis des Tests positiv ist.</p>
- <p>Bei <em>PROMPT_COMMAND</em> handelt es sich um eine BASH-Umgebungsvariable. Der Inhalt wird als regulärer BASH Befehl ausgeführt, bevor der Prompt angezeigt wird. Über den Echo-Befehl wird der Fenstertitel des Terminals gesetzt, in diesem Falle auf $USER@$HOSTNAME.</p>
- <p>Wenn du die gleiche Konfiguration der <em>~/.bash_profile</em> und <em>~/.bashrc</em> (ohne den export der XAUTHORITY) auch für den Root-Benutzer vornimmst, wird der Fenstertitel nach einem <code>su -</code> automatisch auf root@$HOSTNAME gesetzt. So kannst du leicht erkennen, ob es sich um ein lokales Terminal handelt oder zum Beispiel um eine Remote SSH Verbindung, und welcher Benutzer an diesem Terminal aktiv ist. </p>
- <h2 id="aliases"><a class="header-link" href="#aliases"></a>Aliases</h2>
- <p>Die <em>alias</em> Definition kennst du bereits aus der <em>~/.bash_profile</em> Datei die wir für den Root-Benutzer angelegt haben. Da wir die Konfiguration nun in der <em>~/.bashrc</em> zentralisiert haben, kannst du beim Root-Benutzer den ursprünglichen Eintrag aus der <em>~/.bash_profile</em> Datei entfernen. Vorausgesetzt natürlich du hast die zuvor beschriebenen Anpassungen sowohl für deinen normalen Benutzer als auch für den Root-Benutzer durchgeführt.</p>
- <h1 id="sudo"><a class="header-link" href="#sudo"></a>sudo</h1>
- <p>Das Programm <strong>sudo</strong> (Akronym für su "do") ermöglicht es, Anwendungen mit den Rechten eines anderen Benutzers auszuführen. <strong>sudo</strong> führt, wenn nicht anders angegeben, das als Parameter angegebene Kommando mit Root-Rechten aus und ermöglicht es einzelne Administrationsaufgaben auszuführen, ohne eine Root-Shell öffnen zu müssen.</p>
- <p>Auf deinem Linux-System ist sudo bereits installiert, wurde bisher aber noch nicht konfiguriert. </p>
- <p>Die Zuordnung, welche Benutzer oder Gruppen <strong>sudo</strong> verwenden dürfen, erfolgt in der Datei <em>/etc/sudoers</em>. Ähnlich wie bei der Datei <em>/etc/passwd</em> gibt es auch hier ein Hilfsprogramm zur sicheren Bearbeitung. Es trägt den passenden Namen <strong>visudo</strong>.</p>
- <div style="page-break-after: always;"></div>
- <p>Öffne ein Root-Terminal und führe das Kommando <strong>visudo</strong> aus:</p>
- <pre class="hljs"><code><span class="hljs-attribute">su -
- visudo</span></code></pre><p>Entferne das Rautenzeichen vor der Zeile die mit <em>Defaults secure_path=</em> beginnt. Damit erreichst du, dass die <em>$PATH</em> Variable innerhalb der mit sudo ausgeführten Befehle immer auch die <em>sbin</em> Pfade enthält. Andernfalls wäre dies nur bei <code>sudo -i</code> der Fall, welches eine interaktive Login-Shell startet.</p>
- <p class="img-container"><img src="./slackware_sudo_secure_path.png" alt=""></p>
- <p>Du kannst in der <em>/etc/sudoers</em> Datei festlegen, welche Benutzer oder Gruppen <strong>sudo</strong> verwenden dürfen. Es bietet sich an die Gruppe <em>wheel</em> zu verwenden, da diese unter Slackware bereits existiert.</p>
- <p>Du hast des Weiteren die Möglichkeit zu wählen, ob beim Ausführen von Kommandos mit <strong>sudo</strong> nach einem Passwort gefragt werden soll (empfohlen) oder nicht. Wir gehen von der Variante mit Passwortabfrage aus. Entferne dazu das Kommentarzeichen vor der Zeile <nobr><em>%wheel ALL=(ALL) ALL</em></nobr>:</p>
- <p class="img-container"><img src="./slackware_sudo_wheel.png" alt=""></p>
- <p>Diese Zeile besagt, dass die Mitglieder der Gruppe <em>wheel</em> (in der <em>sudoers</em> Datei werden Gruppen mit einem %-Zeichen angeführt) alle Kommandos mit den Rechten aller Benutzer ausführen dürfen.</p>
- <p>Standardmässig verlangt <strong>sudo</strong> zum Ausführen von Befehlen mit Root-Rechten nach dem Benutzerpasswort. Falls du es vorziehst, dass <strong>sudo</strong> nach dem Root-Passwort fragt, kannst du unter den Beispiel-Defaults eine weitere Zeile mit folgendem Inhalt einfügen:</p>
- <p><code>Defaults rootpw</code></p>
- <p class="img-container"><img src="./slackware_defaults_rootpw.png" alt=""></p>
- <p>Speichere die Datei ab und verlasse den Editor.</p>
- <div style="page-break-after: always;"></div>
- <p>Mithilfe des <strong>usermod</strong> Kommandos kannst du deinen Benutzer zur Gruppe <em>wheel</em> hinzufügen:</p>
- <p><code>usermod -a -G wheel linuxuser</code></p>
- <p>Wobei du <em>linuxuser</em> durch deinen tatsächlichen Benutzernamen ersetzen musst. Die Änderungen an den Gruppenberechtigungen werden beim nächsten Login aktiv. Melde dich daher ab und wieder an und prüfe zum Beispiel mithilfe von <code>sudo -i</code>, ob du eine Root-Shell erlangen kannst. Das einzugebende Passwort ist abhängig davon, ob du den Parameter <em>Defaults rootpw</em> gesetzt hast oder nicht. Falls ja, musst du das Root-Passwort angeben, andernfalls dein Benutzerpasswort.</p>
- <p><strong>Hinweis</strong>: Im weiteren Verlauf des Kurses werden wir verstärkt <strong>sudo</strong> verwenden, um Befehle mit Root-Rechten auszuführen.</p>
- <h1 id="sicherheit"><a class="header-link" href="#sicherheit"></a>Sicherheit</h1>
- <p>Mit einem Computer, der mit dem Internet verbunden ist, besteht permanent die Gefahr eines Angriffes. Wir möchten die Angriffsfläche möglichst klein halten. Dazu sind einige Anpassungen notwendig.</p>
- <h2 id="dienste"><a class="header-link" href="#dienste"></a>Dienste</h2>
- <p>Um dein Linux-System möglichst sicher vor Angriffen zu halten, sollten wir alle nicht benötigten Dienste deaktivieren oder absichern. Mit dem <code>netstat</code> Kommando kannst du prüfen, welche Dienste auf deinem Rechner Anfragen über das Netzwerk akzeptieren. </p>
- <p>Prüfen wir zunächst welche Dienste auf dem TCP-Protokoll aktiv sind. </p>
- <p><code>sudo netstat -antp</code></p>
- <p>Der Parameter <em>-a</em> schliesst alle Interfaces ein, <em>-n</em> stellt die Ausgabe der Adressen numerisch dar, <em>-t</em> steht für das TCP Protokoll und <em>-p</em> gibt das dazugehörige Programm aus.</p>
- <p class="img-container"><img src="./slackware_netstat_antp.png" alt=""></p>
- <p>Interessant an der Ausgabe sind folgende Spalten:</p>
- <ul class="list">
- <li><code>Local Address</code> die lokale Adresse auf der ein Dienst läuft</li>
- <li><code>Foreign Address</code> die entfernte Adresse</li>
- <li><code>PID/Program name</code> die Prozessnummer und der Programmname</li>
- </ul>
- <p>Du siehst, dass der SSH Dienst sshd (PID/Program name) auf Port 22 auf allen lokalen IPv4 Adressen (Local Address) Anfragen von überall (Foreign Address) entgegennimmt. 0.0.0.0 steht für alle IPv4 Adressen. Der Port auf dem ein Dienst läuft wird jeweils bei Local Address hinter dem Doppelpunkt angegeben.</p>
- <p>Des Weiteren nimmt SSH Anfragen auf allen IPv6 Adressen von überall entgegen. :: ist unter IPv6 analog zu 0.0.0.0 zu verstehen.</p>
- <div style="page-break-after: always;"></div>
- <p>Der SSH Dienst ist für den sicheren entfernten Zugriff auf deinen Rechner sinnvoll, und kann daher aktiviert bleiben. Falls du diesen Dienst dennoch stoppen und deaktivieren möchtest, könntest du dies mithilfe von folgendem Kommandos tun. Im weiteren Kursverlauf gehen wir davon aus, dass du den SSH-Dienst aktiviert lässt.</p>
- <pre class="hljs"><code>sudo <span class="hljs-regexp">/etc/</span>rc.d/rc.sshd stop
- sudo chmod -x <span class="hljs-regexp">/etc/</span>rc.d/rc.sshd</code></pre><p>Schauen wir uns nun die Dienste an, die auf dem UDP Protokoll laufen:</p>
- <p><code>sudo netstat -anup</code></p>
- <p>Statt des <em>-t</em> Parameters geben wir nun <em>-u</em> für das UDP Protokoll an. Du hättest auch die Möglichkeit beide Protokolle anzeigen zu lassen. Dann sähe der obige Befehl wie folgt aus: <code>netstat -antup</code>.</p>
- <p class="img-container"><img src="./slackware_netstat_anup.png" alt=""></p>
- <p>Der aufgeführte Port 68 vom Dienst dhcpcd wird für die korrekte Kommunikation mit dem DHCP Server benötigt. Konkret handelt es sich dabei um den BOOTP Client Port. Dieser sollte daher aktiviert bleiben, sofern du DHCP nutzen möchtest. Analog dazu empfängt NetworkManager auf Port 546 eingehende Verbindungen für DHCPv6.</p>
- <div style="page-break-after: always;"></div>
- <h3 id="avahimdns"><a class="header-link" href="#avahimdns"></a>avahi/mdns</h3>
- <p>Ein Dienst, der auf deinem Linux-System bisher nicht installiert ist, aber durchaus hilfreich sein kann, nennt sich <em>avahi</em>. Dabei handelt es sich um eine Implementierung des <em>mDNS</em> Protokolls, welches eine einfache Namensauflösung im lokalen Netzwerk ermöglicht. Die meisten Netzwerkkomponenten wie Smart-TVs, Router, NAS-Server oder Drucker haben dieses Protokoll implementiert. Standardmässig erfolgt die Namensauflösung dabei über die <em>mDNS</em> Domain <em>.local</em>. Würdest du beispielsweise einen NAS-Server mit dem Namen <em>nas</em> in deinem Netzwerk verfügbar haben auf dem <em>mDNS</em> implementiert wäre, könntest du über den Namen <em>nas.local</em> darauf zugreifen.</p>
- <p>Die Installation von <em>avahi/mdns</em> besteht aus mehreren Paketen. Zur Vorbereitung muss zunächst eine Gruppe Benutzerkonto für den Dienst erstellt werden:</p>
- <pre class="hljs"><code>sudo groupadd -g <span class="hljs-number">214</span> avahi
- sudo useradd -u <span class="hljs-number">214</span> -g <span class="hljs-number">214</span> -c <span class="hljs-string">"Avahi User"</span> -d <span class="hljs-regexp">/dev/</span><span class="hljs-keyword">null</span> -s <span class="hljs-regexp">/bin/</span><span class="hljs-keyword">false</span> avahi</code></pre><p>Die Paketerstellung und Installation erfolgt mit <em>sbopkg</em> mit der Auswahl des Queuefiles:</p>
- <p><code>sudo sbopkg -k -i avahi</code></p>
- <div style="page-break-after: always;"></div>
- <p>Nach erfolgreicher Installation kannst du die Dienste im laufenden System mit folgendem Befehl starten:</p>
- <pre class="hljs"><code>sudo <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidaemon start
- sudo <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidnsconfd start</code></pre><p>Um sicher zu stellen, dass diese auch beim Systemstart aktiviert werden, füge mit Root-Rechten folgende Zeilen zur <em>/etc/rc.d/rc.local</em> Datei hinzu:</p>
- <pre class="hljs"><code><span class="hljs-comment"># Start avahidaemon</span>
- <span class="hljs-keyword">if</span> [ -x <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidaemon ]; then
- <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidaemon start
- fi
- <span class="hljs-comment"># Start avahidnsconfd</span>
- <span class="hljs-keyword">if</span> [ -x <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidnsconfd ]; then
- <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidnsconfd start
- fi</code></pre><p>Neben der <em>rc.local</em> Datei, die am Ende des <em>rc.M</em> Multiuser-Initscriptes aufgerufen wird, gibt es die Möglichkeit eine weitere Datei namens <em>/etc/rc.d/rc.local_shutdown</em> zu erstellen, die beim Herunterfahren oder Neustarten des Computers ausgeführt wird. Sie ermöglicht das saubere Beenden von Diensten.</p>
- <pre class="hljs"><code>sudo vi <span class="hljs-regexp">/etc/</span>rc.d/rc.local_shutdown</code></pre><p>Füge dort folgenden Inhalt hinzu:</p>
- <pre class="hljs"><code><span class="hljs-comment"># Stop avahidnsconfd</span>
- <span class="hljs-keyword">if</span> [ -x <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidnsconfd ]; then
- <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidnsconfd stop
- fi
- <span class="hljs-comment"># Stop avahidaemon</span>
- <span class="hljs-keyword">if</span> [ -x <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidaemon ]; then
- <span class="hljs-regexp">/etc/</span>rc.d/rc.avahidaemon stop
- fi</code></pre><p>Speichere die Änderungen ab und markiere die Datei als ausführbar:</p>
- <p><code>sudo chmod +x /etc/rc.d/rc.local_shutdown</code></p>
- <p>Nicht jede Anwendung benötigt ein Shutdown Script. Beim Starten von Hintergrundanwendungen (Daemons) erstellen diese oftmals ein sogenanntes <em>pidfile</em> in dem die Prozessnummer hinterlegt ist oder ein <em>lockfile</em>, welches signalisiert, dass der Dienst läuft.</p>
- <p>Dadurch kann festgestellt werden, ob der Prozess bereits läuft und verhindert werden, dass dieser erneut gestartet wird, solange bereits eine laufende Instanz vorhanden ist. Wenn du wie zuvor beschrieben den avahidaemon im laufenden System gestartet hast, findest du solch ein <em>pidfile</em> unter dem Pfad <em>/run/avahi-daemon</em>:</p>
- <p><code>sudo cat /run/avahi-daemon/pid</code></p>
- <div style="page-break-after: always;"></div>
- <p>Die ausgegebene Prozessnummer solltest du auch in der Liste der aktuell laufenden Prozesse sehen, die du dir mit dem Kommando <code>ps</code> anzeigen lassen kannst:</p>
- <p><code>sudo ps aux</code></p>
- <p>Es folgt eine kurze Erklärung der Verwendeten <code>ps</code> Parameter:</p>
- <ul class="list">
- <li><code>a</code> listet alle Prozesse eines Terminals</li>
- <li><code>u</code> zeigt die Benutzernamen an, unter denen die Prozesse laufen.</li>
- <li><code>x</code> zeigt zusammen mit der <code>a</code> Option alle Prozesse, auch diejenigen die nicht in einer tty laufen.</li>
- </ul>
- <p>Probiere die verschiedenen Parameter nacheinander aus und schaue dir die Veränderung an. Würdest du beispielsweise den <code>x</code> Parameter weglassen, würde der <em>avahi</em> Prozess nicht aufgeführt, da dieser als Daemon im Hintergrund läuft und nicht in einer tty.</p>
- <p>Die Ausgabe von <code>ps aux</code> kann sehr lang sein. Wie gewohnt kannst du sie dir mit <code>ps aux|more</code> seitenweise anzeigen lassen oder direkt die Ausgabe mittels grep auf die pid des avahi-daemon einschränken:</p>
- <p><code>sudo ps aux|grep $(cat /run/avahi-daemon/pid)</code></p>
- <p class="img-container"><img src="./slackware_ps_avahi.png" alt=""></p>
- <p>Durch die Angabe von <code>$(BEFEHL)</code> wird ein Sub-Kommando aufgerufen. In obigen Beispiel wäre dies <code>cat /run/avahi-daemon/pid</code>, was den Inhalt der Datei <em>/run/avahi-daemon/pid</em> ausgibt. <em>pidfiles</em> enthalten in der Regel lediglich die Prozessnummer des Dienstes. Der Befehl <code>grep</code> schränkt die <code>ps</code> Anzeige auf diese Prozessnummer ein.</p>
- <p>Würde ein Dienst beim Herunterfahren oder Neustarten des Rechners das <em>pidfile</em>- oder eine Lockdatei nicht entfernen, könnte es passieren, dass der Dienst beim nächsten Systemstart nicht gestartet würde. Das hängt von der Implementierung des jeweiligen Dienstes ab. Die meisten Hintergrundanwendungen prüfen neben der Existenz des <em>pidfiles</em> auch ob der Dienst tatsächlich läuft. Für avahi wird allerdings empfohlen den Dienst beim Herunterfahren oder Neustarten des Systems zu beenden. </p>
- <h4 id="nss-mdns"><a class="header-link" href="#nss-mdns"></a>nss-mdns</h4>
- <p>Damit die Linux-Systembefehle avahi nutzen können, muss ein weiteres Paket mit dem Namen <em>nss-mdns</em> installiert werden und die Namensauflösung konfiguriert werden.</p>
- <p>Die Installation kannst du mithilfe von sbopkg starten. Wähle das Queuefile aus:</p>
- <p><code>sudo sbopkg -k -i nss-mdns</code></p>
- <p>Wie dein Linux-System Namen auflösen können soll, wird über die Datei <em>/etc/nsswitch.conf</em> gesteuert. Das Paket <em>nss-mdns</em> liefert eine Beispieldatei <em>nsswitch.conf-mdns</em> Datei mit.</p>
- <div style="page-break-after: always;"></div>
- <p>Du kannst diese mithilfe des <em>diff</em> Befehls mit der aktuellen Konfigurationsdatei vergleichen:</p>
- <p><code>sudo diff /etc/nsswitch.conf /etc/nsswitch.conf-mdns</code></p>
- <p class="img-container"><img src="./slackware_diff_nsswitch.png" alt=""></p>
- <p>Du siehst das der Bereich <em>hosts</em> in der /etc/nsswitch.conf-mdns um <em>mdns</em> erweitert worden ist, und dass <em>network</em> einen zusätzlichen Eintrag <em>dns</em> erhalten hat. Durch diese Anpassungen wird sichergestellt, dass zusätzlich <em>mDNS</em> zur Namensauflösung verwendet wird. Um die Anpassungen auf deinem System zu aktivieren, erstelle zunächst eine Sicherheitskopie der Originaldatei:</p>
- <p><code>sudo cp /etc/nsswitch.conf /etc/nsswitch.conf.orig</code></p>
- <p>Nun kannst du die Standard-Systemkonfiguration mit der angepassten Konfiguration aus dem <em>nss-mdns</em> Paket überschreiben:</p>
- <p><code>sudo cp /etc/nsswitch.conf-mdns /etc/nsswitch.conf</code></p>
- <p>Welche Geräte in deinem Netzwerk über <em>mDNS</em> Namen erreichbar sind, kannst du nun mit dem Kommandozeilenbefehl <code>avahi-browse</code> herausfinden:</p>
- <p><code>avahi-browse --all --resolve --terminate</code></p>
- <p>Im Anwendungsmenü findest du unter der Kategorie <strong>System</strong> ein Programm namens <strong>Avahi Zeroconf Browser</strong>. Mit diesem kannst du dir in einer grafischen Oberfläche alle im Netzwerk über mDNS erreichbaren Systeme anzeigen lassen.</p>
- <div style="page-break-after: always;"></div>
- <h2 id="firewall"><a class="header-link" href="#firewall"></a>Firewall</h2>
- <p>Eine lokale Firewall schützt dein System zusätzlich vor Angriffen und ist sehr zu empfehlen.</p>
- <h3 id="ufw"><a class="header-link" href="#ufw"></a>ufw</h3>
- <p><em>ufw</em> ist eine Abkürzung für <em>uncomplicated firewall</em>. Die Kommandozeilenapplikation ermöglicht die einfache Einrichtung und Verwaltung von Firewall-Regeln. Dabei abstrahiert das Programm die Linux-Firewall <em>iptables</em>. ufw unterstützt IPv4 und IPv6.</p>
- <p>Neben ufw gibt es einige Alternativen zur vereinfachten Firewall-Konfiguration, wie zum Beispiel das unter Red Hat und SUSE zum Einsatz kommende Programm <em>firewalld</em>. Letzteres wird in diesem Kurs nicht behandelt.</p>
- <p>Die Installation von ufw kann über ein SlackBuild-Script vorgenommen werden. Um die Abhängigkeiten mitzuinstallieren, wähle das Queuefile aus:</p>
- <p><code>sudo sbopkg -k -i ufw</code></p>
- <p>Damit der Dienst beim Systemstart aktiviert wird, füge mit Root-Rechten folgenden Abschnitt am Ende der Datei <em>/etc/rc.d/rc.local</em> ein:</p>
- <pre class="hljs"><code><span class="hljs-comment"># Start ufw</span>
- <span class="hljs-keyword">if</span> [ -x <span class="hljs-regexp">/lib/u</span>fw/ufw-init ]; then
- <span class="hljs-regexp">/lib/u</span>fw/ufw-init start
- fi</code></pre><p>Mit einer if-Abfrage wird geprüft, ob die Datei <em>/lib/ufw/ufw-init</em> existiert und ausführbar ist, was bei der im Paket enthaltenen Datei der Fall ist. Der Befehl <code>/lib/ufw/ufw-init start</code> startet die Firewall. Du kannst diesen Befehl einmalig mit Root-Rechten ausführen, um den Dienst im laufenden System zu aktivieren:</p>
- <p><code>sudo /lib/ufw/ufw-init start</code></p>
- <p>Möchtest du via SSH auf deinen Linux-PC zugreifen können, erlaube den Zugriff auf den entsprechenden Dienst durch Eingabe des <code>ufw allow</code> Befehls, gefolgt vom Namen des Anwendungsprofils: </p>
- <p><code>sudo ufw allow ssh</code></p>
- <p>Mit folgendem Befehl prüfst du den Status der Firewall:</p>
- <p><code>sudo ufw status</code></p>
- <p class="img-container"><img src="./slackware_ufw_status.png" alt=""></p>
- <p>Wie du sehen kannst, wird ausschliesslich der Zugriff via SSH (TCP/Port 22) gestattet. Eine Regel gilt für IPv4, die andere für IPv6.</p>
- <div style="page-break-after: always;"></div>
- <p>Um anstatt der namentlichen Bezeichnung der Regeln die Port Nummern ausgeben zu lassen, kannst du <code>ufw status</code> mit dem erweiterten Parameter <code>numbered</code> aufrufen:</p>
- <p><code>sudo ufw status numbered</code></p>
- <p class="img-container"><img src="./slackware_ufw_status_numbered.png" alt=""></p>
- <p>ufw bringt bereits einige weitere vordefinierte Regeln für Anwendungen mit. Anzeigen lassen kannst du dir die verfügbaren Anwendungsprofile wie folgt:</p>
- <p><code>sudo ufw app list</code></p>
- <p class="img-container"><img src="./slackware_ufw_app_list.png" alt=""></p>
- <div style="page-break-after: always;"></div>
- <p>Möchtest du beispielsweise Details über das Regelwerk für den BitTorrent-Client <em>Transmission</em> erfahren, kannst du dir diese mit <code>ufw app info</code> anzeigen lassen:</p>
- <p><code>sudo ufw app info Transmission</code></p>
- <p class="img-container"><img src="./slackware_ufw_app_info.png" alt=""></p>
- <p>Wenn du den Zugriff auf die Anwendung <em>Transmission</em> durch die Firewall erlauben willst, kannst du das <code>ufw allow</code> Kommando, gefolgt vom der zu erlaubenden Anwendung aufrufen, so wie du es bereits für SSH getan hast:</p>
- <p><code>sudo ufw allow Transmission</code></p>
- <p>Der Parameter <em>delete</em> erlaubt es dir, eine zuvor hinzugefügte Regel wieder zu löschen. Für obiges Beispiel wäre dies:</p>
- <p><code>sudo ufw delete allow Transmission</code></p>
- <p>Falls der Zugriff auf eine Anwendung gestatten werden soll, für die kein bereits vorgefertigtes Applikationsprofil existiert, kann dies mit dem <code>ufw allow</code> Befehl unter Angabe des der Port Nummer und des Protokolls erfolgen: </p>
- <p><code>sudo ufw allow PORT/tcp</code></p>
- <p>Wobei der <em>PORT</em> durch den zu erlaubenden Port ersetzen werden muss und bei Bedarf das Protokoll anpassen werden kann.</p>
- <p><strong>HINWEIS</strong>: Der Zugriff auf <em>avahi/mDNS</em> ist standardmässig in ufw gestattet und muss nicht explizit konfiguriert werden. Siehe dazu auch die manpage von ufw.</p>
- <div style="page-break-after: always;"></div>
- <h1 id="hostname"><a class="header-link" href="#hostname"></a>Hostname</h1>
- <p>Standardmässig lautet der voll-qualifizierte Rechnername unter Slackware <em>darkstar.example.net</em>, in Anlehnung an die gleichnamige Science-Fiction-Parodie von Regisseur John Carpenter aus dem Jahr 1974. <em>darkstar</em> ist dabei der eigentliche Hostname, <em>example</em> der Second-Level-Domainname und <em>.net</em> die Top-Level-Domain. <em>example.net</em> ist eine Second-Level-Domain, die von der <em>Internet Engineering Task Force</em> permanent reserviert wurde, um in Dokumentationen oder Beispielen verwendet werden zu können.</p>
- <p>Um den Rechnernamen zu ändern, kannst du die Datei <code>/etc/HOSTNAME</code> mit Root-Rechten bearbeiten. Für ein lokales Netzwerk, empfiehlt es sich wahlweise die Second-Level-Domain <em>example.net</em> beizubehalten oder eine alternative Domain zu wählen, die laut RFC2606 für interne Zwecke bestimmt ist: <nobr><a href="http://www.faqs.org/rfcs/rfc2606.html">http://www.faqs.org/rfcs/rfc2606.html</a></nobr>. Im folgenden Beispiel haben wir uns für die <em>.example</em> Top-Level-Domain entschieden und eine Second-Level-Domain namens <em>domain</em> gewählt. Den eigentlichen Hostnamen möchten wir auf <em>tux</em> ändern. Daraus ergibt sich: <em>tux.domain.example</em>.</p>
- <p><code>sudo vi /etc/HOSTNAME</code></p>
- <p><code>tux.domain.example</code></p>
- <p>Zusätzlich sollte die Datei <em>/etc/hosts</em> bearbeitet werden, in der lokale Hosteinträge definiert werden können. In der Standardkonfiguration enthält die Datei zwei Einträge für das sogenannte <em>Loopback-Interface</em> welches die IP-Adresse 127.0.0.1 besitzt. Bei dieser <em>Netzwerkschnittstelle</em> handelt es sich nicht um eine physikalische Netzwerkkarte, sondern um eine virtuelle Netzwerkschnittstelle, über die lediglich eine Verbindung auf dem eigenen Rechner herstellt werden kann. Dieses Loopback-Interface kann beispielsweise für Diagnosezwecke verwendet werden, oder um auf Applikationen zuzugreifen, die nur direkt auf dem eigenen Rechner erreichbar sind. Ein Beispiel wäre die CUPS-Druckerkonfiguration, welche im Webbrowser über <nobr><a href="http://localhost:631">http://localhost:631</a></nobr> aufgerufen werden kann.</p>
- <p>In der Datei <code>/etc/hosts</code> wird definiert, dass die Loopback-Adresse 127.0.0.1 (IPv4) und ::1 (IPv6) unter dem Hostnamen <em>localhost</em> erreichbar ist. Durch diesen Eintrag ist beispielsweise der Zugriff wie auf die CUPS-Verwaltungsoberfläche über den Hostnamen <em>localhost</em> möglich.</p>
- <p>Standardmässig enthält die Datei zwei weitere Einträge in folgender Form:</p>
- <p><code>127.0.0.1 darkstar.domain.example darkstar</code> </p>
- <p><code>::1 darkstar.domain.example darkstar</code></p>
- <div style="page-break-after: always;"></div>
- <p>Dadurch wird erreicht, dass auch dann eine Auflösung des Hostnamen möglich ist, wenn nur die Loopback-Schnittstelle verfügbar ist. Aus technischer Sicht sind diese Einträge allerdings falsch, da 127.0.0.1 für <em>localhost</em> reserviert ist. </p>
- <p><code>sudo vi /etc/hosts</code></p>
- <pre class="hljs"><code><span class="hljs-number">127.0.0.1</span> tux.domain.example tux
- ::<span class="hljs-number">1</span> tux.domain.example tux</code></pre><p class="img-container"><img src="./slackware_hosts.png" alt=""></p>
- <p>Damit die Konfiguration des neuen Hostnames systemweit angewandt wird, musst du deinen Computer neu starten.</p>
- <p>Ob die Konfiguration erfolgreich war, kannst du mithilfe des <code>getent</code> Befehls überprüfen:</p>
- <pre class="hljs"><code>getent hosts tux
- getent hosts tux.<span class="hljs-built_in">domain</span>.<span class="hljs-built_in">example</span></code></pre><p class="img-container"><img src="./slackware_getent_tux.png" alt=""></p>
- <div style="page-break-after: always;"></div>
- <h1 id="ssh"><a class="header-link" href="#ssh"></a>SSH</h1>
- <p>Mittels SSH kannst du, sofern der Dienst aktiv ist und der Port nicht durch eine Firewall blockiert wird, von einem anderen Rechner auf dein Linux-System zugreifen.</p>
- <h2 id="linuxmac-ssh-client"><a class="header-link" href="#linuxmac-ssh-client"></a>Linux/Mac SSH-Client</h2>
- <p>Falls es sich bei dem anderen Rechner um einen Linux-PC oder Mac handelt, kannst du von dort aus den <code>ssh</code> Client in einem Terminal starten. Als Parameter gibst du im einfachsten Fall den Namen des Benutzers mit dem du dich verbinden möchtest an, gefolgt von einem <code>@</code> und dem Hostname oder der IP-Adresse des Zielrechners:</p>
- <p><code>ssh linuxuser@192.168.0.100</code></p>
- <p>In diesem Beispiel versuchen wir uns als <em>linuxuser</em> mit der IP-Adresse <em>192.168.0.100</em> zu verbinden. Die aktuelle IP-Adresse deines Linux-Systems (des Zielrechners) kannst du, wie bereits gelernt, über das <code>ip</code> Kommando oder über einen Rechtsklick auf NetworkManager Symbol -> <strong>Verbindungsinformationen</strong> herausfinden. Den Benutzernamen musst du durch den Namen deines tatsächlichen Benutzers ersetzen.</p>
- <h3 id="scp"><a class="header-link" href="#scp"></a>SCP</h3>
- <p>Neben der interaktiven SSH-Verbindung hast du mit dem Kommando <code>scp</code> die Möglichkeit Dateien zu übertragen. Von einem anderen Linux-PC kannst du den Befehl wie folgt aufrufen:</p>
- <p><code>scp linuxuser@192.168.0.100:/home/linuxuser/Dokumente/Meine_Datei.txt .</code></p>
- <p>Damit überträgst du die Datei <em>/home/linuxuser/Dokumente/Meine_Datei.txt</em> von deinem Linux-System auf den anderen Linux-PC und speicherst sie dort im aktuellen Verzeichnis (<code>.</code>) ab.</p>
- <p>Du kannst auch den Parameter <code>-r</code> verwenden, um ganze Verzeichnisse rekursiv zu übertragen:</p>
- <p><code>scp -r linuxuser@192.168.0.100:/home/linuxuser/Dokumente .</code></p>
- <p>Möchtest du von einem anderen Linux-PC Dateien auf dein Linux-System übertragen, kannst du einfach die Reihenfolge umkehren:</p>
- <p><code>scp Meine_Datei.txt linuxuser@192.168.0.100:/home/linuxuser/Dokumente/</code></p>
- <p>Mit obigem Befehl überträgst du <em>Meine_Datei.txt</em> in den Ordner <em>/home/linuxuser/Dokumente/</em> auf dein Linux-System. Auch hierbei ist es möglich den Parameter <code>-r</code> zur rekursiven Übertragung zu verwenden.</p>
- <div style="page-break-after: always;"></div>
- <h2 id="windows-ssh-client"><a class="header-link" href="#windows-ssh-client"></a>Windows SSH-Client</h2>
- <p>Unter Windows kannst du zum Beispiel das Programm <em>putty</em> für den SSH-Zugriff verwenden. Du findest es auf der Homepage des Entwicklers:</p>
- <p><a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html">https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html</a></p>
- <p>Es handelt sich um eine grafische Applikation. Der Verbindungsaufbau erfolgt ähnlich wie bei dem <code>ssh</code> Kommando. Im Feld <strong>Host Name (or IP Address)</strong> kannst du den Benutzernamen gefolgt von einem <code>@</code> und dem Namen oder der IP-Adresse des Zielrechners angeben.</p>
- <p class="img-container"><img src="./slackware_ssh_putty.png" alt=""></p>
- <p>Nachdem du auf <strong>Connect</strong> geklickt hast, öffnet sich ein Terminalfenster in dem du das Passwort des Benutzers angeben musst. Nach erfolgreicher Eingabe hast du einen entfernten Shell-Zugriff auf dein Linux-System.</p>
- <div style="page-break-after: always;"></div>
- <h3 id="winscp"><a class="header-link" href="#winscp"></a>WinSCP</h3>
- <p>Unter Windows kann das Programm <strong>WinSCP</strong> zur Dateiübertragung verwendet werden. Du kannst es auf folgender Webseite herunterladen: </p>
- <p><nobr><a href="https://winscp.net/eng/downloads.php">https://winscp.net/eng/downloads.php</a></nobr></p>
- <p>Nach dem Start der Applikation öffnet sich ein Dialog, in dem du die Verbindungsinformationen angeben kannst. Die Übertragung von Dateien kann per Drag-and-Drop erfolgen.</p>
- <p class="img-container"><img src="./slackware_winscp_connect.png" alt=""></p>
- <div style="page-break-after: always;"></div>
- <h3 id="ssh-keys"><a class="header-link" href="#ssh-keys"></a>SSH-Keys</h3>
- <p>Der SSH-Zugriff erfolgte bisher über die Eingabe des Passworts. Eine sichere Alternative ist die Verwendung von sogenannten SSH-Keys. Standardmässig ist der Root-Zugriff via SSH unter Slackware nur mit Key möglich. Wir möchten dies auch für dein normales Benutzerkonto konfigurieren.</p>
- <p>Dazu musst du zunächst für dein Benutzerkonto einen SSH-Key erstellen:</p>
- <p><code>ssh-keygen -t ed25519</code></p>
- <p>Bei <em>Enter file in which to save the key</em> kannst du einfach den Standardspeicherort durch Eingabe von Enter übernehmen. Daraufhin wirst du gefragt, ob du ein Passwort für deinen Schlüssel angeben möchtest. Dies ist dringend zu empfehlen. Das Passwort siehst du während der Eingabe nicht. Bestätige es mit Enter und gebe das Passwort erneut ein.</p>
- <p class="img-container"><img src="./slackware_ssh_keygen.png" alt=""></p>
- <p>Das neu erzeugte Schlüsselpaar wurde unter <em>/home/linuxuser/.ssh/</em> abgespeichert.</p>
- <h4 id="zugriff-mit-ssh-key"><a class="header-link" href="#zugriff-mit-ssh-key"></a>Zugriff mit SSH-Key</h4>
- <p>Um mittels SSH-Key auf dein Linux-System zugreifen zu können, musst du den öffentlichen Schlüssel (Public-Key) zur Datei <em>~/.ssh/authorized_keys</em> hinzufügen. Dort werden die erlaubten Schlüssel hinterlegt.</p>
- <p><code>cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys</code></p>
- <p>Der Befehl <code>cat</code> gibt den Inhalt des zuvor erzeugten Public-Keys aus. Mit der Angabe von <code>>></code> leitest du die Ausgabe in eine andere Datei um, in diesem Falle in die Datei <em>~/.ssh/authorized_keys</em>. Da du <code>>></code> angegeben hast, wird die Ausgabe des <code>cat</code> Befehls an die Zieldatei angehängt, wenn diese bereits existiert. Durch die Angabe von nur einem <code>></code> würde die Zieldatei überschreiben werden.</p>
- <p>Aus Sicherheitsgründen solltest du die Rechte auf die <em>~/.ssh/authorized_keys</em> Datei einschränken:</p>
- <p><code>chmod 600 ~/.ssh/authorized_keys</code></p>
- <div style="page-break-after: always;"></div>
- <h5 id="linuxmac-ssh-client-mit-key"><a class="header-link" href="#linuxmac-ssh-client-mit-key"></a>Linux/Mac SSH-Client mit Key</h5>
- <p>Um von einem anderen Rechner auf dein Linux-System zugreifen zu können, musst du den privaten Schlüssel (Private-Key) dort hinkopieren. Dazu kannst du, wie du zuvor gelernt hast, das SCP-Kommando verwenden.</p>
- <p>Falls auf dem anderen Rechner ebenfalls Linux installiert ist, kannst du dort folgenden Befehl ausführen. Stelle zuvor sicher, dass dort nicht bereits eine gleichnamig Datei existiert, andernfalls kannst du beim scp Kommando den Namen der Zieldatei entsprechend anpassen:</p>
- <pre class="hljs"><code>ls -al ~<span class="hljs-regexp">/.ssh/i</span>d_ed25519
- scp linuxuser@<span class="hljs-number">192.168</span>.<span class="hljs-number">0.100</span>:<span class="hljs-regexp">/home/</span>linuxuser<span class="hljs-regexp">/.ssh/i</span>d_ed25519 ~<span class="hljs-regexp">/.ssh/i</span>d_ed25519</code></pre><p>Der Zugriff mit dem SSH-Schlüssel erfolgt durch Angabe des Schlüssels mit dem <code>-i</code> Parameter, zum Beispiel:</p>
- <p><code>ssh -i ~/.ssh/id_ed25519 linuxuser@192.168.0.100</code></p>
- <p>Das <strong>scp</strong> Kommando unterstützt ebenfalls den <code>-i</code> Parameter.</p>
- <h5 id="windows-ssh-verbindung-mit-key"><a class="header-link" href="#windows-ssh-verbindung-mit-key"></a>Windows SSH-Verbindung mit Key</h5>
- <p>Wenn du mit dem privaten Schlüssel von einem Windows-PC auf dein Linux-System zugreifen möchtest, musst du diesen ebenfalls zuvor dorthin übertragen. Dazu kannst du das <strong>WinSCP</strong> Programm nutzen. Unter Windows kannst du den Schlüssel in einem beliebigen Ordner abspeichern, zum Beispiel in deinem Dokumenten-Ordner.</p>
- <p><strong>Hinweis</strong>: WinSCP stellt standardmässig versteckte Dateien und Ordner nicht dar. Unter Linux gelten Dateien und Ordner die mit einem <code>.</code> angeführt werden als versteckt. Da es sich bei <em>~/.ssh</em> um einen solchen versteckten Ordner handelt, wird dieser nicht angezeigt. Damit du ihn in WinSCP siehst, kannst du <code>Ctrl + Alt + H</code> zusammen drücken. </p>
- <p>Thunar bietet ebenfalls eine solche Möglichkeit, allerdings lautet der Shortcut hier: <code>Ctrl + H</code>. Ein erneutes Drücken blendet die versteckten Dateien wieder aus.</p>
- <h6 id="schlüssel-umwandeln-in-ppk"><a class="header-link" href="#schlüssel-umwandeln-in-ppk"></a>Schlüssel umwandeln in .ppk</h6>
- <p>Putty sowie auch WinSCP verwenden ein anderes Schlüsselformat. Für die Umwandlung des Schlüssels benötigst du ein Windows-Hilfsprogramm mit dem Namen <strong>puttygen</strong>. Du findest es auf der Putty Downloadseite, indem du dort nach <em>puttygen.exe</em> suchst. Es gibt 32bit und 64bit Binaries, wähle das zu deiner Windows-Installation passende aus und lade es herunter,</p>
- <p><a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html">https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html</a></p>
- <div style="page-break-after: always;"></div>
- <p>Nach dem Start der Anwendung kannst du den Menüpunkt <strong>Conversions -> Import Key</strong> wählen. Du wirst nach dem Schlüsselpasswort, welches du bei der Erstellung des SSH-Keys angegeben hast gefragt.</p>
- <p>Um den Schlüssel im <em>.ppk</em> Format zu exportieren, klicke bitte auf <strong>Save Private Key</strong>. Du kannst ihn beispielsweise auch in deinem Dokumenten-Ordner abspeichern.</p>
- <p class="img-container"><img src="./slackware_puttygen_export.png" alt=""></p>
- <div style="page-break-after: always;"></div>
- <h6 id="winscp-mit-ssh-key"><a class="header-link" href="#winscp-mit-ssh-key"></a>WinSCP mit SSH-Key</h6>
- <p>Den so im <em>.ppk</em>-Format exportierten Schlüssel kannst du in den Verbindungseinstellungen von WinSCP angeben, in dem du bei der Verbindungsübersicht den Punkt <strong>Advanced -> Advanced</strong> auswählst.</p>
- <p>In dem sich öffnenden Konfigurationsdialog kannst du unter <strong>SSH -> Authentication</strong> im Bereich <strong>Private Key File</strong> den privaten Schlüssel im ppk Format hinterlegen.</p>
- <p class="img-container"><img src="./slackware_winscp_privkey.png" alt=""></p>
- <p>Der eigentliche Verbindungsaufbau funktioniert wie bereits bekannt, ausser das du kein Passwort mehr angibst. Das Passwort-Feld kannst du leer belassen. Du wirst während des Aufbaus der Verbindung nach dem Passwort des SSH-Schlüssels gefragt.</p>
- <p>Wenn du dich häufiger verbindest, ergibt es Sinn, über den <strong>Save</strong> Button ein Profil zu erstellen, das du jederzeit wieder aufrufen kannst.</p>
- <h6 id="putty-mit-ssh-key"><a class="header-link" href="#putty-mit-ssh-key"></a>Putty mit SSH-Key</h6>
- <p>Den Schlüssel im <em>.ppk</em>-Format kannst du ebenfalls im Putty verwenden. Wähle dazu im Menü den Punkt <strong>Connection -> SSH -> Auth</strong> und hinterlege dort den Schlüssel.</p>
- <p>Es bietet sich an auch im Putty die Sitzung abzuspeichern. Dazu musst du die Verbindungsinformationen angeben, den Key wie oben angegeben hinterlegen, im Feld <strong>Saved Sessions</strong> einen Namen angeben und auf <strong>Save</strong> klicken.</p>
- <div style="page-break-after: always;"></div>
- <h5 id="passwort-anmeldung-deaktivieren"><a class="header-link" href="#passwort-anmeldung-deaktivieren"></a>Passwort Anmeldung deaktivieren</h5>
- <p>Sobald du die Authentifizierung mit dem neu erstellten SSH-Key getestet hast und du dich erfolgreich damit anmelden konntest, ist es empfehlenswert die SSH-Anmeldung über Passworteingabe zu deaktivieren. Die Konfiguration des <em>ssh daemons</em> wird in der Datei <em>/etc/ssh/sshd_config</em> vorgenommen. Über die Option <em>PasswordAuthentication</em> wird gesteuert, ob eine Anmeldung mittels Passwort zugelassen werden soll oder nicht.</p>
- <p>Mithilfe des Befehls <code>sshd -T</code> kannst du dir die aktuelle Einstellung anzeigen lassen:</p>
- <p><code>sudo sshd -T | grep -i --color 'PasswordAuthentication'</code></p>
- <p>Der Parameter <code>--color</code> färbt etwaige Treffer ein, <code>-i</code> sorgt dafür, dass Gross- und Kleinschreibung ignoriert wird.</p>
- <p class="img-container"><img src="./slackware_sshd_parameters.png" alt=""></p>
- <p>Schaue dir nun die Einstellung in der Konfigurationsdatei <em>/etc/sshd/sshd_config</em> an:</p>
- <p><code>grep -i --color 'PasswordAuthentication yes' /etc/ssh/sshd_config</code></p>
- <p class="img-container"><img src="./slackware_grep_sshd.png" alt=""></p>
- <p>Du siehst, dass die Option <em>PasswordAuthentication</em> auf <em>yes</em> gesetzt ist. Auch wenn ein <code>#</code>-Zeichen vor der Zeile angegeben ist, wird diese Konfiguration übernommen, da es sich um die Standardeinstellung für diesen Parameter handelt. In der *man-page von sshd_config werden die Defaultwerte für die jeweiligen Konfigurationsoptionen angegeben:</p>
- <p><code>man sshd_config</code></p>
- <p class="img-container"><img src="./slackware_man_sshd.png" alt=""></p>
- <p><strong>Hinweis</strong>: ähnlich wie vim unterstützt auch <strong>man</strong> die interaktive Suche. Du kannst <code>/</code> gefolgt vom Suchbegriff eingeben, um die Suche auszulösen. Weitere Treffer kannst du dir mit <code>n</code> anzeigen lassen, solange du dich im Suchmodus befindest.</p>
- <p>Um die Einstellung zu ändern, kannst du die Datei <em>/etc/sshd/sshd_config</em> mit dem Editor öffnen, die Raute vor <em>PasswordAuthentication</em> entfernen und den Wert auf <em>no</em> setzen oder folgenden Befehl ausführen:</p>
- <pre class="hljs"><code>sudo sed -i <span class="hljs-string">'s/^[# ]*PasswordAuthentication.*$/PasswordAuthentication no/g'</span> <span class="hljs-regexp">/etc/</span>ssh/sshd_config</code></pre><p><strong>sed</strong> steht für <strong>s</strong>tream <strong>ed</strong>itor. Das Kommando erlaubt das nicht-interaktive bearbeiten von Text-Datenströme oder Dateien. Die Option <code>-i</code> führt die Änderungen direkt in der Datei durch. Der eigentliche sed Befehl beginnt mit dem <code>'</code> Zeichen. <code>s</code> besagt, dass sogenannte Regular Expressions (<em>RegEx</em>) verwendet werden sollen.</p>
- <div style="page-break-after: always;"></div>
- <p>Das dem <code>s</code> folgende Zeichen leitet den Suchbegriff ein. Das <code>^</code>-Zeichen steht für den Zeilenanfang. Darauf folgt eine RegEx <code>[# ]*</code> die besagt, dass die Zeichen <code>#</code> und das Leerzeichen beliebig oft oder gar nicht vorkommen können. Darauf folgt der Suchstring <code>PasswordAuthentication</code>, denn diese Konfigurationsoption möchten wir bearbeiten. Das <code>.*</code> steht für keines, eines oder mehrere beliebige Zeichen. <code>$</code> bezeichnet das Zeilenende.</p>
- <p>Nach dem zweiten <code>/</code> wird die Substitution angegeben, in diesem Falle <code>PasswordAuthentication no</code>. Der dritte <code>/</code> schliesst die Suche und Substitution ab. Das <code>g</code> steht für <em>global</em>. Damit werden alle Vorkommnisse behandelt, andernfalls würde nur der erste Treffer in der Zeile ersetzt. Das <code>'</code> schliesst den Sed-Befehl ab. Als Parameter wird die zu bearbeitende Datei angegeben.</p>
- <p>Nach der Anpassung der SSH Konfiguration, musst du den Dienst neu starten, damit die Änderungen aktiv werden:</p>
- <p><code>sudo /etc/rc.d/rc.sshd restart</code></p>
- <p>Versuche dich von einem anderen Computer mit deinem Passwort einzuloggen. Dies sollte nun nicht mehr möglich sein. Ein Login mittels SSH-Key hingegen schon.</p>
- <h1 id="x2go"><a class="header-link" href="#x2go"></a>X2Go</h1>
- <p>Neben der Möglichkeit des SSH-Shell-Zugriffs kannst du mit <em>X2Go</em> auch grafisch von einem anderen PC oder Mac auf dein Linux-System zugreifen. <em>X2Go</em> besteht aus einer Server- und einer Clientkomponente. </p>
- <h2 id="x2goserver"><a class="header-link" href="#x2goserver"></a>x2goserver</h2>
- <p>Der Server-Teil wird auf deinem Linux-System installiert. Möglich ist dies, mithilfe der von den Autoren dieses Kurses bereitgestellten SlackBuilds. Zur Vorbereitung müssen zwei Benutzer und Gruppen erstellt und die Berechtigungen entsprechend angepasst werden:</p>
- <pre class="hljs"><code><span class="hljs-attribute">sudo</span> groupadd -g <span class="hljs-number">290</span> x<span class="hljs-number">2</span>gouser
- <span class="hljs-attribute">sudo</span> useradd -u <span class="hljs-number">290</span> -g <span class="hljs-number">290</span> -c <span class="hljs-string">"X2Go Remote Desktop"</span> -M -d /var/lib/x<span class="hljs-number">2</span>go -s /bin/false x<span class="hljs-number">2</span>gouser
- <span class="hljs-attribute">sudo</span> groupadd -g <span class="hljs-number">291</span> x<span class="hljs-number">2</span>goprint
- <span class="hljs-attribute">sudo</span> useradd -u <span class="hljs-number">291</span> -g <span class="hljs-number">291</span> -c <span class="hljs-string">"X2Go Remote Desktop"</span> -m -d /var/spool/x<span class="hljs-number">2</span>goprint -s /bin/false x<span class="hljs-number">2</span>goprint
- <span class="hljs-attribute">sudo</span> chown x<span class="hljs-number">2</span>goprint:x<span class="hljs-number">2</span>goprint /var/spool/x<span class="hljs-number">2</span>goprint
- <span class="hljs-attribute">sudo</span> chmod <span class="hljs-number">0770</span> /var/spool/x<span class="hljs-number">2</span>goprint</code></pre><p>Die eigentliche Installation kann mit sbopkg, unter Angabe des Queuefiles durchgeführt werden:</p>
- <p><code>sudo sbopkg -k -i x2goserver</code></p>
- <p>Vor dem ersten Start des Servers muss eine Datenbank angelegt werden. Dazu kannst du folgendes Kommando ausführen:</p>
- <p><code>sudo x2godbadmin --createdb</code></p>
- <div style="page-break-after: always;"></div>
- <p>Damit der Dienst beim Systemstart ausgeführt wird, muss das enthaltene Runlevel-Script als ausführbar markiert werden und der Dienst in der <code>/etc/rc.d/rc.local</code> Runlevel-Datei inkludiert werden:</p>
- <p><code>sudo chmod +x /etc/rc.d/rc.x2goserver</code></p>
- <p><code>sudo vi /etc/rc.d/rc.local</code></p>
- <p>Füge die folgende <em>if-Abfrage</em> am Ende der Runlevel-Datei ein:</p>
- <pre class="hljs"><code><span class="hljs-keyword">if</span> [ -x <span class="hljs-regexp">/etc/</span>rc.d/rc.x2goserver ]; then
- <span class="hljs-regexp">/etc/</span>rc.d/rc.x2goserver start
- fi </code></pre><p>Um den Service im laufenden System zu aktivieren, kannst du das Startscript manuell ausführen:</p>
- <p><code>sudo /etc/rc.d/rc.x2goserver start</code></p>
- <h2 id="x2goclient"><a class="header-link" href="#x2goclient"></a>x2goclient</h2>
- <p>Die Clientkomponente ist für Windows, Mac und unterschiedlichste Linux-Distributionen verfügbar. Die Installation wird auf der Wiki-Seite des Projektes im Detail beschrieben:</p>
- <p><a href="https://wiki.x2go.org/doku.php/doc:installation:x2goclient">https://wiki.x2go.org/doku.php/doc:installation:x2goclient</a></p>
- <p>Auch SlackBuilds sind verfügbar, falls es sich um den Rechner, von dem du auf dein Linux-System zugreifen möchtest, ebenfalls um eine Slackware-Installation handelt. Die Installation verläuft in diesem Falle wie bekannt mithilfe des sbopkg Kommandos und dem verfügbaren Queuefile:</p>
- <p><code>sudo sbopkg -k -i x2goclient</code></p>
- <div style="page-break-after: always;"></div>
- <h3 id="client-konfigurieren"><a class="header-link" href="#client-konfigurieren"></a>Client konfigurieren</h3>
- <p>Nach der Installation und dem ersten Start des Clients, begrüsst dich dieser mit dem Sitzungseinstellungs-Dialog:</p>
- <p class="img-container"><img src="./slackware_x2goclient_session.png" alt=""></p>
- <p>Als <strong>Sitzungsname</strong> kannst du einen klingenden Namen angeben. Im Feld <strong>Host</strong> kannst du die IP-Adresse deines Linux-Systems angeben. Bei <strong>Login</strong> wird dein Benutzername hinterlegt. Im Pull-Down-Menü <strong>Sitzungsart</strong> kannst du <strong>Xfce</strong> wählen. Da du einen SSH-Schlüssel verwendest, muss dieser im Bereich <strong>RSA-/DSA-Schlüssel</strong> hinterlegt werden.</p>
- <p><strong>Hinweis</strong>: falls es sich bei dem Rechner, von dem aus du zugreifen möchtest, ebenfalls um eine Linux-Installation handelt, werden im File-Picker-Dialog standardmässig die versteckten Dateien und Ordner nicht angezeigt. Um diese einzublenden, drücke <code>Ctrl + H</code>. Durch erneutes drücken, werden die versteckten Dateien wieder ausgeblendet. Falls du den Windows-Client verwenden möchtest, gebe dort den Originalschlüssel und nicht den Schlüssel im <em>.ppk</em>-Format an.</p>
- <div style="page-break-after: always;"></div>
- <p>Unter dem Reiter Ein-/Ausgabe kannst du einige erweiterte Einstellungen vornehmen:</p>
- <p class="img-container"><img src="./slackware_x2goclient_input_output.png" alt=""></p>
- <p>Im Bereich <strong>Display</strong> besteht die Möglichkeit die Bildschirmauflösung festzulegen. Die Standardauflösung ist mit <em>800x600px</em> sehr gering.</p>
- <p>Es ist sinnvoll die DPI Einstellungen an die tatsächlichen Werte deines Linux-Systems anzupassen. DPI gibt den Skalierungsfaktor der Schriften an. Um herauszufinden, welche DPI-Werte dein Linux-System verwendet, kannst du in einem Xfce-Terminal folgenden Befehl ausführen:</p>
- <p><code>xdpyinfo | grep resolution</code></p>
- <p>In den meisten Fällen ist der DPI-Wert <code>96</code>.</p>
- <div style="page-break-after: always;"></div>
- <p>Nach dem Speichern der Änderungen gelangst du zur Übersicht. </p>
- <p>Auf der rechten Seite werden alle erstellten Sitzungen angezeigt. Durch einen Doppelklick auf die Sitzung startet der Verbindungsaufbau und du wirst nach dem Passwort zu deinem SSH-Schlüssel gefragt.</p>
- <p class="img-container"><img src="./slackware_x2goclient_start.png" alt=""></p>
- <p>Wenn der Verbindungsaufbau erfolgreich war, hast du von deinem anderen Computer grafischen Zugriff auf dein Linux-System:</p>
- <p class="img-container"><img src="./slackware_x2goclient_connected.png" alt=""></p>
- <div style="page-break-after: always;"></div>
- <h2 id="dyndns"><a class="header-link" href="#dyndns"></a>DynDNS</h2>
- <p>Da wir bisher die LAN (local area network) IP-Adresse zum Verbindungsaufbau verwenden, ist ein Zugriff über das Internet nicht möglich. In der Regel verwenden Endkunden-Internetanschlüsse sogenannte dynamische IP-Adressen, das heisst, deine öffentliche IP-Adresse, mit der du im Internet erreichbar bist, kann sich jederzeit ändern. Um in einem solchen Falle einen Remote-Zugriff über das Internet zu ermöglichen, bietet sich die Nutzung eines sogenannten DynDNS-Services an. Dieser funktioniert prinzipiell wie folgt: Du registrierst dich bei einem DynDNS-Provider und konfigurierst einen Dienst auf deinem Linux-System, der dem DynDNS-Provider in regelmässigen Abständen deine aktuelle externe IP-Adresse mitteilt. Der Provider aktualisiert dann den von dir registrierten Namen, sodass du jederzeit über diesen Namen, deinen Rechner erreichen kannst.</p>
- <h3 id="ddclient"><a class="header-link" href="#ddclient"></a>ddclient</h3>
- <p>Ein möglicher Client-Dienst zur Aktualisierung von DynDNS-Adressen ist <strong>ddclient</strong>. Die Installation erfolgt aus dem SlackBuild mithilfe von sbopkg. Wähle das Queuefile zur Erstellung der Abhängigkeiten:</p>
- <p><code>sudo sbopkg -k -i ddclient</code></p>
- <p>Damit ist <strong>ddlient</strong> bereits installiert, allerdings noch nicht konfiguriert. Du kannst das Startscript als ausführbar markieren und in der <em>/etc/rc.d/rc.local</em> Runlevel Datei aufrufen:</p>
- <p><code>sudo chmod +x /etc/rc.d/rc.ddclient</code></p>
- <p><code>sudo vi /etc/rc.d/rc.local</code></p>
- <p>du kannst die <em>if-Abfrage</em> zur Einbindung des Startscriptes vor dem Aufruf des x2goservers einfügen:</p>
- <pre class="hljs"><code><span class="hljs-keyword">if</span> [ -x <span class="hljs-regexp">/etc/</span>rc.d/rc.ddclient ]; then
- <span class="hljs-regexp">/etc/</span>rc.d/rc.ddclient start
- fi </code></pre><div style="page-break-after: always;"></div>
- <h3 id="nsupdateinfo"><a class="header-link" href="#nsupdateinfo"></a>nsupdate.info</h3>
- <p>Ein freier und netter DynDNS-Serviceanbieter ist nsupdate.info:</p>
- <p><a href="https://www.nsupdate.info/">https://www.nsupdate.info/</a></p>
- <p>Du kannst dir dort kostenlos ein Konto erstellen. Nach der Registrierung hast du die Möglichkeit im Bereich <strong>Übersicht</strong> einen neuen Host Eintrag über den Punkt <strong>Host hinzufügen</strong> zu erstellen.</p>
- <p class="img-container"><img src="./slackware_nsupdate_create_host.png" alt=""></p>
- <p>Im Feld <strong>Name</strong> kannst du einen Namen angeben unter dem dein Linux-System erreichbar sein soll. Der Name muss bei dem Serviceanbieter noch verfügbar sein. Im Pull-Down-Menü <strong>Domain</strong> kannst du dir eine der verfügbaren Domains aussuchen. Über einen Klick auf <strong>Erzeugen</strong> wird der Host erstellt.</p>
- <p>Nach der Erstellung gelangst du zur Übersichtsseite. Dort findest du Beispielkonfigurationen für unterschiedlichste DynDNS-Client-Implementierungen. Wir gehen davon aus, dass du das zuvor installierte <strong>ddclient</strong> Programm auf deinem Linux-System nutzen möchtest.</p>
- <p><strong>Hinweis</strong>: Bei jedem erneuten Aufruf der Client-Konfigurationsseite wird ein neues Passwort generiert! Daher ist zu empfehlen die Konfiguration zu kopieren, in einem Editor wie gedit zwischenzuspeichern und die Seite zu schliessen.</p>
- <div style="page-break-after: always;"></div>
- <p>Markiere unter dem Reiter <strong>ddclient</strong> die in der Textbox angezeigte Konfiguration und kopiere sie in den Editor gedit, den du mit Root-Rechten aus einem Terminal heraus starten kannst:</p>
- <p class="img-container"><img src="./slackware_nsupdate_ddclient.png" alt=""></p>
- <p><code>sudo gedit</code></p>
- <p>Speichere die Konfigurationsdatei unter <em>/etc/ddclient/ddclient.conf</em> ab. Das Wurzelverzeichnis erreichst du im <em>Speichern</em>-Dialog über die Auswahl von <strong>Dateisystem</strong> unterhalb von <strong>Orte</strong>. Von dort aus kannst du das entsprechende Verzeichnis auswählen, also <code>etc</code> und dann <code>ddclient</code>. Gebe bei Name <strong>ddclient.conf</strong> an oder klicke auf die bereits vorhandene Paket-Konfigurationsdatei, was den gleichen Effekt hat.</p>
- <p>Nach dem Abspeichern der Konfigurationsdatei kannst du den Dienst mit folgendem Befehl im laufenden System starten:</p>
- <p><code>sudo /etc/rc.d/rc.ddclient start</code></p>
- <p>Es sollte eine Meldung erscheinen, die besagt, dass die IP-Adresse deines DynDNS-Hostnamens erfolgreich aktualisiert wurde.</p>
- <h3 id="router-konfiguration"><a class="header-link" href="#router-konfiguration"></a>Router-Konfiguration</h3>
- <p>Per Default erlauben Internetrouter keinen Zugriff auf Rechner in deinem LAN. Das ist eine gute und sichere Voreinstellung. Wenn du den Zugriff auf dein Linux-System über SSH (TCP Port 22) erlauben möchtest, so musst du in deinem Router eine entsprechende Portforwarding Regel erstellen.</p>
- <p>Falls du DHCP zur Vergabe von IP-Adressen in deinem Netzwerk verwendest, solltest du zunächst eine MAC-Adressen-Fixierung vornehmen, damit dein Linux-System jedes Mal die gleiche IP-Adresse zugewiesen bekommt.</p>
- <p>Danach kannst du die Portforwarding Regel erstellen, die TCP Port 22 von extern auf dein Linux-System weiterleitet.</p>
- <p><strong>Hinweis</strong>: Bei einigen Providern wie UPC muss zunächst IPv4 auf dem Router aktiviert werden. Dies kann durch die Service-Hotline vorgenommen werden. Erst danach ist es möglich Port-Forwarding zu konfigurieren.</p>
- <div style="page-break-after: always;"></div>
- <h1 id="kde"><a class="header-link" href="#kde"></a>KDE</h1>
- <p>Mit KDE steht unter Slackware eine sehr mächtige alternative Desktopumgebung zur Verfügung. Ursprünglich stand die Abkürzung KDE für <strong>Kool</strong> <strong>D</strong>eskop <strong>E</strong>nvironment. Seit 2009 bezeichnet der Begriff <em>KDE</em> die Entwicklergemeinschaft und die resultierende Software wird unter dem Namen <em>KDE SC - (KDE Software Compilation)</em> veröffentlicht. Diese besteht aus folgenden Komponenten:</p>
- <ul class="list">
- <li>KDE Plasma Desktop</li>
- <li>KDE Frameworks</li>
- <li>KDE Applikationen</li>
- </ul>
- <p>Unter Slackware sind diese Komponenten Bestandteil der Paketgruppe <em>KDE</em>. Da wir diese während der Basisinstallation abgewählt haben, können wir die Installation nun mit <em>slackpkg</em> nachholen.</p>
- <p>Öffne dazu ein Terminal. Mithilfe von <code>sudo slackpkg install kde</code> kannst du die KDE-Desktopumgebung installieren:</p>
- <pre class="hljs"><code>sudo slackpkg <span class="hljs-keyword">install</span> kde</code></pre><p>KDE besteht aus einer grossen Anzahl von Paketen. slackpkg zeigt dir eine Übersicht der Pakete die installiert werden:</p>
- <p class="img-container"><img src="./slackware_slackpkg_kde.png" alt=""></p>
- <p>Bestätige die Installation mit der Auswahl von <strong>OK</strong>.</p>
- <p>Die Installation kann einige Zeit dauern. </p>
- <div style="page-break-after: always;"></div>
- <h2 id="kdm"><a class="header-link" href="#kdm"></a>KDM</h2>
- <p>Mit der KDE-Desktopumgebung wird auch der Displaymanager <em>KDM</em> installiert. Da dieser in der Runlevel Konfigurationsdatei <em>/etc/rc.d/rc.4</em> vor XDM gelistet wird, startet KDM beim nächsten Systemstart.</p>
- <p>Über das Xfce Benutzermenü kannst du den Rechner neu starten und es begrüsst dich der neue Loginmanager. Über die Schaltfläche unten links lässt sich die zu startende Sitzung auswählen:</p>
- <p class="img-container"><img src="./slackware_kdm_session_kde.png" alt=""></p>
- <p>In der Liste kannst du aus den verfügbaren Desktopumgebungen und Windowmanagern <em>Plasma (X11)</em> auswählen.</p>
- <p>Nach Eingabe deines Passworts und einem Klick auf den Pfeil startet die KDE-Sitzung. </p>
- <p>Alternativ kannst du im Displaymanager jederzeit wieder auf Xfce wechseln oder einen der anderen verfügbaren Windowmanager ausprobieren.</p>
- <div style="page-break-after: always;"></div>
- <h2 id="der-kde-desktop"><a class="header-link" href="#der-kde-desktop"></a>Der KDE Desktop</h2>
- <p>KDE begrüsst dich mit einem Splashscreen woraufhin der Desktop geladen wird:</p>
- <p class="img-container"><img src="./slackware_kde_overview.png" alt=""></p>
- <ol class="list">
- <li>Das Anwendungsmenü. Es erlaubt die interaktive Suche nach Applikationen oder die Suche innerhalb von Kategorien. Klicke dazu auf <strong>Anwendungen</strong></li>
- <li>Schnellstarter. Über diese Icons hast du mit einem Klick Zugriff auf die entsprechenden Anwendungen. Mit der rechten Maustaste lassen sich neue Starter hinzufügen.</li>
- <li>Der Infobereich. Links findest du den Systray, in dem Applikationen ihre Icons ablegen können. Daneben findest du die Uhr und ganz am rechten Rand das sogenannte Cashew, über welches du das Panel anpassen kannst (Höhe, Breite, Position, Widgets etc.).</li>
- </ol>
- <div style="page-break-after: always;"></div>
- <h3 id="tastaturlayout"><a class="header-link" href="#tastaturlayout"></a>Tastaturlayout</h3>
- <p>Falls das Tastaturlayout noch nicht dem Richtigen entspricht, kannst du über <strong>Systemeinstellungen > Tastatur > Belegungen</strong> auf <strong>Belegung einrichten</strong> klicken, um das Schweizer Tastaturlayout hinzuzufügen.</p>
- <p class="img-container"><img src="./slackware_kde_keyboard.png" alt=""></p>
- <p>Im neu geöffneten Fenster kannst du nun das Layout auswählen und die Einstellungen anwenden.</p>
- <p class="img-container"><img src="./slackware_kde_keyboard_add.png" alt=""></p>
- <p>Damit die Einstellungen angewendet werden, musst du dich neu einloggen.</p>
- <div style="page-break-after: always;"></div>
- <h1 id="temporäre-dateien"><a class="header-link" href="#temporäre-dateien"></a>Temporäre Dateien</h1>
- <p>Unter Linux wird unter anderem das <em>/tmp</em> Verzeichnis zur Speicherung von temporären Dateien genutzt. Um dies regelmässig zu bereinigen, kannst du beispielsweise mit Root-Rechten folgende Zeilen zu deiner <em>/etc/rc.d/rc.local_shutdown</em> Datei hinzufügen:</p>
- <pre class="hljs"><code><span class="hljs-comment"># Clean /tmp and silently re-create SBo folder</span>
- <span class="hljs-regexp">/usr/</span>bin<span class="hljs-regexp">/find /</span>tmp -mindepth <span class="hljs-number">1</span> -maxdepth <span class="hljs-number">1</span> -exec <span class="hljs-regexp">/bin/</span>rm -rf {} +; mkdir <span class="hljs-regexp">/tmp/</span>SBo > <span class="hljs-regexp">/dev/</span>null <span class="hljs-number">2</span>>&<span class="hljs-number">1</span> </code></pre><p>Im nächsten Kursteil geht es um den Wechsel auf die Entwicklerversion von Slackware mit der Bezeichnung <nobr><em>-current</em></nobr>.</p>
- <p>Current < PDF ></br>
- ↪ <a href="https://linuxkurs.ch/kurs/Current.pdf">https://linuxkurs.ch/kurs/Current.pdf</a></p>
- <p>Current < HTML ></br>
- ↪ <a href="https://linuxkurs.ch/kurs/Current.html">https://linuxkurs.ch/kurs/Current.html</a></p>
- <hr>
- <p>© CC-BY-SA - Lioh Moeller</p>
- </article>
- </body>
- </html>
|