• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Anleitung fürs Wiki: 2. SSH-Server

ojkastl

Hacker
Mahlzeit,

ich hab mich in den letzten Wochen ein bisschen mit dem Aufsetzen eines 2. SSH-Servers beschäftigt. Das ganze würde ich gerne der Allgemeinheit als Wiki-Artikel zur Verfügung stellen. Vorher bitte ich euch ums Korrekturlesen, und ausgiebiges Ausprobieren dieser Rohfassung. Also nur die Befehle, der Text kann dann ja ergänzt werden. Also vor allem prinzipielle Dinge. Gehen die Befehle, geht das einloggen, Fehlermeldungen,...
Danke.

======================================

VERSION 0.0.2 :D

Aufsetzen eines 2. SSH-Servers mit anderem Port:

Motivation:

Zusätzlicher SSH-Server, der nach außen freigegeben werden kann, abgesichert werden kann etc. ohne den bestehenden SSHD zu beeinflussen.

Alle Arbeiten natürlich als root. [Hinweis auf den Artikel zu sudo, permant-root-sein ...]

Ich habe im weiteren Verlauf immer die Ausgaben des diff-Kommandos zwischen den Original-Dateien und den modifizierten Dateien. Das ist erstmal nur zur Übersicht, da man dort recht schön sitzt was geändert wurde. Am einfachsten ist es aber, wenn man die angepassten Dateien direkt herunterlädt:

Sämtliche angepasste Dateien gibt es als Archiv unter
http://www.ojkastl.de/pub/LinuxClub/2ter_SSHD_HOWTO

-----------------------------------------------------
So jetzt geht es los:

/etc/ssh/sshd_config nach /etc/ssh/ojs_sshd kopieren, dann den Eintrag zu "Port" anpassen:

Code:
cp /etc/ssh/sshd_config /etc/ssh/ojs_sshd

diff /etc/ssh/ojs_sshd_config /etc/ssh/sshd_config
Code:
13c13
< Port 50000
---
> #Port 22

Später kann man den zweiten SSHD ja beliebig anpassen und absichern (allowusers, pubkey,...)

/etc/sysconfig/ssh nach /etc/sysconfig/ojs_ssh kopieren und anpassen:

Code:
cp /etc/sysconfig/ssh /etc/sysconfig/ojs_ssh

Hier ein "diff /etc/sysconfig/ssh /etc/sysconfig/ojs_ssh"
Code:
2c2
< ## Description:       SSH server settings
---
> ## Description:       OJs SSH server settings
5c5
< ## ServiceRestart: sshd
---
> ## ServiceRestart: ojs_sshd
7c7
< # Options for sshd
---
> # Options for ojs_sshd
9c9
< SSHD_OPTS=""
---
> SSHD_OPTS="-f /etc/ssh/ojs_sshd_config"


/etc/init.d/sshd nach /etc/init.d/ojs_sshd kopieren, und anpassen:

Code:
cp /etc/init.d/sshd /etc/init.d/ojs_sshd

"diff /etc/init.d/sshd /etc/init.d/ojs_sshd"
Code:
6c6
< # /etc/init.d/sshd
---
> # /etc/init.d/ojs_sshd
10c10
< # /usr/sbin/rcsshd
---
> # /usr/sbin/rcojs_sshd
13c13
< # Provides: sshd
---
> # Provides: ojs_sshd
18c18
< # Description: Start the sshd daemon
---
> # Description: Start the ojs_sshd daemon
21c21
< SSHD_BIN=/usr/sbin/sshd
---
> SSHD_BIN=/usr/sbin/ojs_sshd
24c24
< SSHD_SYSCONFIG=/etc/sysconfig/ssh
---
> SSHD_SYSCONFIG=/etc/sysconfig/ojs_ssh
28c28
< SSHD_PIDFILE=/var/run/sshd.init.pid
---
> SSHD_PIDFILE=/var/run/ojs_sshd.init.pid
60c60
<       echo -n "Starting SSH daemon"
---
>       echo -n "Starting OJs_SSH daemon"
70c70
<       echo -n "Shutting down SSH daemon"
---
>       echo -n "Shutting down OJs_SSH daemon"
100c100
<       echo -n "Reload service sshd"
---
>       echo -n "Reload service ojs_sshd"
108c108
<       echo -n "Checking for service sshd "
---
>       echo -n "Checking for service ojs_sshd "
126c126
<         test /etc/ssh/sshd_config -nt $SSHD_PIDFILE && echo reload
---
>         test /etc/ssh/ojs_sshd_config -nt $SSHD_PIDFILE && echo reload

Anschließend linkt man /usr/sbin/sshd nach /usr/sbin/ojs_sshd per
Code:
ln /usr/sbin/sshd /usr/sbin/ojs_sshd

Dann sollte man das Skript mal testen, einfach indem man
Code:
/etc/init.d/ojs_sshd status
und
Code:
/etc/init.d/ojs_sshd start

aufruft. Danach sollte ein
Code:
ps aux|grep sshd
zwei Einträge liefern:

Code:
root      3780  0.0  0.1   5712   952 ?        Ss   19:08   0:00 /usr/sbin/ojs_sshd -f /etc/ssh/ojs_sshd_config -o PidFile=/var/run/ojs_sshd.init.pid
root      3964  0.0  0.1   5712  1064 ?        Ss   19:08   0:00 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid

Durch unsere Änderungen läuft der zweite SSHD mit einer anderen Konfiguration, und hat ein eigenes PID-File (wichtig für die Status-Meldungen).

So, wenn alles geklappt hat, kann man absichern, den Port in der Firewall öffnen (<hier den Link zum Wiki-Artikel einfügen>) und das Skript für die jeweiligen Runlevel installieren. Ob man das per insserv, chkconfig oder Yast-Runleveleditor macht ist prinzipiell egal.

ANMERKUNGEN:

  • Das Umbenennen bzw. Linken der Datei in /usr/sbin war bei meinen Tests nötig, da sonst
    Code:
    rcojs_sshd status
    bzw.
    Code:
    rcsshd status
    Probleme machen. (Es gibt einen Bugreport dazu).

  • Auf Suse 9.3 muss man noch /etc/pam.d/sshd nach /etc/pam.d/ojs_sshd linken, geht per

    Code:
    ln /etc/pam.d/sshd /etc/pam.d/ojs_sshd

    sonst gibt es einen Fehler bei der Anmeldung am 2. SSH-Server.

  • Ich habe bei mir in beiden sshd_configs die Zeile
    Code:
    #ListenAddress 0.0.0.0
    in
    Code:
    ListenAddress 0.0.0.0
    um die lästigen bind-Fehler in /var/log/messages loszuwerden. IPv6 nutze ich hier nicht.

    Ein Fehler taucht noch in /var/log/messages auf, nämlich
    Code:
    May 13 17:26:39 HOSTNAME ojs_sshd[3921]: error: getnameinfo failed

    Keine Ahnung wie man den loswerden könnte, es funktioniert hier aber alles.

    So, noch Fragen?

    Sämtliche angepasste Dateien gibt es als Archiv unter
    http://www.ojkastl.de/pub/LinuxClub/2ter_SSHD_HOWTO

    Viel Spaß beim Testen,
    OJ

EDIT 20070515 07:21

Erklärung zu den diff-Ausgaben eingebaut, und Download früher erwähnt.
 
OP
O

ojkastl

Hacker
Ich mach mal die Ingrid:

Unter Kubuntu 7.04 geht es prinzipiell ähnlich. Nur ist da im sshd-executable das PID-File fest eingebaut, was Probleme schafft. Ich bin grad am Schauen wie man das lösen kann.

Und: Kann das jemand auf 10.0 und 10.1 testen, die habe ich hier nicht. Danke.
 

framp

Moderator
Teammitglied
ojkastl schrieb:
Das ganze würde ich gerne der Allgemeinheit als Wiki-Artikel zur Verfügung stellen.

Gute Idee :!: . Nur hätte ich es an Deiner Stelle gleich als draft ins WiKi gestellt. Dann hätten Korrekturen/Änderungen gleich direkt eingegeben werden können und Du mußt nicht die hiesigen Kommentare einpflegen :wink:

Ausprobiert habe ich Deine Anleitung nicht, da ich kein 10.0 und 10.1 habe.

Einen Kommentar habe ich: Die Methode Änderungen mit diff zu zeigen ist sicherlich Linux Kennern bekannt. Nur würde ich das explizit schreiben, was - wo durch was zu ersetzen ist. Das ist für Einsteiger leichter zu verstehen 8)
 

framp

Moderator
Teammitglied
@panamajo
ojkastl schrieb:
Zusätzlicher SSH-Server, der nach außen freigegeben werden kann, abgesichert werden kann etc. ohne den bestehenden SSHD zu beeinflussen.
Bei mir gibt es z.B. auch zwei ssh Server:
Der erste is ein 'normaler' vom lokalen Netz erreichbarer ssh auf Port 22 mit Passwordauthentification und ist per iptables nicht vom externen Internet erreichbar.
Der zweite ist ein vom externen Internet erreichbarer sshd auf einem Port <> 22 (wg der vielen Skriptkiddies und deren Zugriffsversuchen) und wo man aus Sicherheitsgründen nur mit Zertifikaten reinkommt.

Ich habe also einen 'normalen' sshd für das interne sichere Netz und einen 'hardened' sshd für das externe unsichere Netz / Internet.
 

rolle

Guru
Ich betreibe einen zweiten sshd, um meinen NX-Server abzusichern. Der eine lauscht außen und läßt nur Anmeldung per pubkey zu, der andere lauscht intern und läßt auch die für NX notwendige Passwortanmeldung zu. Dann tunnele ich den einen durch den anderen.
 
OP
O

ojkastl

Hacker
framp schrieb:
Gute Idee :!: . Nur hätte ich es an Deiner Stelle gleich als draft ins WiKi gestellt. Dann hätten Korrekturen/Änderungen gleich direkt eingegeben werden können und Du mußt nicht die hiesigen Kommentare einpflegen :wink:
Naja, viel an Text gibt es ja noch nicht, mir ging es erstmal darum dass jemand die Befehle testet. Und da ich mich mit dem Wiki noch nicht wirklich auseinander gesetzt habe, und auf Anhieb keine "Baustelle" für unfertige Artiekl gefunden habe bin ich halt hier gelandet.
framp schrieb:
Ausprobiert habe ich Deine Anleitung nicht, da ich kein 10.0 und 10.1 habe.

Und geht es dann auf deiner Suse?
framp schrieb:
Einen Kommentar habe ich: Die Methode Änderungen mit diff zu zeigen ist sicherlich Linux Kennern bekannt. Nur würde ich das explizit schreiben, was - wo durch was zu ersetzen ist. Das ist für Einsteiger leichter zu verstehen 8)

Ich habe am Schluss relativ versteckt gesagt dass ich die Dateien ins Netz gestellt habe, das sollte man wohl weiter oben nochmal schreiben.

Der diff ist wohl verwirrend, da sollte ich wohl noch etwas dazu schreiben.
 
OP
O

ojkastl

Hacker
Ich hab mal Version 0.0.2 erstellt, und versucht das mit den diffs zu erklären.

Wenn man zu jeder Datei ausführlich die Änderungen dokumentieren will, dann wird es relativ unübersichtlich, wobei der diff auch nicht der Hit ist.

Diffs weglassen?
 

framp

Moderator
Teammitglied
Die Anleitung bin ich mal in 2 Minuten durchgegangen auf 10.2. Folgende Kommentare:

1) Konsistent sshd durch sshd2 ersetzen - ojs ist nicht sehr sprechend ;-)
2) rcsshd ist der SuSE Standard um daemons zu starten. Also fehlt noch ein Symlink zu /etc/init.d/sshd2 für rcsshd2
3) Warum updates der Kommentare in den Scripts? Sind meiner Meinung nicht notwendig (siehe 4 - da leicht automatisierbar)
4) Die Duplizierung und Anpassung der Dateien ist ein kleines Skript mit ein paar cp, ln und sed Befehlen. Wäre ein nettes goodie :wink:
 
Oben