[linux-l] Webspace und SFTP - Die Herausforderung

Lutz Willek willek at gmx.de
Fr Sep 28 11:42:34 CEST 2007


Thomas Schmidt schrieb:
> Hallo Liste!
> 
> Es geht um einen Webserver, auf den auch Freunde mal Webseiten hochladen 
> können.

Das geht, aber Du musst einiges bedenken. Es reicht nicht das die User 
nur ihre eigenen Dateien sehen dürfen, auch die von ihnen eingebrachten 
skripte/php/whatever müssen die gleichen Beschränkungen haben. Das geht 
nicht, wenn Du den Webserver für jeden vhost unter den gleichen Benutzer 
laufen lässt. Du musst Dir also eine Lösung einfallen lassen, unter der 
jeder Benutzer seinen eigenen Apache hat... Denk drüber nach.

Standardlösung ist hier ein vserver, xen,chroot für jeden nutzer, was 
jedoch einen gewaltigen overhead bringt, der nicht immer tragbar ist. 
Vorteil ist hier sicherlich die totale Freiheit der Anwendungen.

Es geht aber auch kleiner, mit suexec und Konsorten, was aber auch 
Performance-- und Sicherheitsprobleme bringt, wie Du selbst sagst 
"beisst sich hier der Hund in den eigenen Schwanz". Die Administration 
solcher Boliden ist nicht unbedingt einfach.

Und es geht noch kleiner, und das ist genau das was Du suchst. Lass 
einfach direkt jeden Deiner Vhosts unter einen anderen Benutzer laufen, 
das entsprechende Modul für apache ist mpm-itk. Du solltest nur *vor* 
der Umstellung Deines Servers die Manpage *genau* und *vollständig* 
studieren, sonst hast Du eine große sicherheitslücke gebaut
(apache != www-data, apache = root, apache-vhost = user)

Zum vollkommen Glück fehlt jetzt eigentlich nur noch der sichere 
Transport der Daten auf den Server. Per FTP ist das kein Thema, Du gibst 
einfach jedem Nutzer sein eigenes Verzeichnis, was "zufällig" auch sein 
document_root ist- done.
Für sftp würde ich mir an Deiner Stelle die Kombination aus pam und rssh 
empfehlen, meist ist das schon mehr als ausreichend.
Für ein sicheres ssh kommst Du um ein chroot nicht herum. Entweder 
richtest Du ein seperates chroot für jeden Benutzer ein(schwer 
administrierbar, speicherplatz) oder Du richtest ein chroot ein, das für 
alle Benutzer gilt und gibst die Homeverzeichnisse mit den Rechten 770, 
root:<gid> vor(guter Weg, aber aufpassen bei Konfiguration und Anlegen 
der neuen Benutzer), oder Du importierst das chroot ro lokal per nfs, 
was der für mich beste Weg ist. Pass dabei nur auf, das Du nix nach 
aussen frei gibst ;-)
Dabei solltest Du aber _immer_ im Hinterkopf behalten das:
1. kein chroot/jail/whatever wirklich 100%ig sicher ist
2. ssh Zugang selten *wirklich* gebraucht wird und durch Alternativen 
ersetzbar ist, wenn es sich "nur" um ein hosting von Webseiten dreht.

Diese Lösung eignet sich gut für fast alle mittelgroßen Szenarien, wenn 
Du wirklich viele verschiedene Benutzer auf verschiedene Server 
unterbringen willst skaliert das Modell aber nicht sonderlich gut, der 
Administrationsaufwand steigt linear. Dann würde ich an Deiner Stelle 
zur Trennung zwischen storage, ssh und webserver raten und/oder eine 
Benutzerverwaltung über ldap/sql andenken. Das lohnt aber erst bei mehr 
als 50 verschiedenen Zugängen, darunter ist das besser per Hand machbar, 
wenn nicht noch andere Dienste in Abhängigkeit konfiguriert werden 
müssen (mail, ftp, foo, bar,...)


Wenn Du Hilfe bei der Konfiguration brauchst melde Dich per PM, wir 
verkaufen auch solche Lösungen.

LG Lutz

> 
> PHP-Scripte erstellen ihre Dateien immer mit dem Besitzer, unter dem der 
> PHP-Server gestartet wurde. Und solange nicht der Apache als Root läuft 
> und jeden PHP-Interpreter als externes Programm mit Userrechten aufruft, 
> ist dieser Besitzer immer www-data.
> 
> Ohne Klimmzüge mit PHP als CGI und Apache mit Suexec gehört also jede 
> von PHP erstellte Datei www-data.
> 
> Jetzt komme ich zum Anliegen. Einem FTP-Server würde ich sagen, dass 
> sich alle User als www-data mit ihrem Webspace als Rootverzeichnis 
> einloggen. Nur leider wurde ein analoges Programm für SFTP wohl noch 
> nicht erfunden. Scponly und rssh brauchen erstmal einen sinnlosen 
> Dateibaum im chroot-Verzeichnis. Den könnte scponly dynamisch anbieten, 
> aber das tut es nicht.
> 
> Zusammenfassung: Die Webseiten gehören alle dem selben Benutzer, weil 
> Apache üblicherweise so läuft, deshalb kann man den Webspacekunden nicht 
> einfach SSH-Logins geben.
> Es gibt auch keinen vernünftigen SFTP-Server, der einfach nach Angabe 
> des Wunsch-Rootverzeichnisses funktioniert.
> 
> Jetzt habe ich gerade noch eine Idee: Und zwar wird der Webspace jedes 
> Kunden in sein Home abgebildet, und zwar dort mit seinem persönlichen 
> User und seiner Gruppe. Der Kunde bekommt dann einen vollen SSH-Zugang 
> und kann den gesamten wahren Webspacebereich nicht betreten. Kann man so 
> etwas mit mount anstellen? Also mount /var/www/kunde1/ /home/kunde1/www/ 
> www-user:www-user->kunde1:kunden
> 
> Eigentlich müsste der Apache standardmäßig Scripte als der Benutzer 
> ausführen, denen das Script gehört, und openssh müsste chroot auf 
> Knopfdruck beherrschen. Da das aber nicht der Fall ist, was haltet ihr 
> von meiner Idee und wie kann man das am Geschicktesten umsetzen?
> 
> Viele Grüße von
> Thomas
> 
> _______________________________________________
> linux-l mailing list
> linux-l at mlists.in-berlin.de
> Die Mailingliste der BeLUG (Berliner Linux User Group)
> 
> Wenn du diese Mailingliste  abbestellen willst, gehe bitte auf
> https://mlists.in-berlin.de/mailman/listinfo/linux-l-mlists.in-berlin.de
> und trage dich dort bitte aus
> 




Mehr Informationen über die Mailingliste linux-l