[linux-l] Webspace und SFTP - Die Herausforderung

Ralph Angenendt ralph at strg-alt-entf.org
Do Sep 27 15:40:45 CEST 2007


Thorsten Stöcker wrote:
> Hallo,
> 
> also erst mal hää?

Okay, antworte ich doch noch mal länger ...

> > 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.
> 
> So? Und was wäre daran so schlimm? Ich nehme an, Deine Freunde brauchen einen 
> Login, die Daten des Logins, sprich den User-Namen, ob über htaccess oder 
> Datenbank, kannst Du ja übergeben. 
> 
> Leg eine Gruppe an, die die über keinerlei Rechte im System verfügt, und 
> dieser Gruppe ordnest Du Deine User zu. Die melden sich dann über eine 
> Web-Seite an (PHP-Script) und damit hast Du alles was Du brauchst.
> 
> Am Ende steht dann einfach nur ein chown username:group und ein chmod 0744.

Und wer macht den chown? Das PHP-Script welches nicht als root läuft?
Viel Spaß dabei. 

>> 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.
> >
> 
> vsFTP

Was hat das mit scponly zu tun?

>> 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.
> 
> ??? Nein, ganz sicher nicht.

Ganz sicher was nicht?

>> Es gibt auch keinen vernünftigen SFTP-Server, der einfach nach Angabe
>> des Wunsch-Rootverzeichnisses funktioniert.
>>
> 
> vsFTP

Wie schon mal gesagt: vsftpd ist ein FTP-Server und beherrscht kein
SFTP.

>> 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
>>
> 
> Das Verzeichnis heißt public-html und befindet sich 
> unter /home/username/public-html. Zu setzen über <UserDir> in der Conf des 
> Vhosts, bzw. httpd.conf

Nein, das Verzeichnis heißt public_html (oder wie immer du es nennen
willst). Das hilft aber bloß gar überhaupt nichts, weil damit nur URLs
der Art <http://example.com/~username/> möglich sind.

>> 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?
> 
> Also, ich weiß nicht wo Dein Problem mit ssh liegt, aber das ist auch erst ein 
> Mal unwichtig. 

Dass er es im Normalfall nicht nutzen kann, weil ssh nicht einfach mal
so chroot-fähig ist. Wobei ich bei passender Rechtevergabe nicht
verstehe, wo genau da das Problem liegt.

> Die Lösung Deiner Probleme liegt in der Konfiguration von vhost, sofern Du 
> mehrere Web-Seiten hosten willst.  Und zwar UserDir, Documentroot des vhost 
> und Scriptalias. Unterverzeichnis vhosts.d enthält ein kommentiertes Template 
> dafür. Du mußt nur darauf achten, das root ausgesperrt wird = UserDir 
> disabled root.

UserDir geht aus obengenannten Gründen nicht (außer man fängt an mit
modrewrite oder modredirect zu arbeiten. Und das möchte man auch nicht
immer.

> Die andere Möglichkeit besteht darin, Apache mehrfach zu starten (was eine 
> ziemlich Auslastung erzeugt, bei wenigen Hits aber machbar ist) und für jeden 
> Benutzer eine eigene Konfig anzulegen.

Du kannst nicht mehrere Apachen auf einem Port lauschen lassen. Das geht
also schon mal nicht.

> Was in meinen Augen unverständlich ist, warum Benutzer per PHP-Script Dateien 
> erstellen sollen, FTP-Zugang (nimm lieber WebDAV) haben und ssh nutzen 
> sollen.

Weil FTP die Userdaten im Klartext über das Netz schiebt. Und weil
WebDav auch *immer* mit den Rechten des HTTP-Servers schreibt.

An den Fragesteller:

Nutze mod_vhost_alias:

<http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html>

Lege /var/www/vhosts/www.domain1.de bis /www.domain20.de an. 

Dein VirtualDocumentroot heißt dann

VirtualDocumentRoot /var/www/vhosts/%0

Gebe jedem Nutzer "sein" Domainverzeichnis als home (in der passwd).

chown nutzer1:httpd www.domain1.de
chown nutzer2:httpd www.domain2.de
chown nutzer3:httpd www.domain3.de

chmod 0750 www*

chmod g+s www*

Schon darf dein Apache in den Verzeichnissen lesen. Kein Nutzer darf in
den Verzeichnissen anderer Nutzer lesen und schreiben. Und durch das
chmod g+s werden neue Dateien unterhalb der www.domain*.de-Verzeichnisse
automagisch der Gruppe httpd gegeben.

Reicht dir das als "Sicherheit"? 

Dann geht das auch mit ssh.

Cheers,

Ralph
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : nicht verfügbar
Dateityp    : application/pgp-signature
Dateigröße  : 189 bytes
Beschreibung: nicht verfügbar
URL         : <https://mlists.in-berlin.de/pipermail/linux-l-mlists.in-berlin.de/attachments/20070927/81830463/attachment.sig>


Mehr Informationen über die Mailingliste linux-l