[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