PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Chroot Gefängis in /var/www ?



xPhase
07.07.12, 14:06
Hallo liebe Community,

auf Grund von Umstellungen Windows --> Linux ( Webserver ) arbeite ich mich seit nun mehr als 2 Monaten in Linux ein.
Ich muss sagen, dass es zu Anfang ein Riesiger Wald mit unbekannten Bäumen war aber inzwischen echt ne Menge Spaß macht :) Dieser Hinweis nur da ich noch relativ neu auf dem Gebiet bin.

Nun ersteinmal mein Problemszenario und Situationsbeschreibung:

Debian Squeeze 6.5
Apache2 + PHP5 + diverse Extensions

Minimale Installation inkl. Grub und Webmin ( ich weiß....Port ist geändert und ich starte den Dienst expliziert nur wenn ich die Weboberfläche benötige )

Aufsetzen möchte ich einen Webserver welcher an eine DB angebunden ist, die DB liegt allerdings auf einem anderen Server im Lan und der Webserver ist das einzige was eine Portweiterleitung vom Router bekommt.
Quasi die einzige Eingangstür. Und ich hoffe ich liege hier mit einem Debian richtig was die Sicherheit betrifft.

Erste Frage: Legt man die Vhosts regulär ins /var/www (habe eine eigene Partition hierfür erstellt) oder in /srv (so hab ich es teilweise gelesen)

Nun mein eigentliches Problem:

Der physikalische Server ( mit Debian drauf ) steht entfernt, ich greife per SSH zu.
Den Root Zugang habe ich per SSH dicht gemacht.
Einen User habe ich angelegt für Zugriff auf die Shell.

Bis hierher alles super.

Nun habe ich einen User angelegt welcher einzig und allein für den Upload neuer Daten ins Documentroot eines Vhosts zuständig sein soll.
Eventuell kommen weitere Vhosts dazu und dementsprechend muss ich weitere User anlegen und ihnen Ihre Gefängnisse bauen.

Ein Gefängnis im Home Bereich des Users funktioniert auch wunderbar.
Wenn ich aber ein Gefängis im /var/www bauen möchte funktioniert der Verbindungsaufbau des SFTP Clients nicht mehr und die Verbindung wird beim Aufbau vom Server beendet.

Bis hier schon ziemlich viel Text, aber was noch kommt ist eine kurze Beschreibung wie ich ein Gefängnis gebaut habe:

1.

groupadd sftponly
useradd webuser1
usermod -aG sftponly webuser1


2.

/etc/ssh/sshd_config:


[..]

Subsystem sftp internal-sftp
#Subsystem sftp /usr/lib64/misc/sftp-server

Match Group sftponly
ChrootDirectory /home/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no


3.

chown root:sftponly /home/webuser1
chmod 750 /home/webuser1
mkdir /home/webuser1/public_html
chown webuser1: /home/webuser1/public_html



Mit diesem 3 Punkte Plan klappt es wie gesagt im Homeverzeichnis.
Im /var/www hört es auf

Für Hilfe UND vor allem weiterhelfende Tipps bin ich sehr dankbar :)

Greetz

ps. Kleine Anmerkung noch, wenn ich nach diesem Plan ein Gefängnis im /srv baue klappt es ebenfalls

nopes
07.07.12, 19:09
Halli Hallo,

das was du so beschreibst, klingt für mich nicht nach den Titel, wie auch immer hier die Anleitung vom Hersteller deiner Distri: http://www.debian.org/doc/manuals/securing-debian-howto/ap-chroot-ssh-env.de.html. Für dein Ziel (nicht das ich dir ne eigene Root-Umgebung dafür ausreden will :)), würde ich als einfachste Lösung einen Symlink im Home des Users auf das entsprechende Verzeichnis empfehlen (ln -s quelle ziel), Bsp:
ln -s /srv/vhostxyz/upload /home/userxyz/upload An entsprechende Rechte denken (chmod) und gut ist.

Wo die Daten liegen ist ziemlich egal, allerdings schadet es nicht dies zu bendenken: http://de.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

xPhase
08.07.12, 13:44
Heyho :)

Das mit dem Symlink löst das Problem, super :)

Und Links mit Infos nehme ich auch immer gerne an.

Bleibt trotzdem zu letzt noch die Frage warum die Prozedur nicht im /var/www funktioniert hat. Jedoch nur aus Interesse.

Mit den Verlinkungen kann ich die User einkäfigen und gleichzeitig das eigentliche DocumentRoot im www Verzeichnis lassen.

Danköööö :-)

HirschHeisseIch
09.07.12, 02:43
Bleibt trotzdem zu letzt noch die Frage warum die Prozedur nicht im /var/www funktioniert hat. Jedoch nur aus Interesse.


Schuss ins blaue:
Nennen wir den User mal "ftpuploader". Als Home-Dir haben wir dann /var/www definiert.
Und nun steht in der sshd_config "ChrootDirectory /home/%u", was /home/ftpuploader entsprechen würde, welches wahrscheinlich nicht existiert.
Mit "ChrootDirectory %h" hätte es evtl. geklappt.

xPhase
11.07.12, 11:54
Hmmm irgendwie habe ich Schwierigkeiten mit den Rechten.

Habe nach obigem Schema das Gefängnis im /home/xxxx/public erstellt.
Dann habe im /var/www/xxx einen Ordner erstellt und einen Vhost daraus gemacht.

Dann habe ich ln -s /var/www/xxx /home/xxxx/public/xxx

Das funktioniert ebenfalls, eine datei die ich im /var/www erstelle erscheint auch im /home...

Wenn ich aber per sftp connecte mit dem user komme ich bis public, sehe auch den symlink aber kann dort nicht rein.

Habe mit chown xxxx: /var/www/xxx
und zusätzlich
chown xxxx: /home/xxxx/public/xxxx
gemacht aber er lässt mich nicht rein

Liegt das vielleicht daran dass das Chroot auf den Homebereich beschränkt ist und er mich auch durch einen Symlink nich raus lässt?
Sollte aber eigentlich nicht so sein oder?

marce
11.07.12, 12:01
Sollte aber eigentlich nicht so sein oder?
Doch.

*10Zeichen*

xPhase
11.07.12, 15:20
Besteht die Möglichkeit den Chrootbereich auf ein weiteres einzelnes Verzeichnis zu erweitern in der sshd_config?

xPhase
11.07.12, 17:05
O M G :D:D:D:D

wie einfach die Lösung doch sein kann....

ich hab den Symlink einfach andersrum gesetzt x-D

ln -s /home... /var/www

so komm ich in mein chroot gefängnis mit dem user, kann dinge nur dorthin hochladen und diese befinden sich dann auch im documentroot welchem im /www liegt :cool:


edit: alle Euphorie zu voreilig.....

wenn ich nun versuche eine php Seite auf zu rufen gibts nen 403 FORBIDDEN ( warscheinlich www-data rechte? )

damn und ich dachte das wärs gewesen

gibt es für ein Documentroot im var/www und extra Uploaduser mit chroot keine allgemein gute und Sichere Lösung?

marce
11.07.12, 18:47
Na, frech gesagt eigentlich genau die - Du musst sie nur sauber konfigurieren und es ist eigentlich völlig problemlos...

xPhase
12.07.12, 14:08
Ok gut,

habe jetzt mal etwas weiter gedacht.

/var und /home sind bei mir 2 verschiedene Partitionen.
Daraufhin habe ich recherchiert, dass Symlinks über verschiedene Partitionen Probleme verursachen können.

Nun habe ich das Documentroot in /var/www/xxx deklariert und dort einen Symlink zu /var/xxx und siehe da, es funktioniert.

Ein Hinweis in Richtung --> Symlinks in andere Partition.
Hast du einen Hinweis was noch zu beachten ist bei partitionsübergreifenden Symlinks?

Viele Grüße

xPhase
12.07.12, 15:24
Finally geschafft

....es lag am chmod 750...
dadurch hatten "0" alle anderen gar keine Rechte und somit durfte auch der Apache der die Website darstellt nicht lesen.

Nun hab ich 755, so dass andere auch ausführen und lesen aber nicht schreiben dürfen und es hat endlich funktioniert.

Der User loggt sich in sein Gefängnis ein, hat nen Ordner public in der er seine Sachen hochläd und dieser Public Ordner ist ein Symlink ins DocumentRoot des Apache eines Vhosts...damit sollte ich einen gewissen Grad an Sicherheit gewährleisten können.

:) Danke an all eure wertvollen Hinweise und viele Grüße

dony
21.07.12, 00:59
edit: alle Euphorie zu voreilig.....

wenn ich nun versuche eine php Seite auf zu rufen gibts nen 403 FORBIDDEN ( warscheinlich www-data rechte? )

damn und ich dachte das wärs gewesen

gibt es für ein Documentroot im var/www und extra Uploaduser mit chroot keine allgemein gute und Sichere Lösung?

Damit der Webserver auf eine Datei Zugreifen kann muss man chmod so einstellen, dass "Ausführen durch andere" möglich ist.
EDIT:
Lesen durch andere ist nicht notwenig!

Hab erst jetzt gesehen dass Du bereits drauf gekommen bist :)
/EDIT

Lg
Dony

marce
21.07.12, 14:02
@Dony: Quatsch.

Bei nicht-CGI-Dateien reichen Leserechte für den Webserver - Ausführungsrechte sind nicht notwendig (es reicht also, sollte der Besitzer der Datei der Webserver sein, ein 400).

In Verzeichnissen muss der Webserver lesen und wechseln können - solltest Du das meinen.