Ich hatte schon einmal firejail, ein Programm um Anwendungen in Sandboxes vom restlichen System abzuschotten, installiert und damit herumexperimentiert. Aber aus Gründen, an die ich mich nicht mehr erinnere, habe ich es nie wirklich in mein System integriert.
In letzter Zeit ist mir firejail wieder durch Blogeinträge oder diesen Teil einer interessanten Artikelserie ins Gedächtnis gerufen worden und ich werde es nun für so viele Programme wie möglich nutzen.
Installation
Unter Debian ist firejail ab Stretch enthalten, bzw. für Jessie in den Backports verfügbar. Man installiert es denkbar einfach:
# apt install firejail
Einrichtung und Benutzung
Für viele Programme sind schon Profile unter /etc/firejail
vorhanden
und man kann diese einfach nutzen, indem man die Anwendung per
firejail $PROGRAMMNAME
aufruft. Per firecfg
kann man sich für
installierte Programme, für die ein Profil vorhanden ist, folgendermaßen
automatisch Symlinks nach /usr/local/bin/
anlegen lassen:
# firecfg
Dadurch genügt es nun das Programm in einem Terminal oder per Alt+F2
mit dem Programmnamen ohne vorangestelltes firejail
aufzurufen.
Mit folgendem Befehl kann man sich anzeigen lassen, welche Symlinks zu firejail von firecfg angelegt wurden:
$ firecfg --list
Da viele Programmstarter (.desktop-Dateien) unter
/usr/local/share/applications/
den kompletten Pfad zum binary
enthalten funktionieren die Verknüpfungen aus den Menüs der
Desktopumgebungen für diese Programme nicht mit firejail. Das lässt
sich ebenfalls automatisch mit firecfg beheben:
$ firecfg --fix
Dann scannt firecfg die .desktop-Dateien unter
/usr/local/share/applications/
nach vollständigen Pfadangaben bei
Exec=
in den Startern von unterstützten Programmen, kopiert diese nach
~/.local/share/applications/
und trägt dort statt dem kompletten Pfad
nur den Namen des binary ein. Nach anschließendem Aus- und Einloggen
(bzw. Ausführen von r
mittels Alt+F2 bei Gnome3) werden diese
Anwendungen nun automatisch in einer Sandbox geöffnet.
Man kann sich anzeigen lassen welche Programme gerade von firejail in einer Sandbox ausgeführt werden:
$ firejail --list
Oder man lässt sich auch sämtliche Subprozesse mit anzeigen:
$ firejail --tree
Eigene Profile anlegen
Möchte man ein Profil abändern erstellt man den Ordner
~/.config/firejail/
und kopiert das entsprechende Profil von
/etc/firejail/
in den erstellten Ordner ~/.config/firejail/
. Man
kann die Profile natürlich auch global in /etc/firejail/
editieren,
aber die Änderungen könnten von Updates überschrieben werden.
Möchte man eigene Profile für Programme, für die kein Profil
mitgeliefert wird, anlegen macht man dies am Besten unter
~/.config/firejail/$BINARYNAME.profile
. Es bietet sich an ein neues
Profil auf der Basis von /etc/firejail/default.profile
aufzubauen.
Auf die Konfiguration von Profilen werde ich hier (noch?) nicht
eingehen, da ich auch noch in der Einarbeitungsphase stecke. Deshalb
gibt es hier auch "nur" einen Quickstart-Guide. firecfg --fix
wird
leider in den Blogbeiträgen, die ich bisher zum Theme gelesen habe,
nicht erwähnt. Dummerweise habe ich es erst in der manpage gefunden
nachdem ich das schon händisch erledigt hatte. 😄
Profile testen [Update 2017-02-25]
Mit der Option --audit
lassen sich Profile auf mögliche
Sicherheitslecks untersuchen. Ein einfacher Aufruf ohne weitere
Parameter prüft das Defaultprofil:
$ firejail --audit
Die vorhanden Profile lassen sich prüfen indem man einfach den Programmnamen übergibt:
$ firejail --audit firefox
Mögliche Sicherheitslöcher werden von firejail dann folgendermaßen berichtet:
UGLY: I can access files in /home/martin/.mozilla directory. Use "firejail --blacklist=/home/martin/.mozilla" to block it.
In dem fall ist es natürlich ok, dass firefox auf ~/.mozilla
zugreifen darf. Findet man aber Zugriffe auf Ordner, die man global
unterbinden möchte legt man eine Datei
/etc/firejail/disable-common.local
an und fügt dort einen blacklist
Eintrag ein:
# Lokale firejail blacklist
blacklist ${HOME}/.gnupg
blacklist ${HOME}/.mozilla
blacklist ${HOME}/.thunderbird
Trotzdem sollte man die Programme die man mit firejail in den Berechtigungen einschränkt auch noch einzeln einem Audit unterziehen, da globale Einstellungen in den einzelnen Profilen wieder aufgehoben werden können.
Troubleshooting
Gnome-extensions AddOn im Firefox [Update 2016-12-03]
Heute fiel mir auf, dass ich keine Gnome-extensions mehr im Firefox
installieren konnte. Ich konnte es lösen indem ich folgende Zeilen dem
firefox.profile
hinzugefügt habe:
noblacklist ~/.local/share/gnome-shell/extensions/
whitelist ~/.local/share/gnome-shell/extensions/
Das komplette Profil sieht nun so aus:
# Firejail profile for Mozilla Firefox (Iceweasel in Debian)
noblacklist ~/.mozilla
noblacklist ~/.cache/mozilla
noblacklist ~/.local/share/gnome-shell/extensions/
include /etc/firejail/disable-common.inc
include /etc/firejail/disable-programs.inc
include /etc/firejail/disable-devel.inc
caps.drop all
netfilter
nonewprivs
noroot
protocol unix,inet,inet6,netlink
seccomp
tracelog
whitelist ${DOWNLOADS}
mkdir ~/.mozilla
whitelist ~/.mozilla
mkdir ~/.cache/mozilla/firefox
whitelist ~/.cache/mozilla/firefox
whitelist ~/dwhelper
whitelist ~/.zotero
whitelist ~/.vimperatorrc
whitelist ~/.vimperator
whitelist ~/.pentadactylrc
whitelist ~/.pentadactyl
whitelist ~/.keysnail.js
whitelist ~/.config/gnome-mplayer
whitelist ~/.cache/gnome-mplayer/plugin
whitelist ~/.pki
# Gnome-Shell AddOn
whitelist ~/.local/share/gnome-shell/extensions/
# lastpass, keepassx
whitelist ~/.keepassx
whitelist ~/.config/keepassx
whitelist ~/keepassx.kdbx
whitelist ~/.lastpass
whitelist ~/.config/lastpass
#silverlight
whitelist ~/.wine-pipelight
whitelist ~/.wine-pipelight64
whitelist ~/.config/pipelight-widevine
whitelist ~/.config/pipelight-silverlight5.1
include /etc/firejail/whitelist-common.inc
# experimental features
#private-etc passwd,group,hostname,hosts,localtime,nsswitch.conf,resolv.conf,gtk-2.0,pango,fonts,iceweasel,firefox,adobe,mime.types,mailcap,asound.conf,pulse