Hallo zusammen,
ich beschäftige mich seit einiger Zeit mit chroot und habe ein paar Fragen.
Diese Anleitung z.B. beschreibt den Vorgang wie man User über SSH einloggen kann, die dann in einem Jail landen. Ich möchte aber SSHD als Dienst einsperren wie z.B. den Apachen in dieser Anleitung. Das sind 2 verschiedene Dinge. Sehe ich das richtig?
Macht es überhaupt Sinn alle Daemons einzusperren die so laufen. Geht das überhaupt? Mir ist dabei klar, dass man abwägen muss was man schützen will. Mir geht es eigentlich nur um den Lerneffekt.
Nächste Frage. Ist es möglich mehrere Apachen unter einer IP laufen zu lassen? Ich würde mir daraus erhoffen, dass ich z.B. einen Apache kompiliere, der nur statische Seiten anzeigen kann und somit sicherer ist als einer der PHP unterstützt. Man könnte die beiden in jeweils ein Jail sperren und somit passiert dem einen nix, falls in dem anderen mal ein Fehler auftaucht. Müsste man das dann mit Ports trennen? Also der ListenPort oder wie das Ding in der httpd.conf heißt? Wenn ja, gäbe es eine andere Möglichkeit, als eine HTML Weiterleitung? Z.B. in der Nameserverkonfiguration? Bringt's das überhaupt annähernd? Wieder vom objektiven Standpunkt aus - also davon dass man geheime Regierungsdaten verstecken will (die auf einem Webserver gelagert sind ;) ).
Sind Tools wie makejail sicher, bzw. vertrauenswürdig? Wäre es nicht besser jedes Gefängnis von Hand zu erstellen?
Und weiter:
Kann man folgendes Jail in einem Jail Szenario überhaupt realisieren?
Apache hängt z.B. in /var/chroot/www und hat Zugriff auf alles unter diesem Verzeichnis. User1 hat sein chrooted Home Directory in /var/chroot/www/user1. Geht das? Angenommen er muss Daten von MySQL holen (der Apache). MySQL liegt aber in /var/chroot/mysql. Wie soll Apache da zugreifen? Wo ichs schreib kommt mir die Idee gerade... das läuft ja nicht intern ab sondern über den Mysql Port :idea:.
Und PHP sichert man dann über z.B. suPHP weiter ab...
Ich habe den 2.6.7er Kernel mit grsecurity abgesichert... Gibt es da Erfahrungswerte? Ich habe teils gelesen, dass trotz grsec noch Ausbrüche möglich sind?
Danke für's lesen :)
chroot / allgemeine Fragen zur Sicherheit
Re: chroot / allgemeine Fragen zur Sicherheit
Du kannst mehrere Apache-Instanzen an eine IP binden, Du musst dann halt verschiedene Ports verwenden. Oder Du verwendest verschiedene IPs (z.B. den Apachen für PHP an 127.0.0.1 binden, und dann per mod_proxy drauf zugreifen). Hierfür verwendest Du einfach die Listen-Direktive in der jeweiligen httpd.conf (siehe Apache-Doku).kevin_poulsen wrote: Ist es möglich mehrere Apachen unter einer IP laufen zu lassen? Ich würde mir daraus erhoffen, dass ich z.B. einen Apache kompiliere, der nur statische Seiten anzeigen kann und somit sicherer ist als einer der PHP unterstützt. Man könnte die beiden in jeweils ein Jail sperren und somit passiert dem einen nix, falls in dem anderen mal ein Fehler auftaucht. Müsste man das dann mit Ports trennen? Also der ListenPort oder wie das Ding in der httpd.conf heißt? Wenn ja, gäbe es eine andere Möglichkeit, als eine HTML Weiterleitung? Z.B. in der Nameserverkonfiguration? Bringt's das überhaupt annähernd? Wieder vom objektiven Standpunkt aus - also davon dass man geheime Regierungsdaten verstecken will (die auf einem Webserver gelagert sind ;) ).
Grüße
Andreas
Re: chroot / allgemeine Fragen zur Sicherheit
Nein und Nein.Macht es überhaupt Sinn alle Daemons einzusperren die so laufen. Geht das überhaupt?
Ein SSHD muss mit sehr großen Rechten, meist Root laufen, damit er beim Login auf die UID des jeweiligen Users wechseln kann. Außerdem muss er dann ja auch Zugriff auf sämtliche $HOMEs der User haben. Mit so weiten Rechten macht es IMHO auch nicht mehr viel Sinn, da noch ein Jail zu fahren. Ich selbst halte jails außerhalb von Hochsicherheitsumgebungen und z.B. auf gewöhnlichen Rootservern für überflüssig.
-
- Posts: 43
- Joined: 2003-09-24 14:53
Re: chroot / allgemeine Fragen zur Sicherheit
Danke für Eure Antworten. Um einen Systembenutzer anzulegen, der sich per SHH einloggen darf und eingesperrt wird habe ich hier noch etwas gefunden:
http://linux.robert-scheck.de/software/ ... inhalt.php
http://linux.robert-scheck.de/software/ ... inhalt.php
-
- Userprojekt
- Posts: 7066
- Joined: 2002-10-09 14:30
- Location: Dorsten
- Contact:
Re: chroot / allgemeine Fragen zur Sicherheit
Ich für meinen Teil finde pam_chroot erheblich eleganter. Ein kleines Howto gibt's unter http://www.chains.ch/chroot.php (ist zwar für Debian, mit ein ganz klein wenig Grips ist das aber problemlos auch auf andere Distris übertragbar).
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
-
- Posts: 43
- Joined: 2003-09-24 14:53
Re: chroot / allgemeine Fragen zur Sicherheit
klingt auch interessant. erscheint mir komfortabler...
hier eine anleitung, wie man sshd in einem jail laufe lassen kann... dort wird auch auf dodolins kommentar bzgl. des besitzers von sshd eingegangen.
http://www.gelato.unsw.edu.au/IA64wiki/DeibanSSHChroot
hier eine anleitung, wie man sshd in einem jail laufe lassen kann... dort wird auch auf dodolins kommentar bzgl. des besitzers von sshd eingegangen.
http://www.gelato.unsw.edu.au/IA64wiki/DeibanSSHChroot
-
- Posts: 43
- Joined: 2003-09-24 14:53
Re: chroot / allgemeine Fragen zur Sicherheit
ich frag nochmal nach. der tip mit mod_proxy hat mich nicht richtig weitergebracht.
gehen wir von dieser struktur aus
/chroot/apache1
/chroot/apache2
ich moechte jeweils unterschiedliche webserver laufen lassen. leider habe ich nur die moeglichkeit, eine ip auf den ganzen server zeigen zu lassen. also binde ich den apachen z.b. an port 8081 und 8082. nun stehe ich aber glaube ich vor dem problem, dass kein mensch mehr http://www.domain.de findet, weil er ja eigentlich http://www.domain.de:8081 bzw 82 eingeben muesste.
:oops:
und nun? ist mod_proxy wirklich die lösung? ich blicke noch nicht wirklich durch. sorry, dass ich mich so anstelle.
gehen wir von dieser struktur aus
/chroot/apache1
/chroot/apache2
ich moechte jeweils unterschiedliche webserver laufen lassen. leider habe ich nur die moeglichkeit, eine ip auf den ganzen server zeigen zu lassen. also binde ich den apachen z.b. an port 8081 und 8082. nun stehe ich aber glaube ich vor dem problem, dass kein mensch mehr http://www.domain.de findet, weil er ja eigentlich http://www.domain.de:8081 bzw 82 eingeben muesste.
:oops:
und nun? ist mod_proxy wirklich die lösung? ich blicke noch nicht wirklich durch. sorry, dass ich mich so anstelle.
Re: chroot / allgemeine Fragen zur Sicherheit
Ich verstehe den Sinn nicht wirklich. Apache chrooten ist wirklich aufwändig und blöd zu pflegen. Ich weiß jetzt nicht genau was Du da vorhast, aber wenn jemand in den Apachen mit PHP eingedrungen ist, was bringt es dann noch dass wenigstens Bilder etc. ordentlich ausgeliefert werden? Oder verwendest Du noch andere Seiten nur mit statischem HTML?
Jedenfalls muss ein Apache unter Port 80 erreichbar sein. Und dann musst Du überlegen, was Du willst. Du könntest dann z.B. alle statischen Inhalte mit absoluten URLs (mit Port 8080) referenzieren. So dass der Client sich diese vom anderen Apachen holt.
Wenn Du mod_proxy oder squid verwendest, kann das ganze transparent als reverse-proxy passieren. Das heißt, Du hast einen Apachen mit mod_proxy, oder einen Squid an Port 80, der beantwortet dann alle Anragen an statische Inhalte selber (bzw. aus dem cache, im Fall von Squid), und leitet nur Anfragen an *.php an einen 2. Apachen weiter. Diese 2. Instanz ist dann z.B. an localhost:8080 gebunden, das heißt von außen nicht erreichbar. Der 1. Webserver, mit mod_proxy verwendet eben mod_proxy und mod_rewrite, um entsprechende Requests an *.php zu erkennen, und fungiert in diesem Fall als reverse-proxy, indem er den Request an localhost:8080 weiterleitet. Die Apache-Instanz unter localhost:8080 verfügt dann über mod_php, und schickt seine Antwort dann über den Reverse-proxy zurück zum Client, der von der ganzen Geschichte gar nichts mitbekommt.
Jedenfalls muss ein Apache unter Port 80 erreichbar sein. Und dann musst Du überlegen, was Du willst. Du könntest dann z.B. alle statischen Inhalte mit absoluten URLs (mit Port 8080) referenzieren. So dass der Client sich diese vom anderen Apachen holt.
Wenn Du mod_proxy oder squid verwendest, kann das ganze transparent als reverse-proxy passieren. Das heißt, Du hast einen Apachen mit mod_proxy, oder einen Squid an Port 80, der beantwortet dann alle Anragen an statische Inhalte selber (bzw. aus dem cache, im Fall von Squid), und leitet nur Anfragen an *.php an einen 2. Apachen weiter. Diese 2. Instanz ist dann z.B. an localhost:8080 gebunden, das heißt von außen nicht erreichbar. Der 1. Webserver, mit mod_proxy verwendet eben mod_proxy und mod_rewrite, um entsprechende Requests an *.php zu erkennen, und fungiert in diesem Fall als reverse-proxy, indem er den Request an localhost:8080 weiterleitet. Die Apache-Instanz unter localhost:8080 verfügt dann über mod_php, und schickt seine Antwort dann über den Reverse-proxy zurück zum Client, der von der ganzen Geschichte gar nichts mitbekommt.