scponly chrooted

morpheus

Well-Known Member
Hallo,

ich hatte ursprünglich vor, auf unserem Webserver einen FTP-Server einzurichten, habe mich dann aber aus Sicherheitsgründen dagegen entschieden und möchte das Ganze nun mit openssh und scponly realisieren.

Openssh funktioniert, scponly ist auch mit Chroot-Option installiert und eingerichtet. Ich habe einen User mit cp /usr/local/share/examples/scponly/ %% /bin/sh setup_chroot.sh angelegt, und ssh-keygen einen Key erstellt. Ich kann mich auch über filezilla per sftp einloggen, allerdings wird mir dann das komplette home-Verzeichnis des Users einschließlich .ssh und der erstellten Verzeichnisse /bin /dev /etc /lib /libexec und /usr angezeigt. Läßt sich das irgendwie auf einen Unterordner, z.B. /home/username/sftp begrenzen, so dass der User keinen Zugriff auf die anderen Ordner hat? Er kann zwar sein Homeverzeichnis nicht verlassen, aber er sollte eigentlich auch keinen Zugriff auf den .ssh Ordner und die anderen Ordner haben, die für sftp nicht benötigt werden.
 
Ich habe auch noch scponly im Einsatz und dafür ein Verzeichnis incoming im eigentlichen home-Verzeichnis des Users, das das chroot-Gedöns enthält, ebenso das Verzeichnis .ssh. Wenn der User darin etwas löscht, schießt er sich selber in den Fuß. Er kommt aber nicht in das home-Verz.

Inzwischen nutze ich scponly bei Neusystemen nicht mehr, sondern die eingebaute chroot-Funktionalität des SSH-Servers, ist irgendwie einfacher.

c.
 
Zuletzt bearbeitet:
Hallo,

ich hatte ursprünglich vor, auf unserem Webserver einen FTP-Server einzurichten, habe mich dann aber aus Sicherheitsgründen dagegen entschieden und möchte das Ganze nun mit openssh und scponly realisieren.

Openssh funktioniert, scponly ist auch mit Chroot-Option installiert und eingerichtet. Ich habe einen User mit cp /usr/local/share/examples/scponly/ %% /bin/sh setup_chroot.sh angelegt, und ssh-keygen einen Key erstellt. Ich kann mich auch über filezilla per sftp einloggen, allerdings wird mir dann das komplette home-Verzeichnis des Users einschließlich .ssh und der erstellten Verzeichnisse /bin /dev /etc /lib /libexec und /usr angezeigt. Läßt sich das irgendwie auf einen Unterordner, z.B. /home/username/sftp begrenzen, so dass der User keinen Zugriff auf die anderen Ordner hat? Er kann zwar sein Homeverzeichnis nicht verlassen, aber er sollte eigentlich auch keinen Zugriff auf den .ssh Ordner und die anderen Ordner haben, die für sftp nicht benötigt werden.

Das funktioniert einwandfrei.
Das gleiche Problem hatte ich vor etwas längerer Zeit im Betrieb.
Es ging zwar um Solaris Kisten. Aber die Config sollte da nicht stark von abweichen. Einfach bei der Zuweisung der Gruppen aufpassen.
Code:
#Folgenden Eintrag mandatory vornehmen.

Match Group staff
# Falls andere Gruppe bitte staff loeschen und aendern!
ChrootDirectory %h
        ForceCommand internal-sftp
#Das ForceCommand kann auskommentiert werden.
#Sollten die User auch per SSH auf die Maschine
#connecten
        AllowTcpForwarding no


#Debugging:
#Fuer moegliche Schwierigkeiten Den Syslog Level aktivieren
#Dies erleichtert das Leben ungemein.


# Logging
# obsoletes QuietMode and FascistLogging
SyslogFacility AUTH
LogLevel DEBUG

Falls der Link zum kompletten Howto benötigt wird, oder etwas
unklar ist, bitte anklopfen. :)
 
Wie kann ich denn verhindern, dass der scp-User Zugriff auf seinen .ssh-Ordner hat?
Im konkreten Fall geht es darum, dass Lieferanten von uns Produktionsdaten per scp herunterladen sollen. Leider kann man sich da nicht immer so darauf verlassen, dass die wirklich nur das machen, was sie sollen. Von daher hätte ich es gerne Idiotensicher, so dass nur Zugriff auf die Produktionsdaten möglich ist und sich keiner versehentlich den .ssh weglöscht oder Ähnliches.
 
Das kannst Du nicht verhindern, würde ich meinen. Aber vielleicht kennt jemand doch noch einen Trick. Aber das Löschen des Ordners passiert pro Kunde nur genau einmal, garantiert! :rolleyes:
 
Wie kann ich denn verhindern, dass der scp-User Zugriff auf seinen .ssh-Ordner hat?
Im konkreten Fall geht es darum, dass Lieferanten von uns Produktionsdaten per scp herunterladen sollen. Leider kann man sich da nicht immer so darauf verlassen, dass die wirklich nur das machen, was sie sollen. Von daher hätte ich es gerne Idiotensicher, so dass nur Zugriff auf die Produktionsdaten möglich ist und sich keiner versehentlich den .ssh weglöscht oder Ähnliches.

In jedem Fall solltest Du das natuerlich erst mal testen.
Dazu kommt das das /home Directory des SFTP Users... wurzelsepp/root gehören muss. Darin legst Du ein Childhome an... das dann dem eigentlichen sftp User gehören soll. Vielleicht wird es hier klarer.

So hab ich das jedenfalls gelöst.
 
Du hast aber schon mitbekommen, dass der TE die Sicherheitsgründe auf einen FTP-Server bezog?

c.

Ja schon. Bestimmter FTP-Server? Oder gibt es da globale Probleme mit dem FTP-Protokoll? Oder meint ihr einfach, dass ihr eine unverschlüsselte FTP-Variante (also ohne SSL/TLS) unsicher haltet? Wahrscheinlich das letztere, aber so sicher geht das aus den Postings nicht hervor.
 
Ich gehe bei FTP von unverschlüsseltem FTP aus, und das bereitet mir Bauchschmerzen. Auch ist SFTP/SCP Firewall-kompatibler als FTP. Der einzige Grund für FTP ist in meinen Augen, dass es in jedem Browser eingebaut ist und zumindest rudimentär sofort genutzt werden kann, während man für SFTP/SCP einen Client benötigt. Wir haben aus genau dem Grund auch für den Datenaustausch mit Kunden einen FTP-Server. :zitter:
 
Das Löschen des .ssh-Ordner und seines Inhaltes kannst Du folgendermaßen verhindern:

# chflags schg .ssh
# chflags -R schg .ssh

Ich hoffe, dass hilf weiter.
[KB]
 
Ich gehe bei FTP von unverschlüsseltem FTP aus, und das bereitet mir Bauchschmerzen. Auch ist SFTP/SCP Firewall-kompatibler als FTP. Der einzige Grund für FTP ist in meinen Augen, dass es in jedem Browser eingebaut ist und zumindest rudimentär sofort genutzt werden kann, während man für SFTP/SCP einen Client benötigt. Wir haben aus genau dem Grund auch für den Datenaustausch mit Kunden einen FTP-Server. :zitter:

Der andere Grund wieso FTP noch lebt ist das irgend welche Uralt Gammel Applikationen das immer noch als Standardprotokoll nutzen, die einfach nicht tot zu kriegen sind.

Besonders im gewerblichen Bereich, gibt es Leichen/Geschäftsanwendungen die immer noch produktiv sind und sich keiner da ran wagt, das Zeug abzuschalten, oder zu migrieren, weil die Angst vor den Schmerzen noch viel größer sind als, die Angst vor den FTP Sicherheitslücken. ;'(

Sonst hätte man das schon längts weg gehauen. Oftmals, zumindest hab ich den Eindruck, sind die Kunde auch mit sowas überfordert, allein schon WinSCP zu benutzen, stellt für viele eine Herausforderung dar. Klingt blöd, ist aber so.
 
Der andere Grund wieso FTP noch lebt ist das irgend welche Uralt Gammel Applikationen das immer noch als Standardprotokoll nutzen, die einfach nicht tot zu kriegen sind.
Leider war.

Oftmals, zumindest hab ich den Eindruck, sind die Kunde auch mit sowas überfordert, allein schon WinSCP zu benutzen, stellt für viele eine Herausforderung dar. Klingt blöd, ist aber so.
Solche Kunden haben wir auch. :rolleyes: Und deshalb unser FTP-Server.

c.
 
Danke!

Hat super funktioniert mit der Beschreibung. Was mich allerdings immer noch irritiert: Ich habe einen Testuser angelegt mit dem Home-Verzeichnis /home/testuser. Dieses Verzeichnis gehört root, zusätzlich ist noch die Gruppe sftp hinterlegt. In diesem Verzeichnis existiert ein weiteres Verzeichnis /home/testuser/sftp. Dieses Verzeichnis gehört dem Testuser und er hat Vollzugriff darauf.

In der sshd_conf habe ich ChrootDirectory %h eingetragen, die Anmeldung funktioniert, aber ich lande dann im Verzeichnis /home/testuser. Dort kann ich zwar nicht schreiben, was ja auch richtig ist, aber ich muss erst noch manuell ins Unterverzeichnis sftp wechseln.

Gibt es eine Möglichkeit, das so einzustellen, dass man direkt im Verzeichnis /home/testuser/sftp landet? Ich habe das bereits ausporbiert mit ChrootDirectory %h/sftp, aber das funktioniert nicht.
 
Danke!

Hat super funktioniert mit der Beschreibung. Was mich allerdings immer noch irritiert: Ich habe einen Testuser angelegt mit dem Home-Verzeichnis /home/testuser. Dieses Verzeichnis gehört root, zusätzlich ist noch die Gruppe sftp hinterlegt. In diesem Verzeichnis existiert ein weiteres Verzeichnis /home/testuser/sftp. Dieses Verzeichnis gehört dem Testuser und er hat Vollzugriff darauf.

In der sshd_conf habe ich ChrootDirectory %h eingetragen, die Anmeldung funktioniert, aber ich lande dann im Verzeichnis /home/testuser. Dort kann ich zwar nicht schreiben, was ja auch richtig ist, aber ich muss erst noch manuell ins Unterverzeichnis sftp wechseln.

Gibt es eine Möglichkeit, das so einzustellen, dass man direkt im Verzeichnis /home/testuser/sftp landet? Ich habe das bereits ausporbiert mit ChrootDirectory %h/sftp, aber das funktioniert nicht.

Hallo, das "Problem" haben ich aktuell auch noch, hab es aber aus Zeitmangel nicht weiter verfolgt. Der erste unausgereifte Gedankengang wär jetzt den Pfad in der /etc/passwd per usermod anzupassen. Aber das ist nur ne Überlegung ohne Test. :)
 
ChrootDirectory %h/sftp, aber das funktioniert nicht

'Match Group' ist das Problem ;)
Nimm nur
Match User
{... siehe oben}

und schon landet der User ausschliesslich mittels sftp im Ordner %h/sftp (<-- owner=root)
Die 'Kunden' bekommen entweder alle einzelne User eingerichtet, oder landen alle als derselbe User im selben $Home/sftp .

Das funzt, zumindest auf FreeBSD

hth
 
Zuletzt bearbeitet:
'Match Group' ist das Problem ;)
Nimm nur
Match User
{... siehe oben}

und schon landet der User ausschliesslich mittels sftp im Ordner %h/sftp (<-- owner=root)
Die 'Kunden' bekommen entweder alle einzelne User eingerichtet, oder landen alle als derselbe User im selben $Home/sftp .

Das funzt, zumindest auf FreeBSD

hth

Dann sag ich dem Herrn Metro einfach mal danke fürs mit denken. :D
 
Zurück
Oben