staging.inyokaproject.org

Probleme mit Firejail

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

Wolfgang.Klein

Anmeldungsdatum:
25. Juni 2007

Beiträge: 676

Hallo!

Ich versuche nach dieser Anleitung nginx abzuschotten. Leider klappt es nicht so ganz.

Als Wirtssystem läuft Ubuntu 18.04 (bionic). Alles funktioniert wie beschrieben, bis zum "Betreten des Gefängnisses":

root@pc:/jail# firejail --chroot=/jail/www/ --name=www

Warning: default profile disabled by --chroot option
Parent pid 8923, child pid 8924
The new log directory is /proc/8924/root/var/log
Warning: failed to unmount /sys
Warning: whitelist feature is disabled in chroot
Child process initialized in 4.99 ms
root@pc:~# apt update
Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://archive.ubuntu.com/ubuntu bionic/main Translation-en [516 kB]
Fetched 516 kB in 1s (747 kB/s)
Reading package lists... Done
W: Problem unlinking the file /var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_bionic_InRelease - PrepareFiles (13: Permission denied)
W: Problem unlinking the file /var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_bionic_main_i18n_Translation-en.xz - PrepareFiles (13: Permission denied)
W: Problem unlinking the file /var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_bionic_main_i18n_Translation-en - PrepareFiles (13: Permission denied)
E: Failed to fetch store:/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_bionic_main_i18n_Translation-en.xz rename failed, Permission denied 
(/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_bionic_main_i18n_Translation-en -> /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_main_i18n_Translation-en).
E: Some index files failed to download. They have been ignored, or old ones used instead.

Dabei ist es völlig egal, welche Version des Gefängnis ich installieren lassen, also Debian oder ein Ubuntu. Derselbe Fehler wie oben tritt bei Sid als Gast also genau so auf. Es scheint also einen wahrscheinlich kleinen, aber trotzdem sehr wichtigen Unterschied zwischen Debian 7 und Ubuntu als Wirtssystem zu geben.

Im angegebenen Verzeichnis /proc/8924/root/var/log und darunter steht keine einzige Datei.

Leider kann ich den vorgesehenen Rechner nicht mal eben von Bionic auf Debian 7/8/9 umstellen, es muss also Bionic bleiben.

Hat jemand eine Idee?

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wolfgang.Klein schrieb:

Ich versuche nach dieser Anleitung nginx abzuschotten. Leider klappt es nicht so ganz.

Ich kenne Firejail nicht, aber aus dem, was ich so lese, schließe ich, dass es eher weniger für die Abschottung von Diensten als für die Abschottung von Anwendungen gedacht ist. In deinem Fall würde ich eher zu Docker raten.

Nichtsdestotrotz liegt dein Problem mit Firejail vermutlich am Default-Profil, welches dich AFAIK nicht unter /var schreiben lässt.

Wolfgang.Klein

(Themenstarter)

Anmeldungsdatum:
25. Juni 2007

Beiträge: 676

misterunknown schrieb:

Ich kenne Firejail nicht,

Ist eine Sandbox.

aber aus dem, was ich so lese, schließe ich, dass es eher weniger für die Abschottung von Diensten als für die Abschottung von Anwendungen gedacht ist.

Wo ist die Trennlinie zwischen Anwendung und Dienst? Und wozu gehört nginx dann?

Nichtsdestotrotz liegt dein Problem mit Firejail vermutlich am Default-Profil, welches dich AFAIK nicht unter /var schreiben lässt.

Du sagtest schon, dass du Firejail nicht kennst...

Das angemahnte Verzeichnis /var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_bionic_InRelease liegt innerhalb der Sandbox. Und Tante Ruth innerhalb des Sandkastens ist ebenfalls eine andere als außerhalb. Also sollte es kein Rechteproblem geben. Aber der Konjunktiv sei beachtet: es sollte keine Probleme geben.

Ich würde eher auf diese Meldung als Ursache tippen:

Warning: failed to unmount /sys

Unklar ist mir, ob es sich dabei bereits um /sys innerhalb der Sandbox handelt oder um /sys vom Wirtssystem. In beiden Fällen ergibt ein Aushängen dieses Verzeichnisses nicht wirklich Sinn, denn das Wirtssystem benötigt dieses VZ, das Gastsystem kann beim Starten noch nichts eingebunden haben.

Nebenbei: habe die Schritte der Anleitung auch auf meinem BananaPi unter Armbian ausprobiert, da gibt es diesen Fehler nicht.

In deinem Fall würde ich eher zu Docker raten.

Wenn ich damit folgendes Szenario erreichen kann, gerne:

Auf einem kleinen Büroserver soll Nextcloud für Termine und Kontakte laufen, und die Wolke soll auch vom Internet aus zu erreichen sein. Weiterleitung der Ports auf dem Router auf ein virtuelles Netzwerk (br0) ist kein Problem, aber nginx soll natürlich so abgesichert werden, dass im Falle eines Falles nicht der gesamte Server kompromittiert wird. Darum soll nginx in eine Sandbox gesperrt werden. Das wäre genau das Szenario, das auf der verwiesenen Seite vorgestellt wird, nur dass nginx dann nicht Wordpress, sondern Nextcloud ausliefert.

Kann Docker das?

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wolfgang.Klein schrieb:

Wo ist die Trennlinie zwischen Anwendung und Dienst? Und wozu gehört nginx dann?

Da gibt es meines Wissens keine allgemeingültige Definition, und es ist auch nicht so, dass die "Trennlinie" sauber zu ziehen ist. Aber um es am konkreten Beispiel zu machen: Firejail ist meines Erachtens am besten für Applikationen wie Firefox oder Thunderbird, Docker eher für Sachen wie nginx oder MySQL. Aber beide Methoden können eigentlich alles.

Das angemahnte Verzeichnis /var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_bionic_InRelease liegt innerhalb der Sandbox. Und Tante Ruth innerhalb des Sandkastens ist ebenfalls eine andere als außerhalb.

Soweit ich das gesehen habe wird in deiner Anleitung kein Firejail-Profil angelegt, daher gehe ich davon aus, dass daher ein sehr restriktives Default-Profil genutzt wird. Hier steht:

If firejail does not have a profile for a particular application,it uses its
restrictive system-wide default profile. This can result in the application
not functioning as desired, without first creating a custom, and less
restrictive profile.

Daher meine Vermutung.

In deinem Fall würde ich eher zu Docker raten.

Wenn ich damit folgendes Szenario erreichen kann, gerne:

Auf einem kleinen Büroserver soll Nextcloud für Termine und Kontakte laufen, und die Wolke soll auch vom Internet aus zu erreichen sein. Weiterleitung der Ports auf dem Router auf ein virtuelles Netzwerk (br0) ist kein Problem, aber nginx soll natürlich so abgesichert werden, dass im Falle eines Falles nicht der gesamte Server kompromittiert wird. Darum soll nginx in eine Sandbox gesperrt werden. Das wäre genau das Szenario, das auf der verwiesenen Seite vorgestellt wird, nur dass nginx dann nicht Wordpress, sondern Nextcloud ausliefert.

Kann Docker das?

Ja, es gibt ein offizielles Nextcloud-Docker-Image.

Noch ein Wort zur grundsätzlichen Technologie: Sowohl Firejail als auch Docker basieren auf denselben Technologien, nämlich chroot , cgroups und und Namespaces. Der Unterschied besteht einfach in der Toolchain, mit der bestimmte Sachen erreicht werden (abgesehen von bestimmten Umsetzungsdetails). Prinzipiell ist mit beiden Methoden alles zu erreichen; der Unterschied ist, wie einfach das geht. Ich will dich aber keinesfalls irgendwie von Docker überzeugen, nur weil ich mich mit Firejail nicht genau auskenne. Eventuell gibt es jemanden anders, oder du wendest dich mal an den Entwickler (Github-Issue).

Wolfgang.Klein

(Themenstarter)

Anmeldungsdatum:
25. Juni 2007

Beiträge: 676

Soweit ich das gesehen habe wird in deiner Anleitung kein Firejail-Profil angelegt, daher gehe ich davon aus, dass daher ein sehr restriktives Default-Profil genutzt wird. Hier steht:

Stimmt! Wenn ich "--noprofile" als Argument angebe, bekomme ich keine Fehlermeldung beim Betreten des Gefängnisses.

Aber bevor ich da weiter probiere:

Ja, es gibt ein offizielles Nextcloud-Docker-Image.

Danke für den Hinweis!

Ich habe bisher weder mit Firejail, noch mit Docker gearbeitet. Aber nach dem, was ich auf der von dir genannten Seite sehe, ist Docker wohl wirklich einfacher. Auch die Sache mit der Datensicherheit im Falle eines Versagens des Container.

Kleiner Wermutstropfen: um nginx mit ssl verwenden zu können, muss ich mehrere Container laufen lassen. Da der angestrebte Rechner nur einen Zweikern-Prozessor mit 2 GB RAM beinhaltet, und außerdem noch als SMB-Server dient, befürchte ich dass das viel Rechenleistung abverlangen könnte.

Hast du dahingehend Erfahrungen?

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wolfgang.Klein schrieb:

Kleiner Wermutstropfen: um nginx mit ssl verwenden zu können, muss ich mehrere Container laufen lassen.

Grundsätzlich kannst du zwar den nginx für SSL-Offloading als Container laufen lassen, ich würde diesen aber nativ auf dem Hostsystem installieren, und als Reverse-Proxy konfigurieren. Die Angriffsfläche von außen ist damit trotzdem minimal, und du musst dich damit rumärgern ständig die Zertifikate ins Docker-Image zu kopieren etc.

In jedem Fall kann der nginx-Proxy dazu dienen sowohl Nextcloud als auch eventuell folgende Container mit anderen Applikationen nach außen hin abzubilden.

Da der angestrebte Rechner nur einen Zweikern-Prozessor mit 2 GB RAM beinhaltet, und außerdem noch als SMB-Server dient, befürchte ich dass das viel Rechenleistung abverlangen könnte.

Die Containerisierung an sich hat keinen nennenswerten RAM-Overhead (geht gegen Null). Ich weiß nicht, wie die Einstellungen des Nextcloud-Docker-Images bzgl. der MySQL/MariaDB-Datenbank sind, aber im Zweifel könntest du die Datenbank in einem separaten Container (oder im Hostsystem) betreiben, und dort Optimierungen vorzunehmen. Sollte das nötig sein, kannst du dich hier über Möglichkeiten informieren, außerdem gibt es Tools, die dich dabei unterstützen.

Abgesehen davon, solltest du, bevor du die ganze Sache installierst, unbedingt die Beschreibungsseite des Images durchlesen, vor allem den Abschnitt zu "Persistent Data".

NoMoreUbuntu

Anmeldungsdatum:
7. Oktober 2018

Beiträge: 92

FYI: wenn keine whitelist /var/... Anweisung ausgeführt wurde, und writable-var genutzt wird, sollte es mit firejail funktionieren.

auch mit --noprofile kann man unter /var nicht schreiben.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo,

Hilfe gefunden und Thema gelöst? Dann bitte als solches markieren. Danke.

Gruß BillMaier

Antworten |