Firejail – Linux härten Teil4

1. Ein Sandkasten für alle FälleFirejail

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.

Dieser Beitrag ist Teil einer Artikelserie:

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.

Mitmachen ➡

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:

  1. Download des Sourcecodes, den ihr anschließend selbst kompiliert und installiert
  2. Ü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:

Firefox in Firejail

Ü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/firefox

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

Über den Autor | Kuketz

Mike Kuketz

In meiner freiberuflichen Tätigkeit als Pentester / Sicherheitsforscher (Kuketz IT-Security) schlüpfe ich in die Rolle eines »Hackers« und suche nach Schwachstellen in IT-Systemen, Webanwendungen und Apps (Android, iOS). Des Weiteren bin ich Lehrbeauftragter für IT-Sicherheit an der Dualen Hochschule Karlsruhe, sensibilisiere Menschen in Workshops und Schulungen für Sicherheit und Datenschutz und bin unter anderem auch als Autor für die Computerzeitschrift c’t tätig.

Der Kuketz-Blog bzw. meine Person ist regelmäßig in den Medien (heise online, Spiegel Online, Süddeutsche Zeitung etc.) präsent.

Mehr Erfahren ➡

SpendeUnterstützen

Die Arbeit von kuketz-blog.de wird zu 100% durch Spenden unserer Leserinnen und Leser finanziert. Werde Teil dieser Community und unterstütze auch du unsere Arbeit mit deiner Spende.

Folge dem Blog

Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:

Bleib aktuell ➡


Diskussion

36 Ergänzungen zu “Firejail – Linux härten Teil4”

  1. Comment Avatar Silvio Siefke sagt:

    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

  2. Comment Avatar seeker sagt:

    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

    • Comment Avatar Mike Kuketz sagt:

      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.

      • Comment Avatar seeker sagt:

        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.

  3. Comment Avatar Anonymous sagt:

    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

  4. Comment Avatar Klemens sagt:

    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.

  5. Comment Avatar Slash sagt:

    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

    • Comment Avatar Mike Kuketz sagt:

      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. ;-)

      • Comment Avatar Slash sagt:

        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.

  6. Comment Avatar Anonymous sagt:

    Ist die App: firejailtools empfelenswert?

    Diese ist in den Paketquellen zu haben. Es hat eine graphische Oberfäche.

  7. Comment Avatar Horst sagt:

    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

    • Comment Avatar Anonymous sagt:

      Normalerweise, heisst es, dass die App beendet wurde.

    • Comment Avatar Anonymous sagt:

      Irgendwas an deinen Firejail rules scheint zu strikt zu sein dass die Anwendung direkt nach dem Start quasi Forced-closed.

    • Comment Avatar seeker sagt:

      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.

  8. Comment Avatar Simon sagt:

    Ich bekomme beim Starten des Tor-Browsers mit der angepassten Profile-Datei immer nur folgende Ausgabe:

    $ firejail --profile=~/.config/firejail/start-tor-browser.profile ~/tor-browser/tor-browser_de/Browser/start-tor-browser
    Reading profile /home/simon/.config/firejail/start-tor-browser.profile
    Reading profile /etc/firejail/disable-common.inc
    Reading profile /etc/firejail/disable-programs.inc
    Reading profile /etc/firejail/disable-passwdmgr.inc
    Reading profile /etc/firejail/disable-devel.inc
    Warning: user namespaces not available in the current kernel.
    Parent pid 1981, child pid 1982
    Warning: /sbin directory link was not blacklisted
    Warning: /usr/sbin directory link was not blacklisted
    Child process initialized
    Parent is shutting down, bye...
    

    Der Tor-Browser wird nicht geöffnet. Mach ich was falsch?

  9. Comment Avatar Smojo sagt:

    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?

  10. Comment Avatar Martin sagt:

    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?

    blacklist ${HOME}
    noblacklist ${HOME}/.eigener_ordner
    noblacklist ${HOME}/Downloads
    

    Das funktioniert nicht. Finde leider in der Doku nichts dazu.

    • Comment Avatar Mike Kuketz sagt:

      # Use directory as user home
      private /home/USERNAME/ordner/ordner

    • Comment Avatar seeker sagt:

      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.

      • Comment Avatar Martin sagt:

        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:

        caps.drop all
        netfilter
        nonewprivs
        noroot
        nogroups
        protocol unix,inet,inet6,netlink
        shell none
        private-tmp
        private-dev
        private-etc empty
        seccomp

        Haltet ihr das für einen sinnvollen Standard?

        • Comment Avatar Martin sagt:

          --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. :-/

          • Comment Avatar seeker sagt:

            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

  11. Comment Avatar Andreas sagt:

    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?

  12. Comment Avatar MinimaMoralia sagt:

    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???

  13. Comment Avatar Anonymous sagt:

    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.

  14. Comment Avatar Anonymous sagt:

    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)?

HilfeWenn du konkrete Fragen hast oder Hilfe benötigst, sind das offizielle 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-Forum

Abschließ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.