[gelöst] Dateitransfer mit RSSH (bzw scponly)

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Ingo Maurer
Beiträge: 27
Registriert: 30.12.2005 03:16:14

[gelöst] Dateitransfer mit RSSH (bzw scponly)

Beitrag von Ingo Maurer » 11.02.2007 02:07:18

Hallo :D

um Benutzern einen sicherne Zugriff auf Dateien in ihrem Home-Verzeichnis zu geben habe ich rssh auf meinem sarge system installiert. Die Datei /etc/rssh.conf sieht so aus:

Code: Alles auswählen

logfacility = LOG_USER

allowscp
allowsftp

umask = 022

#chrootpath = /home/pac
Wenn ich nun dem Benutzer pac diese Shell gebe

Code: Alles auswählen

pac:x:1012:33::/home/pac:/usr/bin/rssh
dann kann ich auch prima mit zB FileZilla remote Dateien übertragen. So weit so sicher.

Nun entferne ich das Kommentarezeichen von der chroot Zeile:

Code: Alles auswählen

chrootpath = /home/pac
Das bedeutet doch,daß ich die Chroot-Fähigkeiten von Rssh aktiviere...Nun geht's aber nicht mehr. Die Log-Ausgabven im FileZilla sehen so aus;

Code: Alles auswählen

Status:	Verbinden mit server3:22...
Antwort:	fzSftp started
Befehl:	open pac@server3 22
Befehl:	Pass: ******
Status:	Connected to server3
Fehler:	Fatal: unable to initialise SFTP on server: could not connect
Fehler:	Verbindung mit Server fehlgeschlagen
Ich hatte rssh mit SUID root = Yes installiert

Es läuft also nur ohne Chroot. Wie kann ich jetzt weiter vorgehen bzw was muß ich noch beachten oder was mach ich falsch? Kann ich irgendwo logfiles von rssh finden? Ich möchte das mit dem Chroot schon gerne haben.

Dank für eure Hilfe
Ingo
Zuletzt geändert von Ingo Maurer am 13.02.2007 18:41:05, insgesamt 1-mal geändert.

Benutzeravatar
Teddybear
Beiträge: 3163
Registriert: 07.05.2005 13:52:55
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Altomünster
Kontaktdaten:

Beitrag von Teddybear » 11.02.2007 03:19:50

Schau mal soooo geht das mit chroot und rssh:+
Kai Ravens HowTo's hat geschrieben:----------- Schnipp ----------
User einrichten

Bei der Einrichtung der SSH User sollte man sich überlegen, dass für jeden User eine extra Chroot Umgebung und ein eigener Syslog Prozess eingerichtet werden muss.
Will man die Anzahl der Chroot Umgebungen und Syslog Prozesse begrenzen, kann man z. B. von dem Modell ausgehen, dass eine begrenzte Anzahl von SSH Usern stellvertretend für Gruppen steht, denen man verschiedene "Vertrauensstufen" und Möglichkeiten zubilligt. Die realen User werden dann über den Eintrag ihrer Public Keys in den authorized_keys Dateien der jeweiligen Chrootumgebungen diesen Gruppen "zugeordnet".
Man richtet z. B. 3 SSH User/Gruppen ein sshuser1, sshuser2, sshuser3 - sshuser1 wird über die rssh SCP und SFTP erlaubt und erhält Zugriff auf mehr Dateien, sshuser2 wird ebenfalls SCP und SFTP erlaubt, hat aber nur auf eine beschränkte Anzahl von Dateien Zugriff und/oder kann nur Downloads ausführen, sshuser3 hat nur SCP Zugriff und kann nur Uploads ausführen.

1. $ groupadd sshusers
$ useradd sshuserN -m -p Passwort -d /opt/chroot/home/sshuserN -G sshusers -s /pfad/zu/rssh
2. $ rm -fr /opt/chroot/home/sshuserN/*

Damit wird zuerst 1x die Gruppe sshusers angelegt. Danach wird der User sshuserN, mit Gruppenzugehörigkeit zu sshuserN und sshusers (-G), angelegt, sein Heimatverzeichnis (-d) wird erzeugt (-m), ein Passwort vergeben (-p) und ihm wird die rssh als Shell zugeordnet.
Anschließend werden die automatisch angelegten Unterverzeichnisse und Dateien aus dem Heimatverzeichnis des Users gelöscht.
Chroot Umgebung erstellen

Dazu werden die Verzeichnisse, Bibliotheken, Programme und Konfigurationsdateien in die User Heimatverzeichnisse abgebildet, d. h. liegt z. B. sftp-server in /usr/local/libexec/sftp-server, wird von dort sftp-server in das Verzeichnis /opt/chroot/home/sshuserN/usr/local/libexec/sftp-server kopiert. Das betrifft auch alle Bibliotheken, von denen das Programm abhängt. Um das festzustellen, gibt man "ldd Programm" ein und erhält die Bibliotheken mit Verzeichnissen, die das Programm benötigt. Das betrifft scp, sftp-server, rssh und rssh_chroot_helper. Die ausgegebenen Informationen werden dann verwendet, um die Verzeichnis- und Dateistruktur abzubilden.
Verzeichnisstruktur

/opt/chroot/ - root:sshusers rwx-r-x---
/opt/chroot/dev/ - root:root rwx------
/opt/chroot/home/ - root:sshusers rwxr-x---
/opt/chroot/home/sshuserN/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/.ssh - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/.ssh/authorized_keys - root:sshuserN rw-r-----
/opt/chroot/home/sshuserN/dev/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/etc/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/etc/passwd - root:sshuserN rw-r-----
/opt/chroot/home/sshuserN/lib/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/lib/libnss*_files*.so - root:sshuserN rwxr-x---*
/opt/chroot/home/sshuserN/lib/tls/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/userarea/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/userarea/upload/ - root:sshuserN rwxrwx---
/opt/chroot/home/sshuserN/userarea/download/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/usr/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/usr/kerberos/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/usr/kerberos/lib/ - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/usr/local/bin/rssh - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/usr/local/bin/scp - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/usr/local/libexec/rssh_chroot_helper - root:sshuserN rwxr-x---
/opt/chroot/home/sshuserN/usr/local/libexec/sftp-server - root:sshuserN rwxr-x---

* Die Bibliotheken sind notwendig, damit der User SCP verwenden kann.

Aus der /etc/passwd wird die entsprechende Zeile mit den Angaben zu sshuserN in die Datei /opt/chroot/home/sshuserN/etc/passwd kopiert.

In /etc/sysconfig/syslog werden für syslogd und für jeden SSH User in der Chrootumgebung zusätzliche Sockets angegeben (maximal 19):
SYSLOGD_OPTIONS="-m 0 -a /opt/chroot/dev/log -a /opt/chroot/home/sshuserN/dev/log"
Danach den syslogd neu starten:
$ service syslog restart
Einstellungen der rssh Konfigurationsdatei rssh.conf

logfacility = LOG_name # name = Syslogkategorie, z. B. AUTH

# allowrsync # rsync erlauben
# allowrdist # rdist erlauben
# allowcvs # cvs erlauben
allowsftp # SFTP erlauben
allowscp # SCP erlauben

umask = 022 # Standard umask

chrootpath="/opt/chroot" # Standard chroot Verzeichnis

# User konfigurieren:
user="sshuserN:umask:nnnnn:/opt/chroot/home/sshuserN"
# n = 0|1 = Bits zur Deaktivierung|Freischaltung von rsync, rdist, cvs, SFTP und SCP (in der Reihenfolge)
z. B. 00011 = User kann nur SFTP und SCP nutzen.
-------------- Schnipp --------------
Versuchungen sollte man nachgeben. Wer weiß, ob sie wiederkommen!
Oscar Wilde

Mod-Voice / My Voice

Ingo Maurer
Beiträge: 27
Registriert: 30.12.2005 03:16:14

Eventuell doch mit scponly?

Beitrag von Ingo Maurer » 11.02.2007 12:52:49

Teddybear hat geschrieben:Schau mal soooo geht das mit chroot und rssh: ...
Danke Teddybear, das bringt jetzt schon mal sehr viel Licht da für mich rein.

Mein eigentliches Ziel ist es sicheres FTP für Web-User zur Verfügung zu stellen. Die sollen halt wie sie es vom Massenhoster mit FTP kennen lediglilch ihre Dateien (html, php, Grafiken) mit SFTP oder SCP hoch und runterladen. Mehr ist nicht nötig.

Ich hatte vorher mit dem scponly Paket experimentiert. Das war schon mal sehr gut, denn dort wurde dieses ganze erstellen der Chroot-Umgebung automatisiert.

Was mich aber dann da abgeschreckt hatte, war der Umstand, daß es getrennte Verzeichnisse für Lesen und Schreiben gab (ein getrenntes "incoming" Verzeichnis). Aber die sollen ja in den gleichen Verzeichnissen lesen und schreiben. Außerdem weiß ich nicht, ob ich da getrennte Datei-Umgebungen für mehrere Benutzer anlegen kann (es soll ja gerade Web-User-1 nicht die Dateien von Web-User-2 sehen.

Nachdem ich jetzt ein wenig mehr Verständnis für das alles habe, würde ich also eventuell auch den Weg von scponly (mit der scponlyc Variante, also chrooted) gehen, wenn ich damit ans Ziel komme.

Wenn nicht, mache ich das so wie bei Kai Raven beschrieben mit rssh. Wobei ich mir dann nicht sicher bin, ob ich die Web-Verzeichnisse dann komplett in das Home des jeweiligen SSH-Users verschiebe, oder ob ich sie über Symlinks dorthin abbilde. (Allerdings steht da in dem Tutorial von Kai Raven wieder was verdächtiges von /opt/chroot/home/sshuserN/userarea/upload und ...download - soll aber in meinem Fall alles les- und schreibbar sein.)

Ist mir außerdem noch nicht ganz klar, und das gilt für beide Varianten, wie das mit den Benutzerrechten läuft, denn nach meiner bisherigen Gewohnheit sind die Verzeichnisse und Dateien dann in der Gruppe www-data und gehören dem entsprechenden Nicht-SSH-User.

Bisherige Struktur:

Code: Alles auswählen

/home/pac/website1.com/html  - gehört pac.www-data
/home/puc/website2.com/html  - gehört puc.www-data
Jetzt kommt dazu:

Code: Alles auswählen

/opt/chroot/home/pacssh/website1.com/html  - gehört pacssh.pacssh
/opt/chroot/home/pucssh/website2.com/html  - gehört pucssh.pucssh
[edit]
Bzw. die Web-Verzeichnisse als Symlinks zu denen da oben...oder muss man die verschieben?
[/edit]

Oder wie sehe ich das? *hirndampf*


Danke
Ingo

Ingo Maurer
Beiträge: 27
Registriert: 30.12.2005 03:16:14

Mit scponly geloest

Beitrag von Ingo Maurer » 13.02.2007 18:39:03

So, jetzt hab ich das scponly nochmal ausprobiert und denke daß das die Lösung für mich ist.

Für die Nachwelt:

Code: Alles auswählen

aptitude install scponly
(chrooted? -> YES)
cd /usr/share/doc/scponly/setup_chroot
gunzip setup_chroot.sh.gz
bash setup_chroot.sh
Das script fragt nach Benutzernamen und Passwort für einen chrooted scp Benutzer sowie nach einem Namen eines schreibbaren Verzeichnisses.

Mit dem freien Windows Client "FileZilla" konnte ich dann sofort als dieser Benutzer verbinden und Dateien in dem schreibbaren Verzeichnis hoch- und runterladen. Und das tolle daran, es ist eben nicht der Rest des Dateisystems zugreifbar, sondern nur das Home-Verzeichnis dieses Benutzers. Chrooted eben. :-)

Gruß
Ingo

Antworten