Seiten: [1]
|
|
|
|
Autor
|
Thema: [S]erver [S]eitige [H]ölle und Docker (Gelesen 2083 mal)
|
|
Chris
Full Member
Offline
Einträge: 164
Okay, wer hat meine Kekse gegessen?
|
|
[S]erver [S]eitige [H]ölle und Docker
« am: 16. Juli 2020, 21:12:32 »
|
|
Moin!
Vielleicht kann mir ja hier jemand helfen.
Aktueller Stand Ich möchte auf meinem Server eine Webseite hosten. Diese ist in mehrere Docker-Container unterteilt: - Container "db" für MariaDB
- Container "web" für PHP/HTML/CSS
Der Reverse-Proxy ist korrekt eingestellt und ich bekomme im Browser auch die das gewünschte Ergebnis. Bin ich per SSH auf meinem Server, kann ich mittels "docker exec" und "docker cp" Dateien erstellen und kopieren.
Was ich möchte Ich möchte einer dritten Person Zugriff auf die Webseite geben. Der Zugriff soll jedoch auf den "web"-Container beschränkt sein. Zugriff per CLI ist optional. Wichtiger ist die Möglichkeit, per SCP oder SFTP Dateien tauschen zu können. Ein Zugriff auf den Server direkt möchte ich aus Gründen der Sicherheit nicht.
Der Philosophie von Docker folgend, besitzt der "web"-Container keinen integrierten SSH-Server. Daher habe ich ein SSH-Image heruntergeladen ("ssh"). "ssh" hat Zugriff auf das Verzeichnis von "web". "ssh" hat einen hohen Port: 30022. Der Standard-SSH Server des Systems jedoch den Standard-Port 22.
Der Benutzer soll nun vie SSH bzw. SFTP/SCP auf "ssh" Zugreifen können. Im Internet liest man viel über "Tunneling" in diesem Zusammenhang.
Vor allem soll nur dieser eine Benutzer davon betroffen sein.
Das Problem ALLES! Okay, ernsthaft: Ich habe viele Ansätze ausprobiert. Fast alles funktioniert. Sofern ich direkt mit SSH-Arbeite. Gemeint ist sowas hier: Sobald ich jedoch versuche, mittels SCP oder SFTP (fish:// in Dolphin) darauf Zugreife, wird die Verbindung geschlossen. Ohne "wenn" und "aber".
Was ich bisher versucht habe #1 - ForceCommand Nr. 1 Mein erster Ansatz war es, den Benutzer mittels sshd_config direkt in den Docker-Container zu bewegen:
Match User foo: ForceCommand docker exec -it web bash
|
| Das funktioniert - wie gesagt - mit direktem SSH perfekt. Mit SCP/SFTP jedoch nicht. SCP bricht mit der Meldung "The input device is not a TTY" ab. Laut Recherche liegt das an der "-it" Option. Also habe ich diese entfernt. Und siehe da, keine Meldung mehr. Leider auch keine Verbindung.
#2 - ForceCommand Nr. 2 Mein zweiter Ansatz bestand darin, einen Tunnel aufzubauen. Die Idee dabei: Nutzer sieht: Nutzer --> Server Nutzer macht: Nutzer --> Server --> Container Das habe ich mit dieser sshd_config versucht:
Match User foo PermitEmptyPasswords yes ForceCommand ssh -t -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -p 20022 dusker@localhost "cd /var/www/html/ ; bash" |
| Das gepaart mit dem Entfernen des Passwortes für "foo" (das wird vom Ziel-Container ohnehin abgefragt) erreichte erneut das Ziel: CLI klappt! Aber auch hier SCP/SFTP nicht. Auch das Entfernen des "-t" Parameters hatte keine Auswirkungen auf das Ergebnis.
#3 - ForceCommand Nr. 3 Im Grunde wie der vorherige Versuch. Lediglich "ssh" durch "sftp" ersetzt. Ergebnis bleibt.
#4 - Tunnel-Konfiguration Dem Beispiel dieses Eintrages: https://www.ch.cam.ac.uk/computing/scp-over-ssh-tunnel folgend, habe ich eine solche Datei angelegt. Ebenfalls kein Ergebnis. Leider.
#5 - Jail Nach Stunden erfolgloser Suche und vielen Experimenten (auch wenn das oben nicht so wirkt!), dachte ich an ein SSH-Jail. Also eine Chroot-Umgebung, in dem der Benutzer eingesperrt wird. Die Lösung schien ziemlich einfach zu sein: Match User foo ChrootDirectory /home/foo/www ForceCommand internal-sftp |
| Ach wäre das schön, wenn das so funktioniert hätte.
#6 - Gitea Gitea ist ein git-Server den man selbst hosten kann. Es gibt Gitea auch als Docker-Image. In deren Dokumentation steht wie man den SSH-Server des Hosts nach Gitea leiten kann. https://docs.gitea.io/en-us/install-with-docker/#ssh-container-passthrough Tatsächlich hoste ich einen Gitea-Server, der sich das Zunutze macht. Bisher konnte ich das jedoch nicht für mein aktuelles Problem nutzen.
Danke! Wer es bis hier geschafft, alles zu lesen: Danke! Wenn euch etwas einfällt, was ich noch probieren kann oder ihr einen Fehler findet, gebt mir bitte Bescheid.
Schöne Grüße Chris
|
|
Gespeichert
|
Der einzig sichere Computer der Welt ist ausgestöpselt, in einem Tresor verstaut und auf dem Meeresboden. Und nur eine Person kennt die Kombination zum Tresor. Und diese ist tot. [Bruce Schneier]
|
|
|
Andreas
Administrator
Offline
Einträge: 1320
Linux von Innen
|
|
Re:[S]erver [S]eitige [H]ölle und Docker
« Antwort #1 am: 17. Juli 2020, 06:36:53 »
|
|
Hast Du diese Option in der sshd_config deines Dockers:Subsystem sftp /usr/lib/ssh/sftp-server
|
| ?? Ich nutze auf meinen Servern ausschließlich diese Variante und sie funktioniert bisher in allen möglichen und auch unmöglichen Lebenslagen (via autossh-Tunnel über nicht-priviligierte Ports etc.).
LG Andreas
|
« Letzte Änderung: 23. Juli 2020, 07:18:59 von Andreas » |
Gespeichert
|
Wissen ist das einzige Gut, das mehr wird, wenn man es teilt - wenn es Menschen gibt, die es teilen, und es Menschen gibt, die bereit sind, dieses Geschenk auch mit eigenem Einsatz anzunehmen.
Freiheit zu erkämpfen reicht nicht. Man muss sie auch verteidigen.
Ohne IT-Kompetenz ist man heutzutage ein willkommenes Opfer und Spielball anderer, egal, welches System oder Gerät man nutzt. Nur Wissen schützt vor Schaden!
|
|
|
Seiten: [1]
|
|
|
|
|
|
|