1. Ein Sandkasten für alle Fälle
Da der letzte Beitrag der Artikelserie »Linux härten« nun schon eine Weile zurückliegt, möchte ich nochmal kurz das Ziel in Erinnerung rufen: Schwachstellen bzw. Sicherheitslücken in Software wie Browser, PDF-Viewer oder Hintergrunddiensten werden häufig ausgenutzt, um Rechner mit Schadprogrammen zu infizieren. Dort werden dann Konfigurationsdateien manipuliert, Rootkits installiert oder sensible Daten vom Nutzer abgegriffen. Das Ziel der Artikelserie besteht in der Minimierung jener Risiken, die durch Sicherheitslücken in Software entstehen.
Nach der Lektüre und Umsetzung der Basis-Systemhärtung steht euer Linux-System auf einem soliden Fundament. Allerdings seid ihr nach wie vor nicht vor sogenannten Zero-Day-Exploits bzw. nicht veröffentlichten Sicherheitslücken geschützt. Mittels AppArmor aus dem dritten Teil der Serie lässt sich das ändern – allerdings ist die Anwendung und insbesondere die Erstellung und Pflege neuer Profile für den Durchschnittsnutzer auf die Dauer kaum zu bewältigen.
Ursprünglich wollte ich die Artikelserie mit grsecurity abschließen. Doch ich muss gestehen: Für den Desktop-Betrieb muss der Nutzer eine Menge Fallstricke umgehen und mehr als Linux-Basiswissen mitbringen. Auf Servern mit wenigen Diensten und hohen Anforderungen an die Sicherheit ist grsecurity hingegen wieder empfehlenswert. Daher habe ich mich entschieden, euch im letzten Teil der Serie Firejail vorzustellen. Ähnlich wie das Sicherheitsframework AppArmor soll es den Nutzer und seine Daten vor den Risiken bewahren, die von einer offenen Sicherheitslücke ausgehen.
- Sicheres Desktop System – Linux härten Teil1
- Linux Systemhärtung Basis – Linux härten Teil2
- AppArmor – Linux härten Teil3
- Firejail – Linux härten Teil4
2. Firejail
Firejail ist ein in C geschriebenes Open Source SUID Sandboxing-Tool unter GPLv2 Lizenz. Mit Hilfe von Linux Namespace und seccomp-bpf wird eine Umgebung geschaffen, die einem »Gefängnis« gleicht. Wird ein Programm in ein Firejail »Gefängnis« gesteckt, befindet es sich in einem isolierten Bereich, in dem die Ausnutzung von Sicherheitslücken im Idealfall keine Auswirkung auf die (System-)Umgebung hat. Jeder Sandbox wird eine eigene User-ID zugewiesen, um den Zugriff von Prozessen auf Ressourcen wie das Dateisystem, PID, oder den Netzwerk-Stack einzuschränken.
Update 17.04.2023
Mit Firetools steht ebenfalls eine grafische Oberfläche (GUI) bereit. Damit ist die Bearbeitung und Verwaltung der Profile möglich.Der Kuketz-Blog ist spendenfinanziert!
Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.
Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.
2.1 Warum Firejail?
Im zweiten Beitrag der Artikelserie hatte ich kurz das KISS-Prinzip (Keep it simple, stupid) erläutert. IT-Sicherheitsmaßnahmen sind nur dann wirkungsvoll und empfehlenswert, wenn sie überschaubar bzw. kontrollierbar sind und ihr sowohl die Konfiguration, als auch Anwendung beherrscht. Daher möchte ich meine ursprüngliche Empfehlung für AppArmor an dieser Stelle nicht gänzlich revidieren, allerdings scheint mir Firejail für den täglichen Gebrauch auf dem Linux-Desktop die bessere Wahl zu sein.
2.2 Installation
Generell stehen zwei unterschiedliche Installationsvarianten zur Auswahl:
- Download des Sourcecodes, den ihr anschließend selbst kompiliert und installiert
- Über einen der diversen Paketmanager eurer Linux-Distribution
Für Debian und seine Derivate (bspw. Ubuntu, Mint) steht Firejail bereits fertig verschnürt als DEB-Paket bereit. Sogar Debian-Jessie Nutzer dürfen sich über Firejail freuen – es steht als Debian-Backport bereit. OpenSUSE, CentOS 7 und Fedora Nutzer dürfen ein fertiges RPM-Paket installieren. Unter Arch Linux wird Firejail über das Arch User Repositry (AUR) angeboten. Die fertigen Pakete findet ihr also entweder im Repository eurer Linux-Distribution oder werden alternativ hier (hier für den Long Term Support) angeboten.
2.3 Quick-Start
Als Versuchskaninchen eignet sich Firefox hervorragend. Öffnet dazu am besten ein Terminal und tippt dort Folgendes ein:
firejail firefox
Firejail sperrt Firefox anschließend auf Basis eines bereits vorgefertigten Profiles in einen Sandkasten, wo der Browser anschließend spielen und mit Sand schmeißen darf – ohne dass andere Kinder dabei verletzt werden. Ein Aufruf meines Home-Verzeichnisses über die Adresszeile sieht dann folgendermaßen aus:
Über die Sandbox kann Firefox nur eine Handvoll Dateien und Ordner erreichen. Auf weitere Ordner oder Dateien aus dem Home-Verzeichnis hat Firefox hingegen keinen Zugriff mehr. Bei den Dateien handelt es sich größtenteils um Firefox-Konfigurationsdateien, die über den Ordner .mozilla aufrufbar sind – dort liegt unter anderem das Profil des Nutzers. Ein Blick auf das restliche Dateisystem aus Sicht des Firefox-Browsers:
- /boot – Blacklisted, also keinen Zugriff
- /bin – nur Leserechte
- /etc – nur Leserechte
- /etc/passwd und /etc/group – lediglich eine Referenz auf den Nutzer, der den Firefox-Prozess initiiert hat
- /home – Lediglich der aktuelle Nutzer bzw. dessen Dateien sind sichtbar (mit individuellen Einschränkungen / Befugnissen über das Firefox-Profile)
- /lib, /lib32, /lib64 – nur Leserechte
- /proc, /sys – Für den neuen PID Namespace neu gemountet
- /sbin – Blacklisted, also keinen Zugriff
- /selinux – Blacklisted, also keinen Zugriff
- /usr – nur Leserechte
- /usr/sbin – Blacklisted, also keinen Zugriff
- /var – nur Leserechte
- Mittels tmpfs werden die Verzeichnisse /var/lock, /var/log, /var/tmp, und weitere Ordner unter /var/lib und /var/cache neu gemountet
Es ist also denkbar einfach, ein Programm in eine Sandbox zu sperren, sofern bereits ein Profil existiert. Ihr könnt das »Firefox-Jail« noch weiter anpassen. Entweder ihr übergebt Firejail beim Aufruf von Firefox direkt weitere Parameter oder ihr ergänzt das bereits bestehende Profile. Wie komplex bzw. »sicher« ihr es gerne hättet, liegt dabei ganz bei euch. Auf der offiziellen Seite von Firejail findet ihr noch weitere Parameter und Erläuterungen für das Firefox-Beispiel. Ihr solltet dort in jedem Fall einen Blick reinwerfen.
3. Profile
Firejail wird mit einer Vielzahl von Standardprofilen ausgeliefert, die insbesondere jene Programme umfassen, die mit dem Internet kommunizieren oder nicht vertrauenswürdigen Code (bspw. fremde PDF-Files, Videos, etc.) auf dem Rechner ausführen. Je nach Distribution sind diese unter unterschiedlichen Pfaden abgelegt – bei Debian bspw. unter /etc/firejail. Sofern bereits ein Profile für ein Programm existiert, könnt ihr es direkt in ein »Gefängnis« sperren. Mit folgendem Befehl wird das Profile geladen:
firejail programmname
Das Schöne an Firejail ist seine Flexibilität:
- Sofern bereits ein Profile vorhanden ist, könnt ihr ein Programm kurzerhand in einer dafür angepassten Sandbox ausführen.
- Wenn ihr das bereits vorhandene Profile anpassen wollt, habt ihr zwei Möglichkeiten:
- Ihr könnt beim Aufruf des Programms weitere Parameter übergeben und so das Default-Profile ergänzen bzw. einzelne Einstellungen überschreiben.
- Ihr könnt aber auch eine Kopie des Profils unter ~/.config/firejail erstellen und dort eure Änderungen vornehmen. Beim Start eines Programms wird Firejail zunächst in eurem Home-Verzeichnis nach einem passenden Profile suchen, bevor es das Default-Profile lädt.
- Existiert noch kein Profile, könnt ihr Programme dennoch in eine Firejail Sandbox sperren. Der Funktionsumfang des Standard-Profiles ist dann folgender:
The sandbox consists of a chroot filesystem build in a new mount namespace, and new PID [can’t see processes running outside the sandbox] and UTS [can have its own hostname] namespaces. The default Firejail filesystem is based on the host filesystem with the main directories mounted read-only. Only /home and /tmp and directories are writeable [unless overruled with whitelist, blacklist, tmpfs, or private settings].
3.1 Parameter
Werfen wir kurz einen Blick auf eine Auswahl von Firejail Parametern, mit denen sich die Sandbox an eure Bedürfnisse anpassen lässt.
- –net=none: Das Programm erhält lediglich ein neues Loopback-Interface. Das bedeutet: Der Internetzugriff ist nicht mehr gestattet. Diese Funktion mag bspw. für PDF-Viewer interessant sein.
- –private: Es wird ein »neues« Home-Verzeichnis eingebunden. Das bedeutet: Auf eure eigenen Dateien im Home-Verzeichnis hat das Programm keinen Zugriff. Alle Änderungen in diesem »neuen« Home-Verzeichnis werden nach dem Schließen von Firejail verworfen.
- –private=directory: Mit dem Parameter wird das Home-Verzeichnis auf einen bestimmten Ordner reduziert. Änderungen innerhalb dieses Verzeichnisses bleiben auch nach dem Schließen von Firejail erhalten.
- –private-tmp: Auf das bestehende /tmp Verzeichnis besteht kein Zugriff. Es wird ein neues /tmp Verzeichnis gemountet.
- –blacklist=dirname_or_filename: Sperrt den Zugriff auf einen Ordner oder Verzeichnis. Damit kann bspw. der Ordner /boot vor dem Zugriff aus der Sandbox geschützt werden.
Schauen wir uns in diesem Zusammenhang ein paar Firefox-Beispiele an:
- Firefox ohne Internetanbindung – lediglich mit einem neuen Loopback-Interface:
firejail --net=none firefox
- Firefox ohne Zugriff auf euer Home-Verzeichnis und damit bestehendes Profil (also Ursprungszustand ohne Add-ons usw.) und mit neuem DNS-Server
firejail --private --dns=116.203.32.217 firefox
- Firefox mit einem neuen Network Namespace und mit separaten iptables Firewall Regelsätzen (zb. kein Zugriff auf das lokale Netz)
firejail --net=eth0 --netfilter=/etc/firejail/nolocal.net firefox
3.2 Verlinkung der Programme
Über das Terminal ist der Aufruf eines Programms in einer Firejail Sandbox einfach und schnell erledigt. Die Frage ist: Ist es möglich, alle Programme automatisch in einem Firejail zu starten? Also auch dann, wenn der Aufruf bspw. nicht über das Terminal, sondern über ein grafisches Menü erfolgt? Leider bisher nicht – doch es besteht Abhilfe über symbolische Links:
DESKTOP INTEGRATION
A symbolic link to /usr/bin/firejail under the name of a program, will start the program in Firejail sandbox. The symbolic link should be placed in the first $PATH position. On most systems, a good place is /usr/local/bin directory. Example:Make a firefox symlink to /usr/bin/firejail:
$ ln -s /usr/bin/firejail /usr/local/bin/firefox
Verify $PATH
$ which -a firefox
/usr/local/bin/firefox
/usr/bin/firefoxStarting firefox in this moment, automatically invokes “firejail firefox”.
This works for clicking on desktop environment icons, menus etc. Use „firejail –tree“ to verify the program is sandboxed.
$ firejail –tree
1189:netblue:firejail firefox
1190:netblue:firejail firefox
1220:netblue:/bin/sh -c „/usr/lib/firefox/firefox“
1221:netblue:/usr/lib/firefox/firefox
Beispiele:
- Firefox: ln -s /usr/bin/firejail /usr/local/bin/firefox
- Icedove (Thunderbird): ln -s /usr/bin/firejail /usr/local/bin/icedove
- pqdfview: ln -s /usr/bin/firejail /usr/local/bin/qpdfview
- vlc: ln -s /usr/bin/firejail /usr/local/bin/vlc
- Filezilla: ln -s /usr/bin/firejail /usr/local/bin/filezilla
- gimp: ln -s /usr/bin/firejail /usr/local/bin/gimp
- [ … ]
Nach der Verlinkung und den Start über die Desktopumgebung könnt ihr prüfen, ob sich das Programm in einem Firejail befindet:
firejail --list 9071:mike:/usr/bin/firejail /usr/bin/icedove 10696:mike:/usr/bin/firejail /usr/bin/firefox 25158:mike:firejail --profile=/etc/firejail/torbrowser.profile /opt/tor-browser [...]
3.3 Welche Programme kommen ins Gefängnis?
Kurze Antwort: So viele wie möglich.
Lange Antwort: Insbesondere nach der Inbetriebnahme von Firejail solltet ihr euch zunächst auf jene Programme konzentrieren, die in irgendeiner Form Daten bzw. Informationen mit dem Internet austauschen. Dazu zählen bspw. Browser, E-Mail Clients, Chat-Programme, Filesharing, usw. Nachdem diese Programme in einem Gefängnis sitzen, solltet ihr euch Diensten widmen, die über das Internet kommunizieren. Bei mir ist das bspw. ntp oder DNSCrypt – der Clou ist: In Firejail können nicht nur Programme, sondern auch Dienste »gesperrt« werden.
Auch das ist abgehakt? Als Nächstes widmet ihr euch Programmen, die Medien und Dateien verarbeiten, die ihr bspw. über das Internet bezieht oder euch jemand per E-Mail, USB-Stick, usw. zukommen lässt. Damit meine ich Programme wie PDF-Reader, Audio-/Videowiedergabe, Office, usw.
3.4 Tor Browser Profile
Für das Tor-Browser Bundle wird bereits ein Profile mitgeliefert. Allerdings fand ich es nicht restriktiv genug und habe es an meine Bedürfnisse angepasst. Den Vorgang möchte ich euch kurz erläutern.
Zunächst wird das vorhandene Profil in das Home-Verzeichnis unter ~/.config/firejail kopiert. Also bspw.
cp /etc/firejail/ start-tor-browser.profile ~/.config/firejail
Danach kann es angepasst werden. Mein aktuelles Tor-Browser Profile, inklusive ausführlicher Dokumentation, sieht folgendermaßen aus:
## Tor-Browser Profile [compatible 8.x] ## Mike Kuketz ## 06.09.2018 ## Version 1.02 ## Disable access # Disable access to common system management tools (sudo, mount, etc.) include /etc/firejail/disable-common.inc # Disable access to common program configs in ${HOME} include /etc/firejail/disable-programs.inc # Disable access to common password manager files include /etc/firejail/disable-passwdmgr.inc # Disable access to development tools include /etc/firejail/disable-devel.inc ## Security filters # Blacklist all Linux capabilities caps.drop all # Ensures that child processes cannot acquire new privileges nonewprivs # No root account. Only one user, the current one noroot # Disable supplementary groups nogroups # Protocol filter for unix sockets and IPv4/IPv6 protocol unix,inet,inet6 # Run the program directly, without a user shell shell none # Enable default seccomp filter and blacklist the syscalls seccomp ## Filesystem # Mount an empty temporary filesystem on top of /tmp directory private-tmp # Create a new /dev directory private-dev # Build new /etc in a temporary filesystem (gets discarded). private-etc empty # Build new /bin in a temporary filesystem. Copy the programs in the list. private-bin bash,sh,grep,tail,env,gpg,id,readlink,dirname,test,mkdir,ln,sed,cp,rm,getconf # Use directory as user home private /opt/tor-browser/tor-browser_de/Browser # Blacklist blacklist /boot blacklist /mnt blacklist /media blacklist /root blacklist /srv ## Networking # Default network filter for new created network namespace netfilter
Mein Tor-Browser Bundle liegt demnach unter dem Pfad /opt/tor-browser/tor-browser_de. Aus Sicherheitsgründen übergebe ich das modifizierte Firejail Profile beim Aufruf direkt als Parameter:
firejail --profile=~/.config/firejail/ start-tor-browser.profile /opt/tor-browser/tor-browser_de/Browser/start-tor-browser
Wer weitere Verbesserungsvorschläge für das Profile hat, der kann mich gerne kontaktieren oder die Kommentar-Funktion nutzen. Es lässt sich sicherlich noch etwas verbessern bzw. restriktiver gestalten.
4. Fazit
Mit dem vorliegenden Beitrag möchte ich die Artikelserie »Linux härten« nun beenden. Wer von euch die Basis-Systemhärtung befolgt und daneben AppArmor oder Firejail einsetzt, der reduziert das Risiko erheblich, dass von bis dato ungepatchten Sicherheitslücken in Programmen ausgeht.
Insbesondere Firejail eignet sich nach meinem Empfinden hervorragend für den Desktop-Einsatz. Wer darüber hinaus noch weiter die Sicherheit seines Systems erhöhen möchte, der kann einen vorsichtigen Blick auf grsecurity werfen. Ihr könnt den Kernel entweder selbst kompilieren oder auf bereits vorgefertigte Packages zurückgreifen, wie sie bspw. Debian anbietet.
Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:
36 Ergänzungen zu “Firejail – Linux härten Teil4”
Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-ForumAbschließender Hinweis
Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.
Danke für die vielen Tipps obwohl ich mich auf gresecurity gefreut hatte, ich habe es auf dem Desktop nichts an laufen bekommen. Ich hatte schon Probleme das mit meinen Kernel zu kombinieren und ohne meine Patches hat er sich geweigert Xorg auszuführen und das obwohl Xorg als User läuft.
Firejail ist interessant, werde ich mal ein wenig nutzen und schauen wie es sich damit verhält.
Was ich an Lynis nicht so ganz verstehe, warum bemängelt das Tool das sowas wie puppet fehlt? Ich verstehe auch nicht was dieser Single User Mode sein soll?
Danke für die Reihe, war sehr interessant.
Silvio
Hallo Mike,
danke für den Artikel! Ich hatte schon in einem Kommentar zu deinem AppArmor-Artikel darauf hingewiesen, dass ich Firejail sehr gut finde. Schön, dass du das auch so siehst.
Kleiner Hinweis bezüglich der symlinks: Die müssen nicht umständlich manuell angelegt werden. Das Ausführen von
sudo firecfg
macht das automatisch für alle installierten Programme, für die Firejail Profile mitliefert.
sudo firecfg –list
zeigt die bestehenden symlinks an.
Ein 2. Tip: Modifikationen bestehender Profile in ~/.config/firejail kann man dadurch übersichtlicher gestalten, indem man folgendes macht:
… deine eigenen Regeln …
include /etc/firejail/start-tor-browser.profile
Ja ich erinnere mich an deinen Kommentar! :-)
Zu 1.: Korrekt. Aber ich stelle die Verknüpfung lieber manuell für jene Programme her, die ins Gefägnis sollen.
Zu 2.: Stimmt! Ich habe das allerdings aufgrund meiner zusätzlichen Kommentare komplett gepostet.
Ich verstehe :-)
Vielleicht noch ein Hinweis, der für den Einen oder Anderen nützlich sein könnte, da du im Artikel Dnscrypt erwähnt hattest. Um solche Dienste, die mittlerweile in den meisten Distros über systemd gestartet werden, in einer Firejail-Sandbox laufen zu lassen, ist so vorzugehen, wie auf https://wiki.archlinux.org/index.php/Systemd#Editing_provided_units beschrieben. Und dann in der erstellten drop-in Datei den ExecStart- Eintrag anpassen in z.B.:
ExecStart=
ExecStart=/usr/bin/firejail /usr/sbin/dnsmasq -k –all-servers –user=nobody
Der erste Zeile ist notwendig, um den ursprünglichen Befehl ungültig zu machen.
Für Services bietet systemd auch schon selbst jede Menge Möglichkeiten der Beschränkung, zum Beispiel ProtectSystem oder SystemCallFilter (und jede Menge mehr). Das ist zwar leider aktuell alles etwas verstreut, aber es gibt Pläne das zu „konsolidieren“.
Hallo Mike!
Danke für den tollen Artikel.
Kann bzw sollte man firejail zugleich mit apparmor verwenden? Hat das irgendeinen Nutzen oder bringt das nur Probleme mit sich?
Beim Copy-paste ist dir übrigends in Zeile 13 das include in den Kommentar gerutscht
Firejail und AppArmor »beißen« sich nicht. Du kannst also beide gleichzeitig einsetzen. Wird dann aber eventuell zu kompliziert und unübersichtlich, was wiederum dem KISS-Prinzip widerspricht.
Wie Mike schon sagte, beißen sich Firejail und AppArmor nicht. Es ist sogar so, dass Firejail seit Version 0.9.42 AppArmor explizit unterstützt, sofern du Firejail entsprechend kompilierst. Details unter https://l3net.wordpress.com/2016/07/23/firejail-0-9-42rc1-release-announcement/
Vielen Dank für den Artikel! Firejail ist in der Tat sehr interessant.
Noch ein kleiner Hinweis bezüglich Arch Linux: firejail selbst ist im offiziellen Repo vorhanden, das Paket im AUR ist die grafische Benutzeroberfläche.
Danke Klemens. Hatte den falschen Link eingebunden.
Hallo Mike,
vielen Dank für den tollen Artikel wieder.
Ich hätte da eine Verständnisfrage: Das ganze dient doch dazu, um zu verhindern, dass im Schadens(be)fall einer Applikation zu verhindern dass Schadcode auf die Festplatte geschrieben wird oder?
Was ist aber mit Programme mit dene ich bewusst was auf die Festplatte speichere. Zum Beispiel Firefox wenn ich was downloade. Oder beim Thunderbird wenn ich einen Anhang einer Mail speichern möchte?
Oder habe ich da was komplett missverstanden?
Gruß
Slash
Die Folgen solcher Exploits lassen sich durch Firejail eindämmen. Also von Schwachstellen, die ohne direkte User-Interaktion ausgenutzt werden können.
Wenn du dir hingegen irgendwelche dubiosen Dateien auf die Festplatte lädst, dann tust du das in der Regel aktiv bzw. bewusst. Davor schützt dich in der Regel die brain.exe. ;-)
Ja es geht halt einfach nix über brain.exe. Aber leider nutze ich Linux und da läuft ja bekanntlich kein Win Programm. :-D ;-) :-P
So habe jetzt mit Hilfe des Artikels mein FF, Thunderbird, Gajim, Retroshare, Bitmessage sowie Tor Browser in den Knast gesperrt. Vielen Dank nochmal.
Ist die App: firejailtools empfelenswert?
Diese ist in den Paketquellen zu haben. Es hat eine graphische Oberfäche.
Hallo Mike,
danke für den tollen Artikel. Ich habe dazu noch eine (Anfänger-) Frage: ich surfe ausschließlich im privaten Modus. Wenn ich das private Fenster jedoch im Kontextmenu von FF aufrufe, sehe ich im Terminal
‚parent is shutting down, bye…‘
Heißt das, dass es mit Firejail nicht möglich ist, im privaten Modus zu surfen? Oder habe ich etwas falsch gemacht?
Grüße, Horst
Normalerweise, heisst es, dass die App beendet wurde.
Irgendwas an deinen Firejail rules scheint zu strikt zu sein dass die Anwendung direkt nach dem Start quasi Forced-closed.
Hallo Horst,
das kann ich bei mir (Fedora 25 KDE) nicht feststellen. Wenn ich im Menü ein neues Privates Fenster öffne, läuft das ebenfalls einwandfrei unter Firejail.
Ist eventuell dein Profil kaputt? Du kannst es ja mal mit einem neuen Profil testen, indem du
firefox -p
startest und ein neues erstellst. Du kannst ja dann problemlos zum alten Profil zurück.
Ich bekomme beim Starten des Tor-Browsers mit der angepassten Profile-Datei immer nur folgende Ausgabe:
Der Tor-Browser wird nicht geöffnet. Mach ich was falsch?
Ist schon eine Instanz des Tor-Browsers offen? Versuch mal ein
-no-remote
anzuhängen.Ansonsten für Issues bzw. Probleme hier vorbeischauen: https://github.com/netblue30/firejail/issues
Hallo,
bei mir schmiert das TBB mit Mikes Profil auch immer direkt nach dem Start ab. Das Stock-Profil von Firejail funktioniert jedoch.
Versucht es mal mit einem trace:
--trace
Dann könnt ihr schauen, wo Firejail hängen bleibt.
Es sieht so aus als liege es daran dass in dem angepassten Profil der Parameter „private“ verwendet wird:
Demnach muss dann die Tor-Instanz auch folgendermaßen gestartet werden:
Mike, welchen Vorteil hat dieser private-Parameter?
Jep, daran lag es.
So funktioniert es, danke!
Kann einer der Gelehrten (keine Polemik ;-), zähle mich nur selbst nicht dazu) vielleicht mal kurz vergleichend anreißen, wie diese Art des „Einsperrens“ von Apps/Programmen im Vergleich zu den Prinzipien von Qubes OS steht?
Vielleicht unterbricht das auch gleich einer mit einem Satz ala: „Du kannst nicht Äpfel und Birnen vergleichen!“, aber vielleicht hat ja doch jemand ein paar Gedanken dazu.
Also Ihr müsst jetzt nicht unbedingt haarklein erklären, dass das eine ein ein Betriebssystem ist, dass über den Xen Hypervisor voneinander separierte Mini-VMs erstellt und das andere ein Tool ist, um kleine Gefängnisse zu schaffen.
Es hat mich eher interssiert, ob es da riesige konzeptionelle (Stichwort „Security by Isolation“) Unterschiede gibt, sprich verfolgt beides ähnliche Ziele?
Leider habe ich mit den mitgelieferten configs fast auf alles Lesezugriff.
Womit stelle ich denn ein, dass mein /home außer den explizit freigegebenen Ordnern unlesbar ist?
Das funktioniert nicht. Finde leider in der Doku nichts dazu.
# Use directory as user home
private /home/USERNAME/ordner/ordner
Das kann eigentlich nicht sein, dass du auf fast alles Lesezugriff hast. Sondern nur auf das, was explizit ge-whitelisted ist. Das kannst du im Detail sehen, wenn du
file:///home/dein_username
in der Adresszeile von Firefox eingibst. Siehe auch das Bild in Mikes Artikel unter 2.3 Quick-Start.
Danke Mike und seeker für die Antwort.
Tja, ich weiß auch nicht was ich da gestern falsch gemacht habe. Heute funktioniert es. :-/
Leider funktionieren die meisten automatisch angelegten symlinks nach /usr/local/bin/ unter Debian Stretch Gnome3 nicht obwohl es im PATH vorne ist, da die meisten Starter über die mitgelieferten .desktop-Dateien in /usr/share/applications/ den absoluten Pfad verwenden. Es funktioniert also nur über Alt+F2 oder Starten im Terminal. Da muss ich jetzt wohl einige geänderte .desktop-Dateien in ~/.local/share/applications/ ablegen.
Danke für die interessante Artikelserie, einiges kannte ich bereits, einiges war neu, alles war interessant. Firejail hatte ich z.B. mal installiert aber dann aus den Augen verloren und bin jetzt wieder daran das mal ordentlich einzurichten.
Auf jeden Fall werde ich alle Anwendungen, die mit dem Internet kommunizieren wie Email-Client, Browser etc. abschotten. Besonders proprietäre wie spotify (nutze ich nur alle Monate mal um Neuerscheinungen Probe zu hören, bin eher der altmodische Hardware-Käufer) und steam (shame on me).
Ich werde auf jeden Fall jedem Programm in /home nur auf sein eigenes Verzeichnis und Downloads zugreifen lassen. Letzteres ist dann das „dreckige“ Austausch-Verzeichnis.
Allgemein erscheinen mir folgende Optionen für diese Programme auch sinnvoll:
Haltet ihr das für einen sinnvollen Standard?
--fix
Fix .desktop files. Some .desktop files use full path to executable. Firecfg will check .desktop files in /usr/share/applications/, replace full path by name if it is in PATH, and write result to $HOME/.local/share/applications/.
Verdammt, firecfg hätte das auch selbst erledigen können. :-/
Das hast du ja nun selbst herausgefunden ;-)
Aber zu deiner Frage wegen den „sinnvollen“ Optionen: Das kommt darauf an. Zunächst sind die mitgelieferten Profile schon mal sehr gut und für die einzelnen Programme angepasst. Wenn man sie modifiziert, muss man einfach ausprobieren, ob es funktioniert, was nicht immer der Fall ist.
Beispiele:
Fall du Chromium verwenden solltest, funktioniert seccomp nicht (weil Chromium seccomp-bpf schon selbst verwendet), ebenfalls nicht caps.drop all (aber dafür caps.keep sys_chroot,sys_admin – nicht im Profil enthalten).
Für unbound funktionieren seccomp and caps.drop all ebenfalls nicht (aber dafür seccomp.drop … siehe das entsprechende Profil), für dnsmasq dagegen seccomp und caps.
In Thunderbird ist private-tmp problematisch, weil dann Okular keine angehängten PDF-Dateien mehr öffnen kann.
Du siehst – es kommt auf den Einzelfall an. Tips, wie sich einzelne Profile eventuell weiter „härten“ lassen, findest du auf https://github.com/chiraag-nataraj/firejail-profiles
Hallo zusammen!
Ich hätte auch noch eine Frage zum whitelisten: Ich habe einige Daten in einem Ordner außerhalb meines Home-Verzeichnisses liegen (z.B. eine Datenpartition welche unter /home/data eingehängt wird). Ich bin Eigentümer dieses Verzeichnisses. Nun will ich mit evince PDFs, welche auf dieser Partition liegen, ansehen. Firejail verhindert jedoch den Zugriff darauf. Weder whitelist noch noblacklist von /home/data hilft. Wie kann man den Zugriff auf solche Verzeichnisse zulassen?
Das ist jetzt mehr eine Frage und das folgende kritisch zu lesen bzw. zu evaluieren. Aber wenn ich grsecurity habe, dann härte ich doch die chroot container automatisch(?). Und firejail unterstützt ja einen Prozess einzuschränken, also genauer die ptrace Einschränkungen, welche wiederum benutzerdefiniert abgelegt werden und dann bei grsecurity entsprechen in einem chroot container landen. Ergo ist firejail mit grsecurity quasi nochmal gehärtet bzw. sicherer oder???
Hallo!
Danke für den tollen Artikel!
Wie kann das TBB-Profil dahingehend ändern, dass die Ausgabe von Audio erlaubt wird (für zB Youtube)?
Ich würde gerne 2 Profile erstellen. 1x komplett lockeddown und 1x mit erlaubtem Audioausgang.
Falls noch jemand das Problem haben sollte: Firejail hat Probleme mit pulseaudio 7/8
https://firejail.wordpress.com/known-problems/#pulseaudio
Hallo Mike!
Zahlt es sich aus den mit firejail bereits gehärteten Browser mit xephyr und dwm in einen eigenen WM zu stopfen (wie zB mit dem Github projekt Torjail)?