aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitattributes1
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md21
-rw-r--r--.github/pull_request_template.md1
-rw-r--r--.github/workflows/profile-checks.yml31
-rw-r--r--.github/workflows/sort.yml22
-rw-r--r--COPYING85
-rw-r--r--Makefile.in6
-rw-r--r--README48
-rw-r--r--README.md89
-rw-r--r--RELNOTES13
-rw-r--r--SECURITY.md36
-rwxr-xr-xci/check/profiles/private-etc-always-required.sh15
-rwxr-xr-xci/check/profiles/sort-disable-programs.sh2
-rwxr-xr-xci/check/profiles/sort-firecfg.config.sh2
l---------ci/check/profiles/sort.py1
-rwxr-xr-xconfigure56
-rw-r--r--configure.ac11
-rwxr-xr-xcontrib/fix_private-bin.py2
-rwxr-xr-xcontrib/gdb-firejail.sh2
-rwxr-xr-xcontrib/sort.py2
-rw-r--r--contrib/vim/syntax/firejail.vim2
-rw-r--r--etc-fixes/0.9.58/atom.profile1
-rw-r--r--etc-fixes/seccomp-join-bug/README1
-rw-r--r--etc/apparmor/firejail-base27
-rw-r--r--etc/apparmor/firejail-default2
-rw-r--r--etc/firejail.config5
-rw-r--r--etc/ids.config16
-rw-r--r--etc/inc/allow-common-devel.inc5
-rw-r--r--etc/inc/allow-ruby.inc1
-rw-r--r--etc/inc/disable-common.inc8
-rw-r--r--etc/inc/disable-devel.inc2
-rw-r--r--etc/inc/disable-exec.inc1
-rw-r--r--etc/inc/disable-interpreters.inc1
-rw-r--r--etc/inc/disable-proc.inc82
-rw-r--r--etc/inc/disable-programs.inc355
-rw-r--r--etc/inc/whitelist-run-common.inc4
-rw-r--r--etc/profile-a-l/Books.profile5
-rw-r--r--etc/profile-a-l/abiword.profile2
-rw-r--r--etc/profile-a-l/agetpkg.profile2
-rw-r--r--etc/profile-a-l/akonadi_control.profile1
-rw-r--r--etc/profile-a-l/akregator.profile1
-rw-r--r--etc/profile-a-l/alacarte.profile2
-rw-r--r--etc/profile-a-l/alienarena.profile1
-rw-r--r--etc/profile-a-l/amarok.profile2
-rw-r--r--etc/profile-a-l/amule.profile1
-rw-r--r--etc/profile-a-l/anki.profile2
-rw-r--r--etc/profile-a-l/aria2c.profile2
-rw-r--r--etc/profile-a-l/ark.profile1
-rw-r--r--etc/profile-a-l/arm.profile2
-rw-r--r--etc/profile-a-l/artha.profile2
-rw-r--r--etc/profile-a-l/atool.profile2
-rw-r--r--etc/profile-a-l/atril.profile2
-rw-r--r--etc/profile-a-l/audacious.profile1
-rw-r--r--etc/profile-a-l/authenticator-rs.profile2
-rw-r--r--etc/profile-a-l/authenticator.profile2
-rw-r--r--etc/profile-a-l/baloo_file.profile1
-rw-r--r--etc/profile-a-l/balsa.profile4
-rw-r--r--etc/profile-a-l/bibletime.profile2
-rw-r--r--etc/profile-a-l/bijiben.profile2
-rw-r--r--etc/profile-a-l/bitwarden.profile2
-rw-r--r--etc/profile-a-l/bless.profile2
-rw-r--r--etc/profile-a-l/blobby.profile2
-rw-r--r--etc/profile-a-l/blobwars.profile4
-rw-r--r--etc/profile-a-l/bsdtar.profile2
-rw-r--r--etc/profile-a-l/build-systems-common.profile66
-rw-r--r--etc/profile-a-l/bundle.profile23
-rw-r--r--etc/profile-a-l/cameramonitor.profile2
-rw-r--r--etc/profile-a-l/cargo.profile56
-rw-r--r--etc/profile-a-l/cawbird.profile2
-rw-r--r--etc/profile-a-l/celluloid.profile2
-rw-r--r--etc/profile-a-l/cheese.profile13
-rw-r--r--etc/profile-a-l/clawsker.profile2
-rw-r--r--etc/profile-a-l/cmake.profile13
-rw-r--r--etc/profile-a-l/cmus.profile2
-rw-r--r--etc/profile-a-l/codium.profile10
-rw-r--r--etc/profile-a-l/cola.profile2
-rw-r--r--etc/profile-a-l/com.github.bleakgrey.tootle.profile2
-rw-r--r--etc/profile-a-l/com.github.dahenson.agenda.profile2
-rw-r--r--etc/profile-a-l/com.github.johnfactotum.Foliate.profile2
-rw-r--r--etc/profile-a-l/coyim.profile2
-rw-r--r--etc/profile-a-l/crow.profile2
-rw-r--r--etc/profile-a-l/d-feet.profile2
-rw-r--r--etc/profile-a-l/dbus-send.profile2
-rw-r--r--etc/profile-a-l/dconf-editor.profile2
-rw-r--r--etc/profile-a-l/dconf.profile2
-rw-r--r--etc/profile-a-l/ddgtk.profile2
-rw-r--r--etc/profile-a-l/devhelp.profile2
-rw-r--r--etc/profile-a-l/devilspie.profile2
-rw-r--r--etc/profile-a-l/discord-common.profile2
-rw-r--r--etc/profile-a-l/display.profile2
-rw-r--r--etc/profile-a-l/dragon.profile1
-rw-r--r--etc/profile-a-l/drawio.profile2
-rw-r--r--etc/profile-a-l/easystroke.profile2
-rw-r--r--etc/profile-a-l/electron-mail.profile2
-rw-r--r--etc/profile-a-l/electrum.profile2
-rw-r--r--etc/profile-a-l/email-common.profile4
-rw-r--r--etc/profile-a-l/enchant.profile2
-rw-r--r--etc/profile-a-l/eo-common.profile2
-rw-r--r--etc/profile-a-l/eog.profile2
-rw-r--r--etc/profile-a-l/equalx.profile2
-rw-r--r--etc/profile-a-l/evince.profile2
-rw-r--r--etc/profile-a-l/exiftool.profile2
-rw-r--r--etc/profile-a-l/falkon.profile3
-rw-r--r--etc/profile-a-l/fdns.profile2
-rw-r--r--etc/profile-a-l/feh-network.inc.profile2
-rw-r--r--etc/profile-a-l/feh.profile2
-rw-r--r--etc/profile-a-l/ffplay.profile2
-rw-r--r--etc/profile-a-l/file-roller.profile2
-rw-r--r--etc/profile-a-l/firefox-common.profile1
-rw-r--r--etc/profile-a-l/flameshot.profile6
-rw-r--r--etc/profile-a-l/freetube.profile2
-rw-r--r--etc/profile-a-l/frogatto.profile2
-rw-r--r--etc/profile-a-l/frozen-bubble.profile1
-rw-r--r--etc/profile-a-l/funnyboat.profile1
-rw-r--r--etc/profile-a-l/gajim.profile2
-rw-r--r--etc/profile-a-l/galculator.profile2
-rw-r--r--etc/profile-a-l/gallery-dl.profile2
-rw-r--r--etc/profile-a-l/gapplication.profile2
-rw-r--r--etc/profile-a-l/gcloud.profile2
-rw-r--r--etc/profile-a-l/gconf.profile2
-rw-r--r--etc/profile-a-l/geary.profile2
-rw-r--r--etc/profile-a-l/geekbench.profile14
-rw-r--r--etc/profile-a-l/gget.profile2
-rw-r--r--etc/profile-a-l/gimp.profile1
-rw-r--r--etc/profile-a-l/gist.profile2
-rw-r--r--etc/profile-a-l/git-cola.profile2
-rw-r--r--etc/profile-a-l/gitter.profile2
-rw-r--r--etc/profile-a-l/gl-117.profile1
-rw-r--r--etc/profile-a-l/glaxium.profile1
-rw-r--r--etc/profile-a-l/gmpc.profile2
-rw-r--r--etc/profile-a-l/gnome-calendar.profile2
-rw-r--r--etc/profile-a-l/gnome-chess.profile2
-rw-r--r--etc/profile-a-l/gnome-clocks.profile2
-rw-r--r--etc/profile-a-l/gnome-hexgl.profile2
-rw-r--r--etc/profile-a-l/gnome-latex.profile2
-rw-r--r--etc/profile-a-l/gnome-logs.profile2
-rw-r--r--etc/profile-a-l/gnome-music.profile2
-rw-r--r--etc/profile-a-l/gnome-passwordsafe.profile2
-rw-r--r--etc/profile-a-l/gnome-pie.profile2
-rw-r--r--etc/profile-a-l/gnome-pomodoro.profile2
-rw-r--r--etc/profile-a-l/gnome-recipes.profile2
-rw-r--r--etc/profile-a-l/gnome-screenshot.profile2
-rw-r--r--etc/profile-a-l/gnome-sound-recorder.profile2
-rw-r--r--etc/profile-a-l/gnome-system-log.profile2
-rw-r--r--etc/profile-a-l/gnome-todo.profile2
-rw-r--r--etc/profile-a-l/gnome_games-common.profile2
-rw-r--r--etc/profile-a-l/gnote.profile2
-rw-r--r--etc/profile-a-l/gnubik.profile2
-rw-r--r--etc/profile-a-l/godot.profile2
-rw-r--r--etc/profile-a-l/goldendict.profile57
-rw-r--r--etc/profile-a-l/googler-common.profile2
-rw-r--r--etc/profile-a-l/gpicview.profile2
-rw-r--r--etc/profile-a-l/gpredict.profile2
-rw-r--r--etc/profile-a-l/gradio.profile2
-rw-r--r--etc/profile-a-l/gravity-beams-and-evaporating-stars.profile2
-rw-r--r--etc/profile-a-l/gtk-update-icon-cache.profile2
-rw-r--r--etc/profile-a-l/gwenview.profile3
-rw-r--r--etc/profile-a-l/hyperrogue.profile2
-rw-r--r--etc/profile-a-l/i2prouter.profile2
-rw-r--r--etc/profile-a-l/imv.profile57
-rw-r--r--etc/profile-a-l/inkscape.profile2
-rw-r--r--etc/profile-a-l/ipcalc.profile2
-rw-r--r--etc/profile-a-l/jerry.profile2
-rw-r--r--etc/profile-a-l/jumpnbump-menu.profile2
-rw-r--r--etc/profile-a-l/jumpnbump.profile3
-rw-r--r--etc/profile-a-l/kaffeine.profile1
-rw-r--r--etc/profile-a-l/kalgebra.profile2
-rw-r--r--etc/profile-a-l/kate.profile1
-rw-r--r--etc/profile-a-l/kazam.profile2
-rw-r--r--etc/profile-a-l/kcalc.profile3
-rw-r--r--etc/profile-a-l/kdiff3.profile4
-rw-r--r--etc/profile-a-l/keepassx.profile2
-rw-r--r--etc/profile-a-l/keepassxc.profile7
-rw-r--r--etc/profile-a-l/kget.profile1
-rw-r--r--etc/profile-a-l/kid3.profile2
-rw-r--r--etc/profile-a-l/kiwix-desktop.profile2
-rw-r--r--etc/profile-a-l/klavaro.profile2
-rw-r--r--etc/profile-a-l/kmail.profile1
-rw-r--r--etc/profile-a-l/konversation.profile1
-rw-r--r--etc/profile-a-l/ktorrent.profile1
-rw-r--r--etc/profile-a-l/ktouch.profile2
-rw-r--r--etc/profile-a-l/kube.profile2
-rw-r--r--etc/profile-a-l/kwin_x11.profile3
-rw-r--r--etc/profile-a-l/kwrite.profile3
-rw-r--r--etc/profile-a-l/libreoffice.profile1
-rw-r--r--etc/profile-a-l/links-common.profile4
-rw-r--r--etc/profile-a-l/lollypop.profile2
-rw-r--r--etc/profile-a-l/lyx.profile2
-rw-r--r--etc/profile-m-z/QOwnNotes.profile2
-rw-r--r--etc/profile-m-z/Viber.profile2
-rw-r--r--etc/profile-m-z/Xvfb.profile2
-rw-r--r--etc/profile-m-z/magicor.profile2
-rw-r--r--etc/profile-m-z/make.profile13
-rw-r--r--etc/profile-m-z/man.profile2
-rw-r--r--etc/profile-m-z/masterpdfeditor.profile2
-rw-r--r--etc/profile-m-z/mate-calc.profile2
-rw-r--r--etc/profile-m-z/mate-color-select.profile2
-rw-r--r--etc/profile-m-z/mate-dictionary.profile2
-rw-r--r--etc/profile-m-z/mcabber.profile2
-rw-r--r--etc/profile-m-z/mdr.profile2
-rw-r--r--etc/profile-m-z/mediainfo.profile2
-rw-r--r--etc/profile-m-z/menulibre.profile2
-rw-r--r--etc/profile-m-z/meson.profile14
-rw-r--r--etc/profile-m-z/microsoft-edge-beta.profile2
-rw-r--r--etc/profile-m-z/mindless.profile2
-rw-r--r--etc/profile-m-z/mirrormagic.profile2
-rw-r--r--etc/profile-m-z/mocp.profile2
-rw-r--r--etc/profile-m-z/mp3splt-gtk.profile2
-rw-r--r--etc/profile-m-z/mp3splt.profile2
-rw-r--r--etc/profile-m-z/mpDris2.profile2
-rw-r--r--etc/profile-m-z/mpv.profile4
-rw-r--r--etc/profile-m-z/mrrescue.profile3
-rw-r--r--etc/profile-m-z/ms-office.profile2
-rw-r--r--etc/profile-m-z/mupdf-x11-curl.profile2
-rw-r--r--etc/profile-m-z/musixmatch.profile4
-rw-r--r--etc/profile-m-z/mutt.profile2
-rw-r--r--etc/profile-m-z/mypaint.profile2
-rw-r--r--etc/profile-m-z/nano.profile2
-rw-r--r--etc/profile-m-z/neochat.profile2
-rw-r--r--etc/profile-m-z/neomutt.profile2
-rw-r--r--etc/profile-m-z/netactview.profile2
-rw-r--r--etc/profile-m-z/newsboat.profile2
-rw-r--r--etc/profile-m-z/newsflash.profile2
-rw-r--r--etc/profile-m-z/nextcloud.profile5
-rw-r--r--etc/profile-m-z/nheko.profile10
-rw-r--r--etc/profile-m-z/nitroshare.profile2
-rw-r--r--etc/profile-m-z/nomacs.profile2
-rw-r--r--etc/profile-m-z/noprofile.profile28
-rw-r--r--etc/profile-m-z/notify-send.profile2
-rw-r--r--etc/profile-m-z/nuclear.profile2
-rw-r--r--etc/profile-m-z/nyx.profile2
-rw-r--r--etc/profile-m-z/ocenaudio.profile2
-rw-r--r--etc/profile-m-z/odt2txt.profile2
-rw-r--r--etc/profile-m-z/okular.profile3
-rw-r--r--etc/profile-m-z/onboard.profile2
-rw-r--r--etc/profile-m-z/open-invaders.profile1
-rw-r--r--etc/profile-m-z/openarena.profile2
-rw-r--r--etc/profile-m-z/openclonk.profile1
-rw-r--r--etc/profile-m-z/pandoc.profile7
-rw-r--r--etc/profile-m-z/parole.profile2
-rw-r--r--etc/profile-m-z/pavucontrol.profile2
-rw-r--r--etc/profile-m-z/pdfchain.profile2
-rw-r--r--etc/profile-m-z/pdftotext.profile2
-rw-r--r--etc/profile-m-z/peek.profile2
-rw-r--r--etc/profile-m-z/photoflare.profile2
-rw-r--r--etc/profile-m-z/pingus.profile2
-rw-r--r--etc/profile-m-z/pip.profile18
-rw-r--r--etc/profile-m-z/pkglog.profile2
-rw-r--r--etc/profile-m-z/plv.profile2
-rw-r--r--etc/profile-m-z/pngquant.profile2
-rw-r--r--etc/profile-m-z/pragha.profile2
-rw-r--r--etc/profile-m-z/profanity.profile2
-rw-r--r--etc/profile-m-z/psi.profile2
-rw-r--r--etc/profile-m-z/qgis.profile2
-rw-r--r--etc/profile-m-z/qnapi.profile2
-rw-r--r--etc/profile-m-z/qrencode.profile2
-rw-r--r--etc/profile-m-z/qtox.profile2
-rw-r--r--etc/profile-m-z/regextester.profile2
-rw-r--r--etc/profile-m-z/retroarch.profile54
-rw-r--r--etc/profile-m-z/rsync-download_only.profile2
-rw-r--r--etc/profile-m-z/scorchwentbonkers.profile2
-rw-r--r--etc/profile-m-z/seahorse-adventures.profile2
-rw-r--r--etc/profile-m-z/seahorse-tool.profile2
-rw-r--r--etc/profile-m-z/seahorse.profile2
-rw-r--r--etc/profile-m-z/shotwell.profile2
-rw-r--r--etc/profile-m-z/slack.profile2
-rw-r--r--etc/profile-m-z/smuxi-frontend-gnome.profile2
-rw-r--r--etc/profile-m-z/softmaker-common.profile8
-rw-r--r--etc/profile-m-z/spectacle.profile4
-rw-r--r--etc/profile-m-z/spectral.profile8
-rw-r--r--etc/profile-m-z/spotify.profile2
-rw-r--r--etc/profile-m-z/sqlitebrowser.profile2
-rw-r--r--etc/profile-m-z/ssh-agent.profile1
-rw-r--r--etc/profile-m-z/ssh.profile1
-rw-r--r--etc/profile-m-z/standardnotes-desktop.profile2
-rw-r--r--etc/profile-m-z/straw-viewer.profile2
-rw-r--r--etc/profile-m-z/strawberry.profile2
-rw-r--r--etc/profile-m-z/subdownloader.profile2
-rw-r--r--etc/profile-m-z/supertux2.profile3
-rw-r--r--etc/profile-m-z/supertuxkart.profile2
-rw-r--r--etc/profile-m-z/surf.profile2
-rw-r--r--etc/profile-m-z/sway.profile2
-rw-r--r--etc/profile-m-z/sysprof.profile2
-rw-r--r--etc/profile-m-z/tar.profile2
-rw-r--r--etc/profile-m-z/teams-for-linux.profile2
-rw-r--r--etc/profile-m-z/teeworlds.profile1
-rw-r--r--etc/profile-m-z/telegram.profile6
-rw-r--r--etc/profile-m-z/tilp.profile2
-rw-r--r--etc/profile-m-z/tin.profile2
-rw-r--r--etc/profile-m-z/tor.profile2
-rw-r--r--etc/profile-m-z/torbrowser.profile26
-rw-r--r--etc/profile-m-z/torcs.profile1
-rw-r--r--etc/profile-m-z/transgui.profile2
-rw-r--r--etc/profile-m-z/transmission-cli.profile2
-rw-r--r--etc/profile-m-z/transmission-daemon.profile2
-rw-r--r--etc/profile-m-z/transmission-remote-gtk.profile2
-rw-r--r--etc/profile-m-z/transmission-remote.profile2
-rw-r--r--etc/profile-m-z/transmission-show.profile2
-rw-r--r--etc/profile-m-z/tremulous.profile5
-rw-r--r--etc/profile-m-z/trojita.profile2
-rw-r--r--etc/profile-m-z/twitch.profile2
-rw-r--r--etc/profile-m-z/unf.profile2
-rw-r--r--etc/profile-m-z/unrar.profile2
-rw-r--r--etc/profile-m-z/unzip.profile2
-rw-r--r--etc/profile-m-z/utox.profile2
-rw-r--r--etc/profile-m-z/uudeview.profile2
-rw-r--r--etc/profile-m-z/viewnior.profile2
-rw-r--r--etc/profile-m-z/virtualbox.profile2
-rw-r--r--etc/profile-m-z/vmware.profile2
-rw-r--r--etc/profile-m-z/vscodium.profile4
-rw-r--r--etc/profile-m-z/w3m.profile2
-rw-r--r--etc/profile-m-z/warmux.profile2
-rw-r--r--etc/profile-m-z/warsow.profile8
-rw-r--r--etc/profile-m-z/whalebird.profile2
-rw-r--r--etc/profile-m-z/whois.profile2
-rw-r--r--etc/profile-m-z/wire-desktop.profile2
-rw-r--r--etc/profile-m-z/wordwarvi.profile2
-rw-r--r--etc/profile-m-z/xbill.profile2
-rw-r--r--etc/profile-m-z/xfce4-mixer.profile2
-rw-r--r--etc/profile-m-z/xfce4-screenshooter.profile2
-rw-r--r--etc/profile-m-z/xiphos.profile2
-rw-r--r--etc/profile-m-z/xlinks.profile2
-rw-r--r--etc/profile-m-z/xlinks22
-rw-r--r--etc/profile-m-z/xmr-stak.profile2
-rw-r--r--etc/profile-m-z/xonotic.profile1
-rw-r--r--etc/profile-m-z/xournal.profile2
-rw-r--r--etc/profile-m-z/xreader.profile2
-rw-r--r--etc/profile-m-z/yelp.profile2
-rw-r--r--etc/profile-m-z/youtube-dl-gui.profile2
-rw-r--r--etc/profile-m-z/youtube-dl.profile2
-rw-r--r--etc/profile-m-z/youtube-viewer.profile2
-rw-r--r--etc/profile-m-z/youtube-viewers-common.profile2
-rw-r--r--etc/profile-m-z/youtube.profile2
-rw-r--r--etc/profile-m-z/youtubemusic-nativefier.profile2
-rw-r--r--etc/profile-m-z/yt-dlp.profile2
-rw-r--r--etc/profile-m-z/ytmdesktop.profile2
-rw-r--r--etc/profile-m-z/zulip.profile2
-rw-r--r--etc/templates/profile.template3
-rwxr-xr-xgcov.sh6
-rwxr-xr-xlinecnt.sh4
-rw-r--r--src/bash_completion/firejail.bash_completion.in8
-rw-r--r--src/fbuilder/build_fs.c11
-rw-r--r--src/fbuilder/build_home.c4
-rw-r--r--src/fbuilder/build_profile.c2
-rw-r--r--src/fcopy/main.c3
-rw-r--r--src/fids/fids.h2
-rw-r--r--src/firecfg/firecfg.config31
-rw-r--r--src/firejail/cgroup.c83
-rw-r--r--src/firejail/checkcfg.c2
-rw-r--r--src/firejail/chroot.c2
-rw-r--r--src/firejail/env.c7
-rw-r--r--src/firejail/firejail.h26
-rw-r--r--src/firejail/fs.c430
-rw-r--r--src/firejail/fs_bin.c45
-rw-r--r--src/firejail/fs_dev.c3
-rw-r--r--src/firejail/fs_home.c11
-rw-r--r--src/firejail/fs_hostname.c12
-rw-r--r--src/firejail/fs_lib.c47
-rw-r--r--src/firejail/fs_lib2.c6
-rw-r--r--src/firejail/fs_overlayfs.c470
-rw-r--r--src/firejail/fs_trace.c36
-rw-r--r--src/firejail/fs_var.c7
-rw-r--r--src/firejail/fs_whitelist.c59
-rw-r--r--src/firejail/ids.c2
-rw-r--r--src/firejail/join.c11
-rw-r--r--src/firejail/ls.c2
-rw-r--r--src/firejail/main.c18
-rw-r--r--src/firejail/mountinfo.c216
-rw-r--r--src/firejail/profile.c32
-rw-r--r--src/firejail/restrict_users.c1
-rw-r--r--src/firejail/run_symlink.c1
-rw-r--r--src/firejail/sandbox.c19
-rw-r--r--src/firejail/selinux.c21
-rw-r--r--src/firejail/util.c180
-rw-r--r--src/jailcheck/jailcheck.h2
-rw-r--r--src/jailcheck/noexec.c2
-rw-r--r--src/libtrace/libtrace.c14
-rw-r--r--src/man/firejail-profile.txt26
-rw-r--r--src/man/firejail.txt36
-rw-r--r--src/man/firemon.txt2
-rw-r--r--src/tools/profcleaner.c2
-rwxr-xr-xtest/environment/environment.sh7
-rwxr-xr-xtest/environment/rlimit-join.exp36
-rwxr-xr-xtest/utils/build.exp2
384 files changed, 2409 insertions, 1588 deletions
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..6b329f917
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
/etc/inc/*.inc linguist-language=text
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 0f13afc51..eb485b8a2 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -7,6 +7,13 @@ assignees: ''
7 7
8--- 8---
9 9
10<!--
11See the following links for help with formatting:
12
13https://guides.github.com/features/mastering-markdown/
14https://docs.github.com/en/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
15-->
16
10### Description 17### Description
11 18
12_Describe the bug_ 19_Describe the bug_
@@ -15,7 +22,7 @@ _Describe the bug_
15 22
16_Steps to reproduce the behavior_ 23_Steps to reproduce the behavior_
17 24
181. Run in bash `LANG=C firejail PROGRAM` (`LANG=C` to get English messages that can be understood by everybody) 251. Run in bash `LC_ALL=C firejail PROGRAM` (`LC_ALL=C` to get a consistent output in English that can be understood by everybody)
192. Click on '....' 262. Click on '....'
203. Scroll down to '....' 273. Scroll down to '....'
214. See error `ERROR` 284. See error `ERROR`
@@ -30,7 +37,7 @@ _What actually happened_
30 37
31### Behavior without a profile 38### Behavior without a profile
32 39
33_What changed calling `firejail --noprofile /path/to/program` in a terminal?_ 40_What changed calling `LC_ALL=C firejail --noprofile /path/to/program` in a terminal?_
34 41
35### Additional context 42### Additional context
36 43
@@ -44,6 +51,12 @@ _Any other detail that may help to understand/debug the problem_
44 51
45### Checklist 52### Checklist
46 53
54<!--
55Note: Items are checked with an "x", like so:
56
57- [x] This is a checked item.
58-->
59
47- [ ] The issues is caused by firejail (i.e. running the program by path (e.g. `/usr/bin/vlc`) "fixes" it). 60- [ ] The issues is caused by firejail (i.e. running the program by path (e.g. `/usr/bin/vlc`) "fixes" it).
48- [ ] I can reproduce the issue without custom modifications (e.g. globals.local). 61- [ ] I can reproduce the issue without custom modifications (e.g. globals.local).
49- [ ] The program has a profile. (If not, request one in `https://github.com/netblue30/firejail/issues/1139`) 62- [ ] The program has a profile. (If not, request one in `https://github.com/netblue30/firejail/issues/1139`)
@@ -55,7 +68,7 @@ _Any other detail that may help to understand/debug the problem_
55### Log 68### Log
56 69
57<details> 70<details>
58<summary>Output of <code>firejail /path/to/program</code></summary> 71<summary>Output of <code>LC_ALL=C firejail /path/to/program</code></summary>
59<p> 72<p>
60 73
61``` 74```
@@ -66,7 +79,7 @@ output goes here
66</details> 79</details>
67 80
68<details> 81<details>
69<summary>Output of <code>firejail --debug /path/to/program</code></summary> 82<summary>Output of <code>LC_ALL=C firejail --debug /path/to/program</code></summary>
70<p> 83<p>
71 84
72``` 85```
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 57ac2e9c4..7cb92a938 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,4 +1,3 @@
1
2If your PR isn't about profiles or you have no idea how to do one of these, skip the following and go ahead with this PR. 1If your PR isn't about profiles or you have no idea how to do one of these, skip the following and go ahead with this PR.
3 2
4If you submit a PR for new profiles or changing profiles, please do the following: 3If you submit a PR for new profiles or changing profiles, please do the following:
diff --git a/.github/workflows/profile-checks.yml b/.github/workflows/profile-checks.yml
new file mode 100644
index 000000000..951a8b8cf
--- /dev/null
+++ b/.github/workflows/profile-checks.yml
@@ -0,0 +1,31 @@
1name: Profile Checks
2
3on:
4 push:
5 branches: [ master ]
6 paths:
7 - 'etc/**'
8 - 'ci/check/profiles/**'
9 - 'src/firecfg/firecfg.config'
10 - 'contrib/sort.py'
11 pull_request:
12 branches: [ master ]
13 paths:
14 - 'etc/**'
15 - 'ci/check/profiles/**'
16 - 'src/firecfg/firecfg.config'
17 - 'contrib/sort.py'
18
19jobs:
20 profile-checks:
21 runs-on: ubuntu-20.04
22 steps:
23 - uses: actions/checkout@v2
24 - name: sort.py
25 run: ./ci/check/profiles/sort.py etc/inc/*.inc etc/{profile-a-l,profile-m-z}/*.profile
26 - name: private-etc-always-required.sh
27 run: ./ci/check/profiles/private-etc-always-required.sh etc/inc/*.inc etc/{profile-a-l,profile-m-z}/*.profile
28 - name: sort-disable-programs.sh
29 run: ./ci/check/profiles/sort-disable-programs.sh etc/inc/disable-programs.inc
30 - name: sort-firecfg.config.sh
31 run: ./ci/check/profiles/sort-firecfg.config.sh src/firecfg/firecfg.config
diff --git a/.github/workflows/sort.yml b/.github/workflows/sort.yml
deleted file mode 100644
index f3ded0f22..000000000
--- a/.github/workflows/sort.yml
+++ /dev/null
@@ -1,22 +0,0 @@
1name: sort.py
2
3on:
4 push:
5 branches: [ master ]
6 paths:
7 - 'etc/**'
8 - 'contrib/sort.py'
9 pull_request:
10 branches: [ master ]
11 paths:
12 - 'etc/**'
13 - 'contrib/sort.py'
14
15jobs:
16 profile-sort:
17 runs-on: ubuntu-20.04
18 steps:
19 - uses: actions/checkout@v2
20 - name: check profiles
21 run: ./contrib/sort.py etc/*/{*.inc,*.profile}
22
diff --git a/COPYING b/COPYING
index b6e1c33e0..d159169d1 100644
--- a/COPYING
+++ b/COPYING
@@ -1,12 +1,12 @@
1 GNU GENERAL PUBLIC LICENSE 1 GNU GENERAL PUBLIC LICENSE
2 Version 2, June 1991 2 Version 2, June 1991
3 3
4 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 4 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 5 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 Everyone is permitted to copy and distribute verbatim copies 6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed. 7 of this license document, but changing it is not allowed.
8 8
9 Preamble 9 Preamble
10 10
11 The licenses for most software are designed to take away your 11 The licenses for most software are designed to take away your
12freedom to share and change it. By contrast, the GNU General Public 12freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
15General Public License applies to most of the Free Software 15General Public License applies to most of the Free Software
16Foundation's software and to any other program whose authors commit to 16Foundation's software and to any other program whose authors commit to
17using it. (Some other Free Software Foundation software is covered by 17using it. (Some other Free Software Foundation software is covered by
18the GNU Library General Public License instead.) You can apply it to 18the GNU Lesser General Public License instead.) You can apply it to
19your programs, too. 19your programs, too.
20 20
21 When we speak of free software, we are referring to freedom, not 21 When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
55 55
56 The precise terms and conditions for copying, distribution and 56 The precise terms and conditions for copying, distribution and
57modification follow. 57modification follow.
58 58
59 GNU GENERAL PUBLIC LICENSE 59 GNU GENERAL PUBLIC LICENSE
60 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 60 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61 61
62 0. This License applies to any program or other work which contains 62 0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
110 License. (Exception: if the Program itself is interactive but 110 License. (Exception: if the Program itself is interactive but
111 does not normally print such an announcement, your work based on 111 does not normally print such an announcement, your work based on
112 the Program is not required to print an announcement.) 112 the Program is not required to print an announcement.)
113 113
114These requirements apply to the modified work as a whole. If 114These requirements apply to the modified work as a whole. If
115identifiable sections of that work are not derived from the Program, 115identifiable sections of that work are not derived from the Program,
116and can be reasonably considered independent and separate works in 116and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
168access to copy the source code from the same place counts as 168access to copy the source code from the same place counts as
169distribution of the source code, even though third parties are not 169distribution of the source code, even though third parties are not
170compelled to copy the source along with the object code. 170compelled to copy the source along with the object code.
171 171
172 4. You may not copy, modify, sublicense, or distribute the Program 172 4. You may not copy, modify, sublicense, or distribute the Program
173except as expressly provided under this License. Any attempt 173except as expressly provided under this License. Any attempt
174otherwise to copy, modify, sublicense or distribute the Program is 174otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
225 225
226This section is intended to make thoroughly clear what is believed to 226This section is intended to make thoroughly clear what is believed to
227be a consequence of the rest of this License. 227be a consequence of the rest of this License.
228 228
229 8. If the distribution and/or use of the Program is restricted in 229 8. If the distribution and/or use of the Program is restricted in
230certain countries either by patents or by copyrighted interfaces, the 230certain countries either by patents or by copyrighted interfaces, the
231original copyright holder who places the Program under this License 231original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
255of preserving the free status of all derivatives of our free software and 255of preserving the free status of all derivatives of our free software and
256of promoting the sharing and reuse of software generally. 256of promoting the sharing and reuse of software generally.
257 257
258 NO WARRANTY 258 NO WARRANTY
259 259
260 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 260 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 261FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,4 +277,63 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 277PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278POSSIBILITY OF SUCH DAMAGES. 278POSSIBILITY OF SUCH DAMAGES.
279 279
280 END OF TERMS AND CONDITIONS 280 END OF TERMS AND CONDITIONS
281
282 How to Apply These Terms to Your New Programs
283
284 If you develop a new program, and you want it to be of the greatest
285possible use to the public, the best way to achieve this is to make it
286free software which everyone can redistribute and change under these terms.
287
288 To do so, attach the following notices to the program. It is safest
289to attach them to the start of each source file to most effectively
290convey the exclusion of warranty; and each file should have at least
291the "copyright" line and a pointer to where the full notice is found.
292
293 <one line to give the program's name and a brief idea of what it does.>
294 Copyright (C) <year> <name of author>
295
296 This program is free software; you can redistribute it and/or modify
297 it under the terms of the GNU General Public License as published by
298 the Free Software Foundation; either version 2 of the License, or
299 (at your option) any later version.
300
301 This program is distributed in the hope that it will be useful,
302 but WITHOUT ANY WARRANTY; without even the implied warranty of
303 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 GNU General Public License for more details.
305
306 You should have received a copy of the GNU General Public License along
307 with this program; if not, write to the Free Software Foundation, Inc.,
308 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
310Also add information on how to contact you by electronic and paper mail.
311
312If the program is interactive, make it output a short notice like this
313when it starts in an interactive mode:
314
315 Gnomovision version 69, Copyright (C) year name of author
316 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 This is free software, and you are welcome to redistribute it
318 under certain conditions; type `show c' for details.
319
320The hypothetical commands `show w' and `show c' should show the appropriate
321parts of the General Public License. Of course, the commands you use may
322be called something other than `show w' and `show c'; they could even be
323mouse-clicks or menu items--whatever suits your program.
324
325You should also get your employer (if you work as a programmer) or your
326school, if any, to sign a "copyright disclaimer" for the program, if
327necessary. Here is a sample; alter the names:
328
329 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
332 <signature of Ty Coon>, 1 April 1989
333 Ty Coon, President of Vice
334
335This General Public License does not permit incorporating your program into
336proprietary programs. If your program is a subroutine library, you may
337consider it more useful to permit linking proprietary applications with the
338library. If this is what you want to do, use the GNU Lesser General
339Public License instead of this License.
diff --git a/Makefile.in b/Makefile.in
index c94d8c7a4..11193122d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -144,9 +144,13 @@ ifeq ($(HAVE_APPARMOR),-DHAVE_APPARMOR)
144 # install apparmor profile 144 # install apparmor profile
145 sh -c "if [ ! -d $(DESTDIR)/$(sysconfdir)/apparmor.d ]; then install -d -m 755 $(DESTDIR)/$(sysconfdir)/apparmor.d; fi;" 145 sh -c "if [ ! -d $(DESTDIR)/$(sysconfdir)/apparmor.d ]; then install -d -m 755 $(DESTDIR)/$(sysconfdir)/apparmor.d; fi;"
146 install -m 0644 etc/apparmor/firejail-default $(DESTDIR)$(sysconfdir)/apparmor.d 146 install -m 0644 etc/apparmor/firejail-default $(DESTDIR)$(sysconfdir)/apparmor.d
147 sh -c "if [ ! -d $(DESTDIR)/$(sysconfdir)/apparmor.d/local ]; then install -d -m 755 $(DESTDIR)/$(sysconfdir)/apparmor.d/local; fi;"
148 # install apparmor profile customization file 147 # install apparmor profile customization file
148 sh -c "if [ ! -d $(DESTDIR)/$(sysconfdir)/apparmor.d/local ]; then install -d -m 755 $(DESTDIR)/$(sysconfdir)/apparmor.d/local; fi;"
149 sh -c "if [ ! -f $(DESTDIR)/$(sysconfdir)/apparmor.d/local/firejail-default ]; then install -c -m 0644 etc/apparmor/firejail-local $(DESTDIR)/$(sysconfdir)/apparmor.d/local/firejail-default; fi;" 149 sh -c "if [ ! -f $(DESTDIR)/$(sysconfdir)/apparmor.d/local/firejail-default ]; then install -c -m 0644 etc/apparmor/firejail-local $(DESTDIR)/$(sysconfdir)/apparmor.d/local/firejail-default; fi;"
150 # install apparmor base abstraction drop-in
151 sh -c "if [ ! -d $(DESTDIR)/$(sysconfdir)/apparmor.d/abstractions ]; then install -d -m 755 $(DESTDIR)/$(sysconfdir)/apparmor.d/abstractions; fi;"
152 sh -c "if [ ! -d $(DESTDIR)/$(sysconfdir)/apparmor.d/abstractions/base.d ]; then install -d -m 755 $(DESTDIR)/$(sysconfdir)/apparmor.d/abstractions/base.d; fi;"
153 install -m 0644 etc/apparmor/firejail-base $(DESTDIR)$(sysconfdir)/apparmor.d/abstractions/base.d
150endif 154endif
151ifneq ($(HAVE_MAN),no) 155ifneq ($(HAVE_MAN),no)
152 # man pages 156 # man pages
diff --git a/README b/README
index a15e493ff..6a260a330 100644
--- a/README
+++ b/README
@@ -1,13 +1,13 @@
1Firejail is a SUID sandbox program that reduces the risk of security 1Firejail is a SUID sandbox program that reduces the risk of security
2breaches by restricting the running environment of untrusted applications 2breaches by restricting the running environment of untrusted applications
3using Linux namespaces and seccomp-bpf. It includes sandbox profiles for 3using Linux namespaces and seccomp-bpf. It includes sandbox profiles for
4Iceweasel/Mozilla Firefox, Chromium, Midori, Opera, Evince, Transmission, 4Iceweasel/Mozilla Firefox, Chromium, Midori, Opera, Evince, Transmission,
5VLC, Audacious, Clementine, Rhythmbox, Totem, Deluge, qBittorrent. 5VLC, Audacious, Clementine, Rhythmbox, Totem, Deluge, qBittorrent.
6DeaDBeeF, Dropbox, Empathy, FileZilla, IceCat, Thunderbird/Icedove, 6DeaDBeeF, Dropbox, Empathy, FileZilla, IceCat, Thunderbird/Icedove,
7Pidgin, Quassel, and XChat. 7Pidgin, Quassel, and XChat.
8 8
9Firejail also expands the restricted shell facility found in bash by adding 9Firejail also expands the restricted shell facility found in bash by adding
10Linux namespace support. It supports sandboxing specific users upon login. 10Linux namespace support. It supports sandboxing specific users upon login.
11 11
12Download: https://sourceforge.net/projects/firejail/files/ 12Download: https://sourceforge.net/projects/firejail/files/
13Build and install: ./configure && make && sudo make install 13Build and install: ./configure && make && sudo make install
@@ -68,11 +68,14 @@ Firejail Authors (alphabetical order)
68 - fix flameshot raw screenshots 68 - fix flameshot raw screenshots
691dnrr (https://github.com/1dnrr) 691dnrr (https://github.com/1dnrr)
70 - add pybitmessage profile 70 - add pybitmessage profile
71a1346054 (https://github.com/a1346054)
72 - add missing final newlines in various files
71Ádler Jonas Gross (https://github.com/adgross) 73Ádler Jonas Gross (https://github.com/adgross)
72 - AppArmor fix 74 - AppArmor fix
73Adrian L. Shaw (https://github.com/adrianlshaw) 75Adrian L. Shaw (https://github.com/adrianlshaw)
74 - add profanity profile 76 - add profanity profile
75 - add barrirer profile 77 - add barrirer profile
78 - add profile for Beyond All Reason
76Aidan Gauland (https://github.com/aidalgol) 79Aidan Gauland (https://github.com/aidalgol)
77 - added electron, riot-web and npm profiles 80 - added electron, riot-web and npm profiles
78 - whitelist Bohemia Interactive config dir for Steam 81 - whitelist Bohemia Interactive config dir for Steam
@@ -221,6 +224,8 @@ Carlo Abelli (https://github.com/carloabelli)
221 - fixed simple-scan 224 - fixed simple-scan
222Cat (https://github.com/ecat3) 225Cat (https://github.com/ecat3)
223 - prevent tmux connecting to an existing session 226 - prevent tmux connecting to an existing session
227cayday (https://github.com/caydey)
228 - added ~/Private blacklist in disable-common.inc
224Christian Pinedo (https://github.com/chrpinedo) 229Christian Pinedo (https://github.com/chrpinedo)
225 - added nicotine profile 230 - added nicotine profile
226 - allow python3 in totem profile 231 - allow python3 in totem profile
@@ -246,6 +251,9 @@ crass (https://github.com/crass)
246 - extract_command_name fixes 251 - extract_command_name fixes
247 - update appimage size calculation to newest code from libappimage 252 - update appimage size calculation to newest code from libappimage
248 - firejail should look for processes with names exactly named 253 - firejail should look for processes with names exactly named
254croket (https://github.com/crocket)
255 - fix librewolf profile
256 - added profiles for imv, retroarch, and torbrowser
249curiosity-seeker (https://github.com/curiosity-seeker - old) 257curiosity-seeker (https://github.com/curiosity-seeker - old)
250curiosityseeker (https://github.com/curiosityseeker - new) 258curiosityseeker (https://github.com/curiosityseeker - new)
251 - tightening unbound and dnscrypt-proxy profiles 259 - tightening unbound and dnscrypt-proxy profiles
@@ -304,6 +312,8 @@ DiGitHubCap (https://github.com/DiGitHubCap)
304 - fix qt5ct colour schemes and QSS 312 - fix qt5ct colour schemes and QSS
305Disconnect3d (https://github.com/disconnect3d) 313Disconnect3d (https://github.com/disconnect3d)
306 - code cleanup 314 - code cleanup
315dm9pZCAq (https://github.com/dm9pZCAq)
316 - fix for compilation under musl
307dmfreemon (https://github.com/dmfreemon) 317dmfreemon (https://github.com/dmfreemon)
308 - add sandbox name or name of private directory to the window title when xpra is used 318 - add sandbox name or name of private directory to the window title when xpra is used
309 - handle malloc() failures; use gnu_basename() instead of basenaem() 319 - handle malloc() failures; use gnu_basename() instead of basenaem()
@@ -454,7 +464,7 @@ hawkey116477 (https://github.com/hawkeye116477)
454Helmut Grohne (https://github.com/helmutg) 464Helmut Grohne (https://github.com/helmutg)
455 - compiler support in the build system - Debian bug #869707 465 - compiler support in the build system - Debian bug #869707
456hhzek0014 (https://github.com/hhzek0014) 466hhzek0014 (https://github.com/hhzek0014)
457 - updated bibletime.profile 467 - updated bibletime.profile
458hlein (https://github.com/hlein) 468hlein (https://github.com/hlein)
459 - strip out \r's from jail prober 469 - strip out \r's from jail prober
460Holger Heinz (https://github.com/hheinz) 470Holger Heinz (https://github.com/hheinz)
@@ -490,6 +500,10 @@ James Elford (https://github.com/jelford)
490 - removed shell none from ssh-agent configuration, fixing the infinite loop 500 - removed shell none from ssh-agent configuration, fixing the infinite loop
491 - added gcloud profile 501 - added gcloud profile
492 - blacklist sensitive cloud provider files in disable-common 502 - blacklist sensitive cloud provider files in disable-common
503Jan-Niclas (https://github.com/0x6a61)
504 - moved rules from firefox-common.profile to firefox.profile
505 - blacklist /*firefox* except for firefox itself
506 - fix Firefox 'Profile not found' - whitelist /run/user/xxx/firefox
493Jean Lucas (https://github.com/flacks) 507Jean Lucas (https://github.com/flacks)
494 - fix Discord profile 508 - fix Discord profile
495 - add AnyDesk profile 509 - add AnyDesk profile
@@ -526,6 +540,7 @@ John Mullee (https://github.com/jmullee)
526Jonas Heinrich (https://github.com/onny) 540Jonas Heinrich (https://github.com/onny)
527 - added signal-desktop profile 541 - added signal-desktop profile
528 - fixed franz profile 542 - fixed franz profile
543 - remove /etc/hosts is_link check for NixOS
529Jose Riha (https://github.com/jose1711) 544Jose Riha (https://github.com/jose1711)
530 - added meteo-qt profile 545 - added meteo-qt profile
531 - created qgis, links, xlinks profiles 546 - created qgis, links, xlinks profiles
@@ -536,6 +551,8 @@ Jose Riha (https://github.com/jose1711)
536 - Add profile for udiskie 551 - Add profile for udiskie
537 - fix udiskie.profile 552 - fix udiskie.profile
538 - improve hints for allowing browser access to Gnome extensions connector 553 - improve hints for allowing browser access to Gnome extensions connector
554 - fix warshow, jumpnbump, tremulous, blobwars profile fixes
555 - drop noinput for games with gampad/joystick support
539jrabe (https://github.com/jrabe) 556jrabe (https://github.com/jrabe)
540 - disallow access to kdbx files 557 - disallow access to kdbx files
541 - Epiphany profile 558 - Epiphany profile
@@ -568,7 +585,7 @@ Kishore96in (https://github.com/Kishore96in)
568 - added falkon profile 585 - added falkon profile
569 - kxmlgui fixes 586 - kxmlgui fixes
570 - okular profile fixes 587 - okular profile fixes
571 - jitsi-meet-desktop profile 588 - jitsi-meet-desktop profile
572 - konversatin profile fix 589 - konversatin profile fix
573 - added Neochat profile 590 - added Neochat profile
574 - added whitelist-1793-workaround.inc 591 - added whitelist-1793-workaround.inc
@@ -595,6 +612,9 @@ Laurent Declercq (https://github.com/nuxwin)
595 - fixed test for shell interpreter in chroots 612 - fixed test for shell interpreter in chroots
596LaurentGH (https://github.com/LaurentGH) 613LaurentGH (https://github.com/LaurentGH)
597 - allow private-bin parameters to be absolute paths 614 - allow private-bin parameters to be absolute paths
615lecso7 (https://github.com/lecso7)
616 - added goldendict profile
617 - allow evince to read .cbz file format
598Loïc Damien (https://github.com/dzamlo) 618Loïc Damien (https://github.com/dzamlo)
599 - small fixes 619 - small fixes
600Liorst4 (https://github.com/Liorst4) 620Liorst4 (https://github.com/Liorst4)
@@ -627,6 +647,8 @@ Martin Carpenter (https://github.com/mcarpenter)
627Martin Dosch (spam-debian@mdosch.de) 647Martin Dosch (spam-debian@mdosch.de)
628 - support for gnome-shell integration addon in Firefox 648 - support for gnome-shell integration addon in Firefox
629 (Bug-Debian: https://bugs.debian.org/872720) 649 (Bug-Debian: https://bugs.debian.org/872720)
650Martynas Janonis (https://github.com/mjanonis)
651 - update wrc for Arch Linux
630Matt Parnell (https://github.com/ilikenwf) 652Matt Parnell (https://github.com/ilikenwf)
631 - whitelisting for core firefox related functionality 653 - whitelisting for core firefox related functionality
632Mattias Wadman (https://github.com/wader) 654Mattias Wadman (https://github.com/wader)
@@ -699,7 +721,7 @@ Ondra Nekola (https://github.com/satai)
699OndrejMalek (https://github.com/OndrejMalek) 721OndrejMalek (https://github.com/OndrejMalek)
700 - various manpage fixes 722 - various manpage fixes
701Ondřej Nový (https://github.com/onovy) 723Ondřej Nový (https://github.com/onovy)
702 - allow video for Signal profile 724 - allow video for Signal profile
703 - added Mattermost desktop profile 725 - added Mattermost desktop profile
704 - hardened Zoom profile 726 - hardened Zoom profile
705 - hardened Signal desktop profile 727 - hardened Signal desktop profile
@@ -716,7 +738,7 @@ Patrick Toomey (https://sourceforge.net/u/ptoomey/profile/)
716Paul Moore <pmoore@redhat.com> 738Paul Moore <pmoore@redhat.com>
717 -src/fsec-print/print.c extracted from libseccomp software package 739 -src/fsec-print/print.c extracted from libseccomp software package
718Paupiah Yash (https://github.com/CaffeinatedStud) 740Paupiah Yash (https://github.com/CaffeinatedStud)
719 - gzip profile 741 - gzip profile
720Pawel (https://github.com/grimskies) 742Pawel (https://github.com/grimskies)
721 - make --join return exit code of the invoked program 743 - make --join return exit code of the invoked program
722Peter Millerchip (https://github.com/pmillerchip) 744Peter Millerchip (https://github.com/pmillerchip)
@@ -944,7 +966,7 @@ SYN-cook (https://github.com/SYN-cook)
944 - gnome-calculator changes 966 - gnome-calculator changes
945startx2017 (https://github.com/startx2017) 967startx2017 (https://github.com/startx2017)
946 - syscall list update 968 - syscall list update
947 - updated default seccomp filters - added bpf, clock_settime, personality, process_vm_writev, query_module, 969 - updated default seccomp filters - added bpf, clock_settime, personality, process_vm_writev, query_module,
948 settimeofday, stime, umount, userfaultfd, ustat, vm86, and vm86old 970 settimeofday, stime, umount, userfaultfd, ustat, vm86, and vm86old
949 - enable/disable join support in /etc/firejail/firejail.config 971 - enable/disable join support in /etc/firejail/firejail.config
950 - firecfg fix: create ~/.local/share/applications directory if it doesn't exist 972 - firecfg fix: create ~/.local/share/applications directory if it doesn't exist
@@ -995,10 +1017,11 @@ Topi Miettinen (https://github.com/topimiettinen)
995 - improve loading of seccomp filter and memory-deny-write-execute feature 1017 - improve loading of seccomp filter and memory-deny-write-execute feature
996 - private-lib feature 1018 - private-lib feature
997 - make --nodbus block also system D-Bus socket 1019 - make --nodbus block also system D-Bus socket
998Ted Robertson (https://github.com/tredondo) 1020Ted Robertson (https://github.com/tredondo)
999 - webstorm profile fixes 1021 - webstorm profile fixes
1000 - added bcompare profile 1022 - added bcompare profile
1001 - various documentation fixes 1023 - various documentation fixes
1024 - blacklist Exodus wallet
1002user1024 (user1024@tut.by) 1025user1024 (user1024@tut.by)
1003 - electron profile whitelisting 1026 - electron profile whitelisting
1004 - fixed Rocket.Chat profile 1027 - fixed Rocket.Chat profile
@@ -1054,7 +1077,7 @@ vismir2 (https://github.com/vismir2)
1054 - feh, ranger, 7z, keepass, keepassx and zathura profiles 1077 - feh, ranger, 7z, keepass, keepassx and zathura profiles
1055 - claws-mail, mutt, git, emacs, vim profiles 1078 - claws-mail, mutt, git, emacs, vim profiles
1056 - lots of profile fixes 1079 - lots of profile fixes
1057 - support for truecrypt and zuluCrypt 1080 - support for truecrypt and zuluCrypt
1058viq (https://github.com/viq) 1081viq (https://github.com/viq)
1059 - discord-canary profile 1082 - discord-canary profile
1060Vladimir Gorelov (https://github.com/larkvirtual) 1083Vladimir Gorelov (https://github.com/larkvirtual)
@@ -1062,11 +1085,12 @@ Vladimir Gorelov (https://github.com/larkvirtual)
1062Vladimir Schowalter (https://github.com/VladimirSchowalter20) 1085Vladimir Schowalter (https://github.com/VladimirSchowalter20)
1063 - apparmor profile enhancements 1086 - apparmor profile enhancements
1064 - various KDE profile enhancements 1087 - various KDE profile enhancements
1065 read-only kde5 services directory 1088 - read-only kde5 services directory
1066Vladislav Nepogodin (https://github.com/vnepogodin) 1089Vladislav Nepogodin (https://github.com/vnepogodin)
1067 - added Librewolf profiles 1090 - added Librewolf profiles
1068 - added Sway profile 1091 - added Sway profile
1069 - fix CLion profile 1092 - fix CLion profile
1093 - fixes for disable-programs.inc
1070xee5ch (https://github.com/xee5ch) 1094xee5ch (https://github.com/xee5ch)
1071 - skypeforlinux profile 1095 - skypeforlinux profile
1072Ypnose (https://github.com/Ypnose) 1096Ypnose (https://github.com/Ypnose)
diff --git a/README.md b/README.md
index 0623d9463..c58ef84c0 100644
--- a/README.md
+++ b/README.md
@@ -22,43 +22,23 @@ implemented directly in Linux kernel and available on any Linux computer.
22<table><tr> 22<table><tr>
23 23
24<td> 24<td>
25<a href="http://www.youtube.com/watch?feature=player_embedded&v=8jfXL0ePV7U 25<a href="https://www.brighteon.com/1928415c-2bce-40b2-a81f-7861a3734913" target="_blank">
26" target="_blank"><img src="http://img.youtube.com/vi/8jfXL0ePV7U/0.jpg" 26<img src="https://video.brighteon.com/file/Brighteon-staging/thumbnail/682ae17c-3fd8-4813-9c4e-6917c7cd2a5c.0000001.jpg"
27alt="Firejail Introduction" width="240" height="180" border="10" /><br/>Firejail Intro</a> 27alt="Introduction" width="240" height="142" border="10" /><br/>Introduction</a>
28</td> 28</td>
29 29
30<td> 30<td>
31<a href="http://www.youtube.com/watch?feature=player_embedded&v=J1ZsXrpAgBU 31<a href="https://www.brighteon.com/c20c32ac-1953-438f-8640-a414dcb318d6" target="_blank">
32" target="_blank"><img src="http://img.youtube.com/vi/J1ZsXrpAgBU/0.jpg" 32<img src="https://photos.brighteon.com/thumbnail/ecd8b0ca-7564-4993-a676-bbe4aa21cffc"
33alt="Firejail Demo" width="240" height="180" border="10" /><br/>Firejail Demo</a> 33alt="Technology" width="240" height="142" border="10" /><br/>Technology</a>
34</td> 34</td>
35 35
36<td> 36<td>
37<a href="http://www.youtube.com/watch?feature=player_embedded&v=EyEz65RYfw4 37<a href="https://www.brighteon.com/94ae1731-2352-4cda-bb48-7cc7a6ad32f8" target="_blank">
38" target="_blank"><img src="http://img.youtube.com/vi/EyEz65RYfw4/0.jpg" 38<img src="https://photos.brighteon.com/thumbnail/5c90254c-61f3-4927-ac57-ae279dc543cf"
39alt="Debian Install" width="240" height="180" border="10" /><br/>Debian Install</a> 39alt="Deep Dive" width="240" height="142" border="10" /><br/>Deep Dive</a>
40</td> 40</td>
41 41
42
43</tr><tr>
44<td>
45<a href="http://www.youtube.com/watch?feature=player_embedded&v=Uy2ZTHc4s0w
46" target="_blank"><img src="http://img.youtube.com/vi/Uy2ZTHc4s0w/0.jpg"
47alt="Arch Linux Install" width="240" height="180" border="10" /><br/>Arch Linux Install</a>
48
49</td>
50<td>
51<a href="http://www.youtube.com/watch?feature=player_embedded&v=xuMxRx0zSfQ
52" target="_blank"><img src="http://img.youtube.com/vi/xuMxRx0zSfQ/0.jpg"
53alt="Disable Network Access" width="240" height="180" border="10" /><br/>Disable Network Access</a>
54
55</td>
56<td>
57<a href="http://www.youtube.com/watch?feature=player_embedded&v=N-Mso2bSr3o
58" target="_blank"><img src="http://img.youtube.com/vi/N-Mso2bSr3o/0.jpg"
59alt="Firejail Security Deep Dive" width="240" height="180" border="10" /><br/>Firejail Security Deep Dive</a>
60
61</td>
62</tr></table> 42</tr></table>
63 43
64Project webpage: https://firejail.wordpress.com/ 44Project webpage: https://firejail.wordpress.com/
@@ -116,7 +96,7 @@ https://unparalleled.eu/blog/2021/20210208-rigged-race-against-firejail-for-loca
116 96
117Try installing Firejail from your system packages first. Firejail is included in Alpine, ALT Linux, Arch, Artix, Chakra, Debian, Deepin, Devuan, Fedora, Gentoo, Manjaro, Mint, NixOS, Parabola, Parrot, PCLinuxOS, ROSA, Solus, Slackware/SlackBuilds, Trisquel, Ubuntu, Void and possibly others. 97Try installing Firejail from your system packages first. Firejail is included in Alpine, ALT Linux, Arch, Artix, Chakra, Debian, Deepin, Devuan, Fedora, Gentoo, Manjaro, Mint, NixOS, Parabola, Parrot, PCLinuxOS, ROSA, Solus, Slackware/SlackBuilds, Trisquel, Ubuntu, Void and possibly others.
118 98
119The firejail 0.9.52-LTS version is deprecated. On Ubuntu 18.04 LTS users are advised to use the [PPA](https://launchpad.net/~deki/+archive/ubuntu/firejail). On Debian buster we recommend to use the [backports](https://packages.debian.org/buster-backports/firejail) package. 99The firejail 0.9.52-LTS version is deprecated. On Ubuntu 18.04 LTS users are advised to use the [PPA](https://launchpad.net/~deki/+archive/ubuntu/firejail). On Debian stable (bullseye) we recommend to use the [backports](https://packages.debian.org/bullseye-backports/firejail) package.
120 100
121You can also install one of the [released packages](http://sourceforge.net/projects/firejail/files/firejail), or clone Firejail’s source code from our Git repository and compile manually: 101You can also install one of the [released packages](http://sourceforge.net/projects/firejail/files/firejail), or clone Firejail’s source code from our Git repository and compile manually:
122 102
@@ -239,32 +219,33 @@ A small tool to print profile statistics. Compile as usual and run in /etc/profi
239$ sudo cp src/profstats/profstats /etc/firejail/. 219$ sudo cp src/profstats/profstats /etc/firejail/.
240$ cd /etc/firejail 220$ cd /etc/firejail
241$ ./profstats *.profile 221$ ./profstats *.profile
242 profiles 1150 222 profiles 1167
243 include local profile 1150 (include profile-name.local) 223 include local profile 1167 (include profile-name.local)
244 include globals 1120 (include globals.local) 224 include globals 1136 (include globals.local)
245 blacklist ~/.ssh 1026 (include disable-common.inc) 225 blacklist ~/.ssh 1042 (include disable-common.inc)
246 seccomp 1050 226 seccomp 1062
247 capabilities 1146 227 capabilities 1163
248 noexec 1030 (include disable-exec.inc) 228 noexec 1049 (include disable-exec.inc)
249 noroot 959 229 noroot 971
250 memory-deny-write-execute 253 230 memory-deny-write-execute 256
251 apparmor 681 231 apparmor 693
252 private-bin 667 232 private-bin 677
253 private-dev 1009 233 private-dev 1027
254 private-etc 523 234 private-etc 532
255 private-tmp 883 235 private-tmp 897
256 whitelist home directory 547 236 whitelist home directory 557
257 whitelist var 818 (include whitelist-var-common.inc) 237 whitelist var 836 (include whitelist-var-common.inc)
258 whitelist run/user 616 (include whitelist-runuser-common.inc 238 whitelist run/user 1137 (include whitelist-runuser-common.inc
259 or blacklist ${RUNUSER}) 239 or blacklist ${RUNUSER})
260 whitelist usr/share 591 (include whitelist-usr-share-common.inc 240 whitelist usr/share 609 (include whitelist-usr-share-common.inc
261 net none 391 241 net none 396
262 dbus-user none 641 242 dbus-user none 656
263 dbus-user filter 105 243 dbus-user filter 108
264 dbus-system none 792 244 dbus-system none 808
265 dbus-system filter 7 245 dbus-system filter 10
266``` 246```
267 247
268### New profiles: 248### New profiles:
269 249
270clion-eap, lifeograph, io.github.lainsce.Notejot, rednotebook, zim, microsoft-edge-beta, ncdu2, gallery-dl, yt-dlp 250clion-eap, lifeograph, io.github.lainsce.Notejot, rednotebook, zim, microsoft-edge-beta, ncdu2, gallery-dl, yt-dlp, goldendict, bundle,
251cmake, make, meson, pip, codium
diff --git a/RELNOTES b/RELNOTES
index 86c4a6104..3f92c89c7 100644
--- a/RELNOTES
+++ b/RELNOTES
@@ -1,13 +1,16 @@
1firejail (0.9.67) baseline; urgency=low 1firejail (0.9.67) baseline; urgency=low
2 * work in progress 2 * work in progress
3 * exit code: distinguish fatal signals by adding 128
3 * deprecated --disable-whitelist at compile time 4 * deprecated --disable-whitelist at compile time
4 * deprecated whitelist=yes/no in /etc/firejail/firejail.config 5 * deprecated whitelist=yes/no in /etc/firejail/firejail.config
6 * new condition: ALLOW_TRAY
5 * remove (some) environment variables with auth-tokens 7 * remove (some) environment variables with auth-tokens
6 * new includes: whitelist-run-common.inc, disable-X11.inc 8 * new includes: whitelist-run-common.inc, disable-X11.inc
7 * removed includes: disable-passwordmgr.inc 9 * removed includes: disable-passwordmgr.inc
8 * new profiles: microsoft-edge-beta, clion-eap, lifeograph, zim 10 * new profiles: microsoft-edge-beta, clion-eap, lifeograph, zim
9 * new profiles: io.github.lainsce.Notejot, rednotebook, gallery-dl 11 * new profiles: io.github.lainsce.Notejot, rednotebook, gallery-dl
10 * new profiles: yt-dlp 12 * new profiles: yt-dlp, goldendict, goldendict, bundle, cmake
13 * new profiles: make, meson, pip, codium
11 -- netblue30 <netblue30@yahoo.com> Thu, 29 Jul 2021 09:00:00 -0500 14 -- netblue30 <netblue30@yahoo.com> Thu, 29 Jul 2021 09:00:00 -0500
12 15
13firejail (0.9.66) baseline; urgency=low 16firejail (0.9.66) baseline; urgency=low
@@ -59,7 +62,7 @@ firejail (0.9.64.4) baseline; urgency=low
59 62
60firejail (0.9.64.2) baseline; urgency=low 63firejail (0.9.64.2) baseline; urgency=low
61 * allow --tmpfs inside $HOME for unprivileged users 64 * allow --tmpfs inside $HOME for unprivileged users
62 * --disable-usertmpfs compile time option 65 * --disable-usertmpfs compile time option
63 * allow AF_BLUETOOTH via --protocol=bluetooth 66 * allow AF_BLUETOOTH via --protocol=bluetooth
64 * Setup guide for new users: contrib/firejail-welcome.sh 67 * Setup guide for new users: contrib/firejail-welcome.sh
65 * implement netns in profiles 68 * implement netns in profiles
@@ -566,7 +569,7 @@ firejail (0.9.44) baseline; urgency=low
566 * feature: disable 3D hardware acceleration (--no3d) 569 * feature: disable 3D hardware acceleration (--no3d)
567 * feature: x11 xpra, x11 xephyr, x11 block, allusers, no3d profile commands 570 * feature: x11 xpra, x11 xephyr, x11 block, allusers, no3d profile commands
568 * feature: move files in sandbox (--put) 571 * feature: move files in sandbox (--put)
569 * feature: accept wildcard patterns in user name field of restricted 572 * feature: accept wildcard patterns in user name field of restricted
570 shell login feature 573 shell login feature
571 * new profiles: qpdfview, mupdf, Luminance HDR, Synfig Studio, Gimp, Inkscape 574 * new profiles: qpdfview, mupdf, Luminance HDR, Synfig Studio, Gimp, Inkscape
572 * new profiles: feh, ranger, zathura, 7z, keepass, keepassx, 575 * new profiles: feh, ranger, zathura, 7z, keepass, keepassx,
@@ -608,7 +611,7 @@ firejail (0.9.42) baseline; urgency=low
608 * compile time: disable whitelisting (--disable-whitelist) 611 * compile time: disable whitelisting (--disable-whitelist)
609 * compile time: disable global config (--disable-globalcfg) 612 * compile time: disable global config (--disable-globalcfg)
610 * run time: enable/disable overlayfs (overlayfs yes/no) 613 * run time: enable/disable overlayfs (overlayfs yes/no)
611 * run time: enable/disable quiet as default (quiet-by-default yes/no) 614 * run time: enable/disable quiet as default (quiet-by-default yes/no)
612 * run time: user-defined network filter (netfilter-default) 615 * run time: user-defined network filter (netfilter-default)
613 * run time: enable/disable whitelisting (whitelist yes/no) 616 * run time: enable/disable whitelisting (whitelist yes/no)
614 * run time: enable/disable remounting of /proc and /sys 617 * run time: enable/disable remounting of /proc and /sys
@@ -706,7 +709,7 @@ firejail (0.9.38) baseline; urgency=low
706 -- netblue30 <netblue30@yahoo.com> Tue, 2 Feb 2016 10:00:00 -0500 709 -- netblue30 <netblue30@yahoo.com> Tue, 2 Feb 2016 10:00:00 -0500
707 710
708firejail (0.9.36) baseline; urgency=low 711firejail (0.9.36) baseline; urgency=low
709 * added unbound, dnscrypt-proxy, BitlBee, HexChat, WeeChat, 712 * added unbound, dnscrypt-proxy, BitlBee, HexChat, WeeChat,
710 parole and rtorrent profiles 713 parole and rtorrent profiles
711 * Google Chrome profile rework 714 * Google Chrome profile rework
712 * added google-chrome-stable profile 715 * added google-chrome-stable profile
diff --git a/SECURITY.md b/SECURITY.md
index 7ec2940f6..ef9b9b5fb 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -2,24 +2,24 @@
2 2
3## Supported Versions 3## Supported Versions
4 4
5| Version | Supported by us | EOL | Supported by distribution | 5| Version | Supported by us | EOL | Supported by distribution |
6| ------- | ------------------ | ---- | ------------------------- | 6| ------- | ------------------ | ------------------ | --------------------------------------------------------------------------------- |
7| 0.9.66 | :heavy_check_mark: | | | 7| 0.9.66 | :heavy_check_mark: | | :white_check_mark: Debian 11 **backports**, Debian 12 (testing/unstable) |
8| 0.9.64 | :x: | | :white_check_mark: Debian 10 **backports**, Debian 11 **backports**, Debian 12 (testing/unstable) | 8| 0.9.64 | :x: | | :white_check_mark: Debian 10 **backports**, Debian 11, Ubuntu 21.04, Ubuntu 21.10 |
9| 0.9.62 | :x: | | :white_check_mark: Ubuntu 20.04 LTS, Ubuntu 20.10 | 9| 0.9.62 | :x: | | :white_check_mark: Ubuntu 20.04 LTS, Ubuntu 20.10 |
10| 0.9.60 | :x: | 29 Dec 2019 | | 10| 0.9.60 | :x: | 29 Dec 2019 | |
11| 0.9.58 | :x: | | :white_check_mark: Debian 9 **backports**, Debian 10 | 11| 0.9.58 | :x: | | :white_check_mark: Debian 9 **backports**, Debian 10 |
12| 0.9.56 | :x: | 27 Jan 2019 | | 12| 0.9.56 | :x: | 27 Jan 2019 | |
13| 0.9.54 | :x: | 18 Sep 2018 | | 13| 0.9.54 | :x: | 18 Sep 2018 | |
14| 0.9.52 | :x: | | :white_check_mark: Ubuntu 18.04 LTS | 14| 0.9.52 | :x: | | :white_check_mark: Ubuntu 18.04 LTS |
15| 0.9.50 | :x: | 12 Dec 2017 | | 15| 0.9.50 | :x: | 12 Dec 2017 | |
16| 0.9.48 | :x: | 09 Sep 2017 | | 16| 0.9.48 | :x: | 09 Sep 2017 | |
17| 0.9.46 | :x: | 12 Jun 2017 | | 17| 0.9.46 | :x: | 12 Jun 2017 | |
18| 0.9.44 | :x: | | :white_check_mark: Debian 9 | 18| 0.9.44 | :x: | | :white_check_mark: Debian 9 |
19| 0.9.42 | :x: | 22 Oct 2016 | | 19| 0.9.42 | :x: | 22 Oct 2016 | |
20| 0.9.40 | :x: | 09 Sep 2016 | | 20| 0.9.40 | :x: | 09 Sep 2016 | |
21| 0.9.38 | :x: | | :white_check_mark: Ubuntu 16.04 LTS | 21| 0.9.38 | :x: | | :white_check_mark: Ubuntu 16.04 LTS |
22| <0.9.38 | :x: | Before 05 Feb 2016 | | 22| <0.9.38 | :x: | Before 05 Feb 2016 | |
23 23
24## Security vulnerabilities 24## Security vulnerabilities
25 25
diff --git a/ci/check/profiles/private-etc-always-required.sh b/ci/check/profiles/private-etc-always-required.sh
new file mode 100755
index 000000000..892b15aa4
--- /dev/null
+++ b/ci/check/profiles/private-etc-always-required.sh
@@ -0,0 +1,15 @@
1#!/bin/bash
2
3ALWAYS_REQUIRED=(alternatives ld.so.cache ld.so.preload)
4
5error=0
6while IFS=: read -r profile private_etc; do
7 for required in "${ALWAYS_REQUIRED[@]}"; do
8 if grep -q -v -E "( |,)$required(,|$)" <<<"$private_etc"; then
9 printf '%s misses %s\n' "$profile" "$required" >&2
10 error=1
11 fi
12 done
13done < <(grep "^private-etc " "$@")
14
15exit "$error"
diff --git a/ci/check/profiles/sort-disable-programs.sh b/ci/check/profiles/sort-disable-programs.sh
new file mode 100755
index 000000000..d81ee75d7
--- /dev/null
+++ b/ci/check/profiles/sort-disable-programs.sh
@@ -0,0 +1,2 @@
1#!/bin/sh
2tail -n +5 "$1" | LC_ALL=C sort -c -u
diff --git a/ci/check/profiles/sort-firecfg.config.sh b/ci/check/profiles/sort-firecfg.config.sh
new file mode 100755
index 000000000..17a595350
--- /dev/null
+++ b/ci/check/profiles/sort-firecfg.config.sh
@@ -0,0 +1,2 @@
1#!/bin/sh
2tail -n +4 "$1" | sed 's/^# /#/' | LC_ALL=C sort -c -d
diff --git a/ci/check/profiles/sort.py b/ci/check/profiles/sort.py
new file mode 120000
index 000000000..e1f3f5f16
--- /dev/null
+++ b/ci/check/profiles/sort.py
@@ -0,0 +1 @@
../../../contrib/sort.py \ No newline at end of file
diff --git a/configure b/configure
index f78bbaded..557f5beb2 100755
--- a/configure
+++ b/configure
@@ -711,6 +711,7 @@ ac_subst_files=''
711ac_user_opts=' 711ac_user_opts='
712enable_option_checking 712enable_option_checking
713enable_analyzer 713enable_analyzer
714enable_sanitizer
714enable_apparmor 715enable_apparmor
715enable_selinux 716enable_selinux
716enable_dbusproxy 717enable_dbusproxy
@@ -1368,6 +1369,8 @@ Optional Features:
1368 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) 1369 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
1369 --enable-FEATURE[=ARG] include FEATURE [ARG=yes] 1370 --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
1370 --enable-analyzer enable GCC static analyzer 1371 --enable-analyzer enable GCC static analyzer
1372 --enable-sanitizer=[address | memory | undefined]
1373 enable a compiler-based sanitizer (debug)
1371 --enable-apparmor enable apparmor 1374 --enable-apparmor enable apparmor
1372 --enable-selinux SELinux labeling support 1375 --enable-selinux SELinux labeling support
1373 --disable-dbusproxy disable dbus proxy 1376 --disable-dbusproxy disable dbus proxy
@@ -3294,6 +3297,57 @@ if test "x$enable_analyzer" = "xyes"; then :
3294 3297
3295fi 3298fi
3296 3299
3300# Check whether --enable-sanitizer was given.
3301if test "${enable_sanitizer+set}" = set; then :
3302 enableval=$enable_sanitizer;
3303else
3304 enable_sanitizer=no
3305fi
3306
3307if test "x$enable_sanitizer" != "xno" ; then :
3308 as_CACHEVAR=`$as_echo "ax_cv_check_cflags__-fsanitize=$enable_sanitizer" | $as_tr_sh`
3309{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fsanitize=$enable_sanitizer" >&5
3310$as_echo_n "checking whether C compiler accepts -fsanitize=$enable_sanitizer... " >&6; }
3311if eval \${$as_CACHEVAR+:} false; then :
3312 $as_echo_n "(cached) " >&6
3313else
3314
3315 ax_check_save_flags=$CFLAGS
3316 CFLAGS="$CFLAGS -fsanitize=$enable_sanitizer"
3317 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3318/* end confdefs.h. */
3319
3320int
3321main ()
3322{
3323
3324 ;
3325 return 0;
3326}
3327_ACEOF
3328if ac_fn_c_try_compile "$LINENO"; then :
3329 eval "$as_CACHEVAR=yes"
3330else
3331 eval "$as_CACHEVAR=no"
3332fi
3333rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
3334 CFLAGS=$ax_check_save_flags
3335fi
3336eval ac_res=\$$as_CACHEVAR
3337 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
3338$as_echo "$ac_res" >&6; }
3339if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then :
3340
3341 EXTRA_CFLAGS="$EXTRA_CFLAGS -fsanitize=$enable_sanitizer -fno-omit-frame-pointer"
3342 EXTRA_LDFLAGS="$EXTRA_LDFLAGS -fsanitize=$enable_sanitizer"
3343
3344else
3345 as_fn_error $? "sanitizer not supported: $enable_sanitizer" "$LINENO" 5
3346
3347fi
3348
3349fi
3350
3297HAVE_APPARMOR="" 3351HAVE_APPARMOR=""
3298# Check whether --enable-apparmor was given. 3352# Check whether --enable-apparmor was given.
3299if test "${enable_apparmor+set}" = set; then : 3353if test "${enable_apparmor+set}" = set; then :
@@ -3549,7 +3603,7 @@ if test "x$enable_dbusproxy" != "xno"; then :
3549 3603
3550fi 3604fi
3551 3605
3552# overlayfs features temporarely disabled pending fixes 3606# overlayfs features temporarily disabled pending fixes
3553HAVE_OVERLAYFS="" 3607HAVE_OVERLAYFS=""
3554 3608
3555# 3609#
diff --git a/configure.ac b/configure.ac
index 7879a5239..fc5823143 100644
--- a/configure.ac
+++ b/configure.ac
@@ -45,6 +45,15 @@ AS_IF([test "x$enable_analyzer" = "xyes"], [
45 EXTRA_CFLAGS="$EXTRA_CFLAGS -fanalyzer -Wno-analyzer-malloc-leak" 45 EXTRA_CFLAGS="$EXTRA_CFLAGS -fanalyzer -Wno-analyzer-malloc-leak"
46]) 46])
47 47
48AC_ARG_ENABLE([sanitizer],
49 AS_HELP_STRING([--enable-sanitizer=@<:@address | memory | undefined@:>@], [enable a compiler-based sanitizer (debug)]), [], [enable_sanitizer=no])
50AS_IF([test "x$enable_sanitizer" != "xno" ],
51 [AX_CHECK_COMPILE_FLAG([-fsanitize=$enable_sanitizer], [
52 EXTRA_CFLAGS="$EXTRA_CFLAGS -fsanitize=$enable_sanitizer -fno-omit-frame-pointer"
53 EXTRA_LDFLAGS="$EXTRA_LDFLAGS -fsanitize=$enable_sanitizer"
54 ], [AC_MSG_ERROR([sanitizer not supported: $enable_sanitizer])]
55)])
56
48HAVE_APPARMOR="" 57HAVE_APPARMOR=""
49AC_ARG_ENABLE([apparmor], 58AC_ARG_ENABLE([apparmor],
50 AS_HELP_STRING([--enable-apparmor], [enable apparmor])) 59 AS_HELP_STRING([--enable-apparmor], [enable apparmor]))
@@ -76,7 +85,7 @@ AS_IF([test "x$enable_dbusproxy" != "xno"], [
76 AC_SUBST(HAVE_DBUSPROXY) 85 AC_SUBST(HAVE_DBUSPROXY)
77]) 86])
78 87
79# overlayfs features temporarely disabled pending fixes 88# overlayfs features temporarily disabled pending fixes
80HAVE_OVERLAYFS="" 89HAVE_OVERLAYFS=""
81AC_SUBST(HAVE_OVERLAYFS) 90AC_SUBST(HAVE_OVERLAYFS)
82# 91#
diff --git a/contrib/fix_private-bin.py b/contrib/fix_private-bin.py
index 12b596749..961646aa4 100755
--- a/contrib/fix_private-bin.py
+++ b/contrib/fix_private-bin.py
@@ -164,7 +164,7 @@ def printHelp():
164 164
165 165
166def main() -> None: 166def main() -> None:
167 """The main function. Parses the commandline args, shows messages and calles the function actually doing the work.""" 167 """The main function. Parses the commandline args, shows messages and calls the function actually doing the work."""
168 if len(sys.argv) > 2 or (len(sys.argv) == 2 and 168 if len(sys.argv) > 2 or (len(sys.argv) == 2 and
169 (sys.argv[1] == "-h" or sys.argv[1] == "--help")): 169 (sys.argv[1] == "-h" or sys.argv[1] == "--help")):
170 printHelp() 170 printHelp()
diff --git a/contrib/gdb-firejail.sh b/contrib/gdb-firejail.sh
index 941fc45ef..686bdc2c0 100755
--- a/contrib/gdb-firejail.sh
+++ b/contrib/gdb-firejail.sh
@@ -21,4 +21,4 @@ else
21fi 21fi
22 22
23bash -c "kill -STOP \$\$; exec \"\$0\" \"\$@\"" "$@" & 23bash -c "kill -STOP \$\$; exec \"\$0\" \"\$@\"" "$@" &
24sudo gdb -e "$FIREJAIL" -p "$!" 24sudo gdb -e "$FIREJAIL" -p "$!"
diff --git a/contrib/sort.py b/contrib/sort.py
index d7a2cd05d..4af9c674c 100755
--- a/contrib/sort.py
+++ b/contrib/sort.py
@@ -34,7 +34,7 @@ def sort_alphabetical(raw_items):
34 34
35 35
36def sort_protocol(protocols): 36def sort_protocol(protocols):
37 """sort the given protocole into this scheme: unix,inet,inet6,netlink,packet,bluetooth""" 37 """sort the given protocols into this scheme: unix,inet,inet6,netlink,packet,bluetooth"""
38 38
39 # shortcut for common protocol lines 39 # shortcut for common protocol lines
40 if protocols in ("unix", "unix,inet,inet6"): 40 if protocols in ("unix", "unix,inet,inet6"):
diff --git a/contrib/vim/syntax/firejail.vim b/contrib/vim/syntax/firejail.vim
index d07690ee2..fa80a9c00 100644
--- a/contrib/vim/syntax/firejail.vim
+++ b/contrib/vim/syntax/firejail.vim
@@ -72,7 +72,7 @@ syn match fjCommandNoCond /quiet$/ contained
72 72
73" Conditionals grabbed from: src/firejail/profile.c 73" Conditionals grabbed from: src/firejail/profile.c
74" Generate list with: awk -- 'BEGIN {process=0;} /^Cond conditionals\[\] = \{$/ {process=1;} /\t*\{"[^"]+".*/ { if (process) {print gensub(/^\t*\{"([^"]+)".*$/, "\\1", 1);} } /^\t\{ NULL, NULL \}$/ {process=0;}' src/firejail/profile.c | sort -u | tr $'\n' '|' 74" Generate list with: awk -- 'BEGIN {process=0;} /^Cond conditionals\[\] = \{$/ {process=1;} /\t*\{"[^"]+".*/ { if (process) {print gensub(/^\t*\{"([^"]+)".*$/, "\\1", 1);} } /^\t\{ NULL, NULL \}$/ {process=0;}' src/firejail/profile.c | sort -u | tr $'\n' '|'
75syn match fjConditional /\v\?(BROWSER_ALLOW_DRM|BROWSER_DISABLE_U2F|HAS_APPIMAGE|HAS_NET|HAS_NODBUS|HAS_NOSOUND|HAS_X11) ?:/ nextgroup=fjCommand skipwhite contained 75syn match fjConditional /\v\?(ALLOW_TRAY|BROWSER_ALLOW_DRM|BROWSER_DISABLE_U2F|HAS_APPIMAGE|HAS_NET|HAS_NODBUS|HAS_NOSOUND|HAS_X11) ?:/ nextgroup=fjCommand skipwhite contained
76 76
77" A line is either a command, a conditional or a comment 77" A line is either a command, a conditional or a comment
78syn match fjStatement /^/ nextgroup=fjCommand,fjCommandNoCond,fjConditional,fjComment 78syn match fjStatement /^/ nextgroup=fjCommand,fjCommandNoCond,fjConditional,fjComment
diff --git a/etc-fixes/0.9.58/atom.profile b/etc-fixes/0.9.58/atom.profile
index 9bc35da5a..1cc9b0116 100644
--- a/etc-fixes/0.9.58/atom.profile
+++ b/etc-fixes/0.9.58/atom.profile
@@ -1,4 +1,3 @@
1
2# Firejail profile for atom 1# Firejail profile for atom
3# Description: A hackable text editor for the 21st Century 2# Description: A hackable text editor for the 21st Century
4# This file is overwritten after every install/update 3# This file is overwritten after every install/update
diff --git a/etc-fixes/seccomp-join-bug/README b/etc-fixes/seccomp-join-bug/README
index 9f85a0e00..15596eca7 100644
--- a/etc-fixes/seccomp-join-bug/README
+++ b/etc-fixes/seccomp-join-bug/README
@@ -8,4 +8,3 @@ on May 21, 2019:
8 8
9The original discussion thread: https://github.com/netblue30/firejail/issues/2718 9The original discussion thread: https://github.com/netblue30/firejail/issues/2718
10The fix on mainline: https://github.com/netblue30/firejail/commit/eecf35c2f8249489a1d3e512bb07f0d427183134 10The fix on mainline: https://github.com/netblue30/firejail/commit/eecf35c2f8249489a1d3e512bb07f0d427183134
11
diff --git a/etc/apparmor/firejail-base b/etc/apparmor/firejail-base
new file mode 100644
index 000000000..6e286d4af
--- /dev/null
+++ b/etc/apparmor/firejail-base
@@ -0,0 +1,27 @@
1#########################################
2# Firejail base abstraction drop-in
3#
4# Adds basic Firejail support to AppArmor profiles.
5# Please note: Firejail's nonewprivs and seccomp options
6# are not compatible with AppArmor profile transitions.
7# Also there is no support for Firejail chroot options.
8#########################################
9
10# Discovery of process names
11owner /proc/@{pid}/comm r,
12
13##########
14# Following paths only exist inside a Firejail sandbox
15##########
16
17# Library preloading
18/{,var/}run/firejail/lib/*.so mr,
19
20# Supporting seccomp
21owner /{,var/}run/firejail/mnt/seccomp/seccomp.postexec r,
22
23# Supporting trace
24owner /{,var/}run/firejail/mnt/trace w,
25
26# Supporting tracelog
27/{,var/}run/firejail/mnt/fslogger r,
diff --git a/etc/apparmor/firejail-default b/etc/apparmor/firejail-default
index ca32f5b0d..a7044152e 100644
--- a/etc/apparmor/firejail-default
+++ b/etc/apparmor/firejail-default
@@ -129,7 +129,7 @@ signal (receive),
129########## 129##########
130# The list of recognized capabilities varies from one apparmor version to another. 130# The list of recognized capabilities varies from one apparmor version to another.
131# For example on Debian 10 (apparmor 2.13.2) checkpoint_restore, perfmon, bpf are not available 131# For example on Debian 10 (apparmor 2.13.2) checkpoint_restore, perfmon, bpf are not available
132# We allow all caps by default and remove the ones we don't like: 132# We allow all caps by default and remove the ones we don't like:
133capability, 133capability,
134deny capability audit_write, 134deny capability audit_write,
135deny capability audit_control, 135deny capability audit_control,
diff --git a/etc/firejail.config b/etc/firejail.config
index 2e355586b..7912b746c 100644
--- a/etc/firejail.config
+++ b/etc/firejail.config
@@ -2,6 +2,9 @@
2# keyword-argument pairs, one per line. Most features are enabled by default. 2# keyword-argument pairs, one per line. Most features are enabled by default.
3# Use 'yes' or 'no' as configuration values. 3# Use 'yes' or 'no' as configuration values.
4 4
5# Allow programs to display a tray icon
6# allow-tray no
7
5# Enable AppArmor functionality, default enabled. 8# Enable AppArmor functionality, default enabled.
6# apparmor yes 9# apparmor yes
7 10
@@ -63,7 +66,7 @@
63# a file argument, the default filter is hardcoded (see man 1 firejail). This 66# a file argument, the default filter is hardcoded (see man 1 firejail). This
64# configuration entry allows the user to change the default by specifying 67# configuration entry allows the user to change the default by specifying
65# a file containing the filter configuration. The filter file format is the 68# a file containing the filter configuration. The filter file format is the
66# format of iptables-save and iptable-restore commands. Example: 69# format of iptables-save and iptables-restore commands. Example:
67# netfilter-default /etc/iptables.iptables.rules 70# netfilter-default /etc/iptables.iptables.rules
68 71
69# Enable or disable networking features, default enabled. 72# Enable or disable networking features, default enabled.
diff --git a/etc/ids.config b/etc/ids.config
index 09b0ae912..ff55416ca 100644
--- a/etc/ids.config
+++ b/etc/ids.config
@@ -37,6 +37,7 @@ include ids.config.local
37 37
38### shells local ### 38### shells local ###
39# bash 39# bash
40${HOME}/.bash_aliases
40${HOME}/.bash_login 41${HOME}/.bash_login
41${HOME}/.bash_logout 42${HOME}/.bash_logout
42${HOME}/.bash_profile 43${HOME}/.bash_profile
@@ -99,10 +100,24 @@ ${HOME}/.xsessionrc
99### window/desktop manager ### 100### window/desktop manager ###
100${HOME}/Desktop/*.desktop 101${HOME}/Desktop/*.desktop
101${HOME}/.config/autostart 102${HOME}/.config/autostart
103${HOME}/.config/autostart-scripts
102${HOME}/.config/lxsession/LXDE/autostart 104${HOME}/.config/lxsession/LXDE/autostart
105${HOME}/.config/openbox/autostart
106${HOME}/.config/openbox/environment
107${HOME}/.config/plasma-workspace/env
108${HOME}/.config/plasma-workspace/shutdown
103${HOME}/.gnomerc 109${HOME}/.gnomerc
104${HOME}/.gtkrc 110${HOME}/.gtkrc
111${HOME}/.kde/Autostart
112${HOME}/.kde/env
113${HOME}/.kde/share/autostart
114${HOME}/.kde/shutdown
115${HOME}/.kde4/Autostart
116${HOME}/.kde4/env
117${HOME}/.kde4/share/autostart
118${HOME}/.kde4/shutdown
105${HOME}/.kderc 119${HOME}/.kderc
120${HOME}/.local/share/autostart
106 121
107### security ### 122### security ###
108/etc/aide 123/etc/aide
@@ -123,6 +138,7 @@ ${HOME}/.kderc
123/etc/tripwire 138/etc/tripwire
124${HOME}/.config/firejail 139${HOME}/.config/firejail
125${HOME}/.gnupg 140${HOME}/.gnupg
141${HOME}/.pam_environment
126 142
127### network security ### 143### network security ###
128/etc/ca-certificates* 144/etc/ca-certificates*
diff --git a/etc/inc/allow-common-devel.inc b/etc/inc/allow-common-devel.inc
index 011bbe226..4e460fc10 100644
--- a/etc/inc/allow-common-devel.inc
+++ b/etc/inc/allow-common-devel.inc
@@ -27,5 +27,8 @@ noblacklist ${HOME}/.python-history
27noblacklist ${HOME}/.python_history 27noblacklist ${HOME}/.python_history
28noblacklist ${HOME}/.pythonhist 28noblacklist ${HOME}/.pythonhist
29 29
30# Ruby
31noblacklist ${HOME}/.bundle
32
30# Rust 33# Rust
31noblacklist ${HOME}/.cargo/* 34noblacklist ${HOME}/.cargo
diff --git a/etc/inc/allow-ruby.inc b/etc/inc/allow-ruby.inc
index a8c701219..00276cac7 100644
--- a/etc/inc/allow-ruby.inc
+++ b/etc/inc/allow-ruby.inc
@@ -4,3 +4,4 @@ include allow-ruby.local
4 4
5noblacklist ${PATH}/ruby 5noblacklist ${PATH}/ruby
6noblacklist /usr/lib/ruby 6noblacklist /usr/lib/ruby
7noblacklist /usr/lib64/ruby
diff --git a/etc/inc/disable-common.inc b/etc/inc/disable-common.inc
index ae84ee38a..f3d685d18 100644
--- a/etc/inc/disable-common.inc
+++ b/etc/inc/disable-common.inc
@@ -458,7 +458,7 @@ blacklist /sbin
458blacklist /usr/local/sbin 458blacklist /usr/local/sbin
459blacklist /usr/sbin 459blacklist /usr/sbin
460 460
461# system management 461# system management and various SUID executables
462blacklist ${PATH}/at 462blacklist ${PATH}/at
463blacklist ${PATH}/busybox 463blacklist ${PATH}/busybox
464blacklist ${PATH}/chage 464blacklist ${PATH}/chage
@@ -493,6 +493,12 @@ blacklist ${PATH}/umount
493blacklist ${PATH}/unix_chkpwd 493blacklist ${PATH}/unix_chkpwd
494blacklist ${PATH}/xev 494blacklist ${PATH}/xev
495blacklist ${PATH}/xinput 495blacklist ${PATH}/xinput
496blacklist /usr/lib/openssh/ssh-keysign
497blacklist ${PATH}/passwd
498blacklist /usr/lib/xorg/Xorg.wrap
499blacklist /usr/lib/policykit-1/polkit-agent-helper-1
500blacklist /usr/lib/dbus-1.0/dbus-daemon-launch-helper
501blacklist /usr/lib/eject/dmcrypt-get-device
496 502
497# other SUID binaries 503# other SUID binaries
498blacklist /usr/lib/virtualbox 504blacklist /usr/lib/virtualbox
diff --git a/etc/inc/disable-devel.inc b/etc/inc/disable-devel.inc
index e74b1b40b..98bf5ecc8 100644
--- a/etc/inc/disable-devel.inc
+++ b/etc/inc/disable-devel.inc
@@ -60,9 +60,7 @@ blacklist /usr/lib/tcc
60blacklist ${PATH}/valgrind* 60blacklist ${PATH}/valgrind*
61blacklist /usr/lib/valgrind 61blacklist /usr/lib/valgrind
62 62
63
64# Source-Code 63# Source-Code
65
66blacklist /usr/src 64blacklist /usr/src
67blacklist /usr/local/src 65blacklist /usr/local/src
68blacklist /usr/include 66blacklist /usr/include
diff --git a/etc/inc/disable-exec.inc b/etc/inc/disable-exec.inc
index 9b5c40a2b..d7dcef7e7 100644
--- a/etc/inc/disable-exec.inc
+++ b/etc/inc/disable-exec.inc
@@ -6,6 +6,7 @@ noexec ${HOME}
6noexec ${RUNUSER} 6noexec ${RUNUSER}
7noexec /dev/mqueue 7noexec /dev/mqueue
8noexec /dev/shm 8noexec /dev/shm
9noexec /run/shm
9noexec /tmp 10noexec /tmp
10# /var is noexec by default for unprivileged users 11# /var is noexec by default for unprivileged users
11# except there is a writable-var option, so just in case: 12# except there is a writable-var option, so just in case:
diff --git a/etc/inc/disable-interpreters.inc b/etc/inc/disable-interpreters.inc
index 5d8a236fb..804869e2a 100644
--- a/etc/inc/disable-interpreters.inc
+++ b/etc/inc/disable-interpreters.inc
@@ -48,6 +48,7 @@ blacklist /usr/share/php*
48# Ruby 48# Ruby
49blacklist ${PATH}/ruby 49blacklist ${PATH}/ruby
50blacklist /usr/lib/ruby 50blacklist /usr/lib/ruby
51blacklist /usr/lib64/ruby
51 52
52# Programs using python: deluge, firefox addons, filezilla, cherrytree, xchat, hexchat, libreoffice, scribus 53# Programs using python: deluge, firefox addons, filezilla, cherrytree, xchat, hexchat, libreoffice, scribus
53# Python 2 54# Python 2
diff --git a/etc/inc/disable-proc.inc b/etc/inc/disable-proc.inc
new file mode 100644
index 000000000..81a8883f3
--- /dev/null
+++ b/etc/inc/disable-proc.inc
@@ -0,0 +1,82 @@
1# This file is overwritten during software install.
2# Persistent customizations should go in a .local file.
3include disable-proc.local
4
5blacklist /proc/acpi
6blacklist /proc/asound
7blacklist /proc/bootconfig
8blacklist /proc/buddyinfo
9blacklist /proc/cgroups
10blacklist /proc/cmdline
11blacklist /proc/config.gz
12blacklist /proc/consoles
13#blacklist /proc/cpuinfo
14blacklist /proc/crypto
15blacklist /proc/devices
16blacklist /proc/diskstats
17blacklist /proc/dma
18#blacklist /proc/driver
19blacklist /proc/dynamic_debug
20blacklist /proc/execdomains
21blacklist /proc/fb
22#blacklist /proc/filesystems
23blacklist /proc/fs
24blacklist /proc/i8k
25blacklist /proc/interrupts
26blacklist /proc/iomem
27blacklist /proc/ioports
28blacklist /proc/irq
29blacklist /proc/kallsyms
30blacklist /proc/kcore
31blacklist /proc/keys
32blacklist /proc/key-users
33blacklist /proc/kmsg
34blacklist /proc/kpagecgroup
35blacklist /proc/kpagecount
36blacklist /proc/kpageflags
37blacklist /proc/latency_stats
38#blacklist /proc/loadavg
39blacklist /proc/locks
40blacklist /proc/mdstat
41#blacklist /proc/meminfo
42blacklist /proc/misc
43#blacklist /proc/modules
44#blacklist /proc/mounts
45blacklist /proc/mtrr
46#blacklist /proc/net
47blacklist /proc/partitions
48blacklist /proc/pressure
49blacklist /proc/sched_debug
50blacklist /proc/schedstat
51blacklist /proc/scsi
52#blacklist /proc/self
53blacklist /proc/slabinfo
54blacklist /proc/softirqs
55blacklist /proc/spl
56#blacklist /proc/stat
57blacklist /proc/swaps
58#blacklist /proc/sys
59blacklist /proc/sysrq-trigger
60blacklist /proc/sysvipc
61#blacklist /proc/thread-self
62blacklist /proc/timer_list
63blacklist /proc/tty
64#blacklist /proc/uptime
65#blacklist /proc/version
66blacklist /proc/version_signature
67blacklist /proc/vmallocinfo
68#blacklist /proc/vmstat
69#blacklist /proc/zoneinfo
70
71blacklist /proc/sys/abi
72blacklist /proc/sys/crypto
73blacklist /proc/sys/debug
74blacklist /proc/sys/dev
75blacklist /proc/sys/fs
76blacklist /proc/sys/net
77blacklist /proc/sys/user
78blacklist /proc/sys/vm
79
80noblacklist /proc/sys/kernel/osrelease
81noblacklist /proc/sys/kernel/yama
82blacklist /proc/sys/*/*
diff --git a/etc/inc/disable-programs.inc b/etc/inc/disable-programs.inc
index 4941630a2..e78f15e10 100644
--- a/etc/inc/disable-programs.inc
+++ b/etc/inc/disable-programs.inc
@@ -49,11 +49,184 @@ blacklist ${HOME}/.bibletime
49blacklist ${HOME}/.bitcoin 49blacklist ${HOME}/.bitcoin
50blacklist ${HOME}/.blobby 50blacklist ${HOME}/.blobby
51blacklist ${HOME}/.bogofilter 51blacklist ${HOME}/.bogofilter
52blacklist ${HOME}/.bundle
52blacklist ${HOME}/.bzf 53blacklist ${HOME}/.bzf
53blacklist ${HOME}/.cargo/* 54blacklist ${HOME}/.cache/0ad
55blacklist ${HOME}/.cache/8pecxstudios
56blacklist ${HOME}/.cache/Authenticator
57blacklist ${HOME}/.cache/BraveSoftware
58blacklist ${HOME}/.cache/Clementine
59blacklist ${HOME}/.cache/ENCOM/Spectral
60blacklist ${HOME}/.cache/Enox
61blacklist ${HOME}/.cache/Enpass
62blacklist ${HOME}/.cache/Ferdi
63blacklist ${HOME}/.cache/Flavio Tordini
64blacklist ${HOME}/.cache/Franz
65blacklist ${HOME}/.cache/GoldenDict
66blacklist ${HOME}/.cache/INRIA
67blacklist ${HOME}/.cache/INRIA/Natron
68blacklist ${HOME}/.cache/JetBrains/CLion*
69blacklist ${HOME}/.cache/KDE/neochat
70blacklist ${HOME}/.cache/Mendeley Ltd.
71blacklist ${HOME}/.cache/MusicBrainz
72blacklist ${HOME}/.cache/NewsFlashGTK
73blacklist ${HOME}/.cache/Otter
74blacklist ${HOME}/.cache/PawelStolowski
75blacklist ${HOME}/.cache/Psi
76blacklist ${HOME}/.cache/QuiteRss
77blacklist ${HOME}/.cache/Quotient/quaternion
78blacklist ${HOME}/.cache/Shortwave
79blacklist ${HOME}/.cache/Tox
80blacklist ${HOME}/.cache/Zeal
81blacklist ${HOME}/.cache/agenda
82blacklist ${HOME}/.cache/akonadi*
83blacklist ${HOME}/.cache/atril
84blacklist ${HOME}/.cache/attic
85blacklist ${HOME}/.cache/babl
86blacklist ${HOME}/.cache/bnox
87blacklist ${HOME}/.cache/borg
88blacklist ${HOME}/.cache/calibre
89blacklist ${HOME}/.cache/cantata
90blacklist ${HOME}/.cache/champlain
91blacklist ${HOME}/.cache/chromium
92blacklist ${HOME}/.cache/chromium-dev
93blacklist ${HOME}/.cache/cliqz
94blacklist ${HOME}/.cache/com.github.johnfactotum.Foliate
95blacklist ${HOME}/.cache/darktable
96blacklist ${HOME}/.cache/deja-dup
97blacklist ${HOME}/.cache/discover
98blacklist ${HOME}/.cache/dnox
99blacklist ${HOME}/.cache/dolphin
100blacklist ${HOME}/.cache/dolphin-emu
101blacklist ${HOME}/.cache/ephemeral
102blacklist ${HOME}/.cache/epiphany
103blacklist ${HOME}/.cache/evolution
104blacklist ${HOME}/.cache/falkon
105blacklist ${HOME}/.cache/feedreader
106blacklist ${HOME}/.cache/firedragon
107blacklist ${HOME}/.cache/flaska.net/trojita
108blacklist ${HOME}/.cache/folks
109blacklist ${HOME}/.cache/font-manager
110blacklist ${HOME}/.cache/fossamail
111blacklist ${HOME}/.cache/fractal
112blacklist ${HOME}/.cache/freecol
113blacklist ${HOME}/.cache/gajim
114blacklist ${HOME}/.cache/geary
115blacklist ${HOME}/.cache/geeqie
116blacklist ${HOME}/.cache/gegl-0.4
117blacklist ${HOME}/.cache/gfeeds
118blacklist ${HOME}/.cache/gimp
119blacklist ${HOME}/.cache/gnome-boxes
120blacklist ${HOME}/.cache/gnome-builder
121blacklist ${HOME}/.cache/gnome-control-center
122blacklist ${HOME}/.cache/gnome-recipes
123blacklist ${HOME}/.cache/gnome-screenshot
124blacklist ${HOME}/.cache/gnome-software
125blacklist ${HOME}/.cache/gnome-twitch
126blacklist ${HOME}/.cache/godot
127blacklist ${HOME}/.cache/google-chrome
128blacklist ${HOME}/.cache/google-chrome-beta
129blacklist ${HOME}/.cache/google-chrome-unstable
130blacklist ${HOME}/.cache/gradio
131blacklist ${HOME}/.cache/gummi
132blacklist ${HOME}/.cache/icedove
133blacklist ${HOME}/.cache/inkscape
134blacklist ${HOME}/.cache/inox
135blacklist ${HOME}/.cache/io.github.lainsce.Notejot
136blacklist ${HOME}/.cache/iridium
137blacklist ${HOME}/.cache/kcmshell5
138blacklist ${HOME}/.cache/kdenlive
139blacklist ${HOME}/.cache/keepassxc
140blacklist ${HOME}/.cache/kfind
141blacklist ${HOME}/.cache/kinfocenter
142blacklist ${HOME}/.cache/kmail2
143blacklist ${HOME}/.cache/krunner
144blacklist ${HOME}/.cache/krunnerbookmarkrunnerfirefoxdbfile.sqlite*
145blacklist ${HOME}/.cache/kscreenlocker_greet
146blacklist ${HOME}/.cache/ksmserver-logout-greeter
147blacklist ${HOME}/.cache/ksplashqml
148blacklist ${HOME}/.cache/kube
149blacklist ${HOME}/.cache/kwin
150blacklist ${HOME}/.cache/libgweather
151blacklist ${HOME}/.cache/librewolf
152blacklist ${HOME}/.cache/liferea
153blacklist ${HOME}/.cache/lutris
154blacklist ${HOME}/.cache/marker
155blacklist ${HOME}/.cache/matrix-mirage
156blacklist ${HOME}/.cache/microsoft-edge-beta
157blacklist ${HOME}/.cache/microsoft-edge-dev
158blacklist ${HOME}/.cache/midori
159blacklist ${HOME}/.cache/minetest
160blacklist ${HOME}/.cache/mirage
161blacklist ${HOME}/.cache/moonchild productions/basilisk
162blacklist ${HOME}/.cache/moonchild productions/pale moon
163blacklist ${HOME}/.cache/mozilla
164blacklist ${HOME}/.cache/ms-excel-online
165blacklist ${HOME}/.cache/ms-office-online
166blacklist ${HOME}/.cache/ms-onenote-online
167blacklist ${HOME}/.cache/ms-outlook-online
168blacklist ${HOME}/.cache/ms-powerpoint-online
169blacklist ${HOME}/.cache/ms-skype-online
170blacklist ${HOME}/.cache/ms-word-online
171blacklist ${HOME}/.cache/mutt
172blacklist ${HOME}/.cache/mypaint
173blacklist ${HOME}/.cache/netsurf
174blacklist ${HOME}/.cache/nheko
175blacklist ${HOME}/.cache/okular
176blacklist ${HOME}/.cache/opera
177blacklist ${HOME}/.cache/opera-beta
178blacklist ${HOME}/.cache/org.gabmus.gfeeds
179blacklist ${HOME}/.cache/org.gnome.Books
180blacklist ${HOME}/.cache/org.gnome.Maps
181blacklist ${HOME}/.cache/pdfmod
182blacklist ${HOME}/.cache/peek
183blacklist ${HOME}/.cache/pip
184blacklist ${HOME}/.cache/pipe-viewer
185blacklist ${HOME}/.cache/plasmashell
186blacklist ${HOME}/.cache/plasmashellbookmarkrunnerfirefoxdbfile.sqlite*
187blacklist ${HOME}/.cache/psi
188blacklist ${HOME}/.cache/qBittorrent
189blacklist ${HOME}/.cache/quodlibet
190blacklist ${HOME}/.cache/qupzilla
191blacklist ${HOME}/.cache/qutebrowser
192blacklist ${HOME}/.cache/rednotebook
193blacklist ${HOME}/.cache/rhythmbox
194blacklist ${HOME}/.cache/shotwell
195blacklist ${HOME}/.cache/simple-scan
196blacklist ${HOME}/.cache/slimjet
197blacklist ${HOME}/.cache/smuxi
198blacklist ${HOME}/.cache/snox
199blacklist ${HOME}/.cache/spotify
200blacklist ${HOME}/.cache/straw-viewer
201blacklist ${HOME}/.cache/strawberry
202blacklist ${HOME}/.cache/supertuxkart
203blacklist ${HOME}/.cache/systemsettings
204blacklist ${HOME}/.cache/telepathy
205blacklist ${HOME}/.cache/thunderbird
206blacklist ${HOME}/.cache/torbrowser
207blacklist ${HOME}/.cache/transmission
208blacklist ${HOME}/.cache/ungoogled-chromium
209blacklist ${HOME}/.cache/vivaldi
210blacklist ${HOME}/.cache/vivaldi-snapshot
211blacklist ${HOME}/.cache/vlc
212blacklist ${HOME}/.cache/vmware
213blacklist ${HOME}/.cache/warsow-2.1
214blacklist ${HOME}/.cache/waterfox
215blacklist ${HOME}/.cache/wesnoth
216blacklist ${HOME}/.cache/winetricks
217blacklist ${HOME}/.cache/xmms2
218blacklist ${HOME}/.cache/xournalpp
219blacklist ${HOME}/.cache/xreader
220blacklist ${HOME}/.cache/yandex-browser
221blacklist ${HOME}/.cache/yandex-browser-beta
222blacklist ${HOME}/.cache/youtube-dl
223blacklist ${HOME}/.cache/youtube-viewer
224blacklist ${HOME}/.cache/yt-dlp
225blacklist ${HOME}/.cache/zim
226blacklist ${HOME}/.cargo
54blacklist ${HOME}/.claws-mail 227blacklist ${HOME}/.claws-mail
55blacklist ${HOME}/.cliqz
56blacklist ${HOME}/.clion* 228blacklist ${HOME}/.clion*
229blacklist ${HOME}/.cliqz
57blacklist ${HOME}/.clonk 230blacklist ${HOME}/.clonk
58blacklist ${HOME}/.config/0ad 231blacklist ${HOME}/.config/0ad
59blacklist ${HOME}/.config/2048-qt 232blacklist ${HOME}/.config/2048-qt
@@ -92,8 +265,8 @@ blacklist ${HOME}/.config/Google Play Music Desktop Player
92blacklist ${HOME}/.config/Gpredict 265blacklist ${HOME}/.config/Gpredict
93blacklist ${HOME}/.config/INRIA 266blacklist ${HOME}/.config/INRIA
94blacklist ${HOME}/.config/InSilmaril 267blacklist ${HOME}/.config/InSilmaril
95blacklist ${HOME}/.config/Jitsi Meet
96blacklist ${HOME}/.config/JetBrains/CLion* 268blacklist ${HOME}/.config/JetBrains/CLion*
269blacklist ${HOME}/.config/Jitsi Meet
97blacklist ${HOME}/.config/KDE/neochat 270blacklist ${HOME}/.config/KDE/neochat
98blacklist ${HOME}/.config/KeePass 271blacklist ${HOME}/.config/KeePass
99blacklist ${HOME}/.config/KeePassXCrc 272blacklist ${HOME}/.config/KeePassXCrc
@@ -142,6 +315,7 @@ blacklist ${HOME}/.config/SubDownloader
142blacklist ${HOME}/.config/Thunar 315blacklist ${HOME}/.config/Thunar
143blacklist ${HOME}/.config/Twitch 316blacklist ${HOME}/.config/Twitch
144blacklist ${HOME}/.config/Unknown Organization 317blacklist ${HOME}/.config/Unknown Organization
318blacklist ${HOME}/.config/VSCodium
145blacklist ${HOME}/.config/VirtualBox 319blacklist ${HOME}/.config/VirtualBox
146blacklist ${HOME}/.config/Whalebird 320blacklist ${HOME}/.config/Whalebird
147blacklist ${HOME}/.config/Wire 321blacklist ${HOME}/.config/Wire
@@ -496,12 +670,14 @@ blacklist ${HOME}/.frogatto
496blacklist ${HOME}/.frozen-bubble 670blacklist ${HOME}/.frozen-bubble
497blacklist ${HOME}/.funnyboat 671blacklist ${HOME}/.funnyboat
498blacklist ${HOME}/.gallery-dl.conf 672blacklist ${HOME}/.gallery-dl.conf
673blacklist ${HOME}/.geekbench5
499blacklist ${HOME}/.gimp* 674blacklist ${HOME}/.gimp*
500blacklist ${HOME}/.gist 675blacklist ${HOME}/.gist
501blacklist ${HOME}/.gitconfig 676blacklist ${HOME}/.gitconfig
502blacklist ${HOME}/.gl-117 677blacklist ${HOME}/.gl-117
503blacklist ${HOME}/.glaxiumrc 678blacklist ${HOME}/.glaxiumrc
504blacklist ${HOME}/.gnome/gnome-schedule 679blacklist ${HOME}/.gnome/gnome-schedule
680blacklist ${HOME}/.goldendict
505blacklist ${HOME}/.googleearth 681blacklist ${HOME}/.googleearth
506blacklist ${HOME}/.gradle 682blacklist ${HOME}/.gradle
507blacklist ${HOME}/.gramps 683blacklist ${HOME}/.gramps
@@ -954,176 +1130,3 @@ blacklist /var/games/slashem
954blacklist /var/games/vulturesclaw 1130blacklist /var/games/vulturesclaw
955blacklist /var/games/vultureseye 1131blacklist /var/games/vultureseye
956blacklist /var/lib/games/Maelstrom-Scores 1132blacklist /var/lib/games/Maelstrom-Scores
957
958# ${HOME}/.cache directory
959blacklist ${HOME}/.cache/0ad
960blacklist ${HOME}/.cache/8pecxstudios
961blacklist ${HOME}/.cache/Authenticator
962blacklist ${HOME}/.cache/BraveSoftware
963blacklist ${HOME}/.cache/Clementine
964blacklist ${HOME}/.cache/ENCOM/Spectral
965blacklist ${HOME}/.cache/Enox
966blacklist ${HOME}/.cache/Enpass
967blacklist ${HOME}/.cache/Ferdi
968blacklist ${HOME}/.cache/Flavio Tordini
969blacklist ${HOME}/.cache/Franz
970blacklist ${HOME}/.cache/INRIA
971blacklist ${HOME}/.cache/INRIA/Natron
972blacklist ${HOME}/.cache/KDE/neochat
973blacklist ${HOME}/.cache/Mendeley Ltd.
974blacklist ${HOME}/.cache/MusicBrainz
975blacklist ${HOME}/.cache/NewsFlashGTK
976blacklist ${HOME}/.cache/Otter
977blacklist ${HOME}/.cache/PawelStolowski
978blacklist ${HOME}/.cache/Psi
979blacklist ${HOME}/.cache/QuiteRss
980blacklist ${HOME}/.cache/Quotient/quaternion
981blacklist ${HOME}/.cache/Shortwave
982blacklist ${HOME}/.cache/Tox
983blacklist ${HOME}/.cache/Zeal
984blacklist ${HOME}/.cache/agenda
985blacklist ${HOME}/.cache/akonadi*
986blacklist ${HOME}/.cache/atril
987blacklist ${HOME}/.cache/attic
988blacklist ${HOME}/.cache/babl
989blacklist ${HOME}/.cache/bnox
990blacklist ${HOME}/.cache/borg
991blacklist ${HOME}/.cache/calibre
992blacklist ${HOME}/.cache/cantata
993blacklist ${HOME}/.cache/champlain
994blacklist ${HOME}/.cache/chromium
995blacklist ${HOME}/.cache/chromium-dev
996blacklist ${HOME}/.cache/cliqz
997blacklist ${HOME}/.cache/com.github.johnfactotum.Foliate
998blacklist ${HOME}/.cache/darktable
999blacklist ${HOME}/.cache/deja-dup
1000blacklist ${HOME}/.cache/discover
1001blacklist ${HOME}/.cache/dnox
1002blacklist ${HOME}/.cache/dolphin
1003blacklist ${HOME}/.cache/dolphin-emu
1004blacklist ${HOME}/.cache/ephemeral
1005blacklist ${HOME}/.cache/epiphany
1006blacklist ${HOME}/.cache/evolution
1007blacklist ${HOME}/.cache/falkon
1008blacklist ${HOME}/.cache/feedreader
1009blacklist ${HOME}/.cache/firedragon
1010blacklist ${HOME}/.cache/flaska.net/trojita
1011blacklist ${HOME}/.cache/folks
1012blacklist ${HOME}/.cache/font-manager
1013blacklist ${HOME}/.cache/fossamail
1014blacklist ${HOME}/.cache/fractal
1015blacklist ${HOME}/.cache/freecol
1016blacklist ${HOME}/.cache/gajim
1017blacklist ${HOME}/.cache/geary
1018blacklist ${HOME}/.cache/geeqie
1019blacklist ${HOME}/.cache/gegl-0.4
1020blacklist ${HOME}/.cache/gfeeds
1021blacklist ${HOME}/.cache/gimp
1022blacklist ${HOME}/.cache/gnome-boxes
1023blacklist ${HOME}/.cache/gnome-builder
1024blacklist ${HOME}/.cache/gnome-control-center
1025blacklist ${HOME}/.cache/gnome-recipes
1026blacklist ${HOME}/.cache/gnome-screenshot
1027blacklist ${HOME}/.cache/gnome-software
1028blacklist ${HOME}/.cache/gnome-twitch
1029blacklist ${HOME}/.cache/godot
1030blacklist ${HOME}/.cache/google-chrome
1031blacklist ${HOME}/.cache/google-chrome-beta
1032blacklist ${HOME}/.cache/google-chrome-unstable
1033blacklist ${HOME}/.cache/gradio
1034blacklist ${HOME}/.cache/gummi
1035blacklist ${HOME}/.cache/icedove
1036blacklist ${HOME}/.cache/inkscape
1037blacklist ${HOME}/.cache/inox
1038blacklist ${HOME}/.cache/io.github.lainsce.Notejot
1039blacklist ${HOME}/.cache/iridium
1040blacklist ${HOME}/.cache/JetBrains/CLion*
1041blacklist ${HOME}/.cache/kcmshell5
1042blacklist ${HOME}/.cache/kdenlive
1043blacklist ${HOME}/.cache/keepassxc
1044blacklist ${HOME}/.cache/kfind
1045blacklist ${HOME}/.cache/kinfocenter
1046blacklist ${HOME}/.cache/kmail2
1047blacklist ${HOME}/.cache/krunner
1048blacklist ${HOME}/.cache/krunnerbookmarkrunnerfirefoxdbfile.sqlite*
1049blacklist ${HOME}/.cache/kscreenlocker_greet
1050blacklist ${HOME}/.cache/ksmserver-logout-greeter
1051blacklist ${HOME}/.cache/ksplashqml
1052blacklist ${HOME}/.cache/kube
1053blacklist ${HOME}/.cache/kwin
1054blacklist ${HOME}/.cache/libgweather
1055blacklist ${HOME}/.cache/librewolf
1056blacklist ${HOME}/.cache/liferea
1057blacklist ${HOME}/.cache/lutris
1058blacklist ${HOME}/.cache/marker
1059blacklist ${HOME}/.cache/matrix-mirage
1060blacklist ${HOME}/.cache/microsoft-edge-beta
1061blacklist ${HOME}/.cache/microsoft-edge-dev
1062blacklist ${HOME}/.cache/midori
1063blacklist ${HOME}/.cache/minetest
1064blacklist ${HOME}/.cache/mirage
1065blacklist ${HOME}/.cache/moonchild productions/basilisk
1066blacklist ${HOME}/.cache/moonchild productions/pale moon
1067blacklist ${HOME}/.cache/mozilla
1068blacklist ${HOME}/.cache/ms-excel-online
1069blacklist ${HOME}/.cache/ms-office-online
1070blacklist ${HOME}/.cache/ms-onenote-online
1071blacklist ${HOME}/.cache/ms-outlook-online
1072blacklist ${HOME}/.cache/ms-powerpoint-online
1073blacklist ${HOME}/.cache/ms-skype-online
1074blacklist ${HOME}/.cache/ms-word-online
1075blacklist ${HOME}/.cache/mutt
1076blacklist ${HOME}/.cache/mypaint
1077blacklist ${HOME}/.cache/netsurf
1078blacklist ${HOME}/.cache/nheko
1079blacklist ${HOME}/.cache/okular
1080blacklist ${HOME}/.cache/opera
1081blacklist ${HOME}/.cache/opera-beta
1082blacklist ${HOME}/.cache/org.gabmus.gfeeds
1083blacklist ${HOME}/.cache/org.gnome.Books
1084blacklist ${HOME}/.cache/org.gnome.Maps
1085blacklist ${HOME}/.cache/pdfmod
1086blacklist ${HOME}/.cache/peek
1087blacklist ${HOME}/.cache/pip
1088blacklist ${HOME}/.cache/pipe-viewer
1089blacklist ${HOME}/.cache/plasmashell
1090blacklist ${HOME}/.cache/plasmashellbookmarkrunnerfirefoxdbfile.sqlite*
1091blacklist ${HOME}/.cache/psi
1092blacklist ${HOME}/.cache/qBittorrent
1093blacklist ${HOME}/.cache/quodlibet
1094blacklist ${HOME}/.cache/qupzilla
1095blacklist ${HOME}/.cache/qutebrowser
1096blacklist ${HOME}/.cache/rednotebook
1097blacklist ${HOME}/.cache/rhythmbox
1098blacklist ${HOME}/.cache/shotwell
1099blacklist ${HOME}/.cache/simple-scan
1100blacklist ${HOME}/.cache/slimjet
1101blacklist ${HOME}/.cache/smuxi
1102blacklist ${HOME}/.cache/snox
1103blacklist ${HOME}/.cache/spotify
1104blacklist ${HOME}/.cache/straw-viewer
1105blacklist ${HOME}/.cache/strawberry
1106blacklist ${HOME}/.cache/supertuxkart
1107blacklist ${HOME}/.cache/systemsettings
1108blacklist ${HOME}/.cache/telepathy
1109blacklist ${HOME}/.cache/thunderbird
1110blacklist ${HOME}/.cache/torbrowser
1111blacklist ${HOME}/.cache/transmission
1112blacklist ${HOME}/.cache/ungoogled-chromium
1113blacklist ${HOME}/.cache/vivaldi
1114blacklist ${HOME}/.cache/vivaldi-snapshot
1115blacklist ${HOME}/.cache/vlc
1116blacklist ${HOME}/.cache/vmware
1117blacklist ${HOME}/.cache/warsow-2.1
1118blacklist ${HOME}/.cache/waterfox
1119blacklist ${HOME}/.cache/wesnoth
1120blacklist ${HOME}/.cache/winetricks
1121blacklist ${HOME}/.cache/xmms2
1122blacklist ${HOME}/.cache/xournalpp
1123blacklist ${HOME}/.cache/xreader
1124blacklist ${HOME}/.cache/yandex-browser
1125blacklist ${HOME}/.cache/yandex-browser-beta
1126blacklist ${HOME}/.cache/youtube-dl
1127blacklist ${HOME}/.cache/youtube-viewer
1128blacklist ${HOME}/.cache/yt-dlp
1129blacklist ${HOME}/.cache/zim
diff --git a/etc/inc/whitelist-run-common.inc b/etc/inc/whitelist-run-common.inc
index 224d21064..d74655a08 100644
--- a/etc/inc/whitelist-run-common.inc
+++ b/etc/inc/whitelist-run-common.inc
@@ -7,5 +7,9 @@ whitelist /run/cups/cups.sock
7whitelist /run/dbus/system_bus_socket 7whitelist /run/dbus/system_bus_socket
8whitelist /run/media 8whitelist /run/media
9whitelist /run/resolvconf/resolv.conf 9whitelist /run/resolvconf/resolv.conf
10whitelist /run/shm
11whitelist /run/systemd/journal/dev-log
12whitelist /run/systemd/journal/socket
10whitelist /run/systemd/resolve/resolv.conf 13whitelist /run/systemd/resolve/resolv.conf
11whitelist /run/systemd/resolve/stub-resolv.conf 14whitelist /run/systemd/resolve/stub-resolv.conf
15whitelist /run/udev/data
diff --git a/etc/profile-a-l/Books.profile b/etc/profile-a-l/Books.profile
index 76fd21d32..a256e942f 100644
--- a/etc/profile-a-l/Books.profile
+++ b/etc/profile-a-l/Books.profile
@@ -1,5 +1,10 @@
1# Firejail profile for gnome-books 1# Firejail profile for gnome-books
2# This file is overwritten after every install/update 2# This file is overwritten after every install/update
3# Persistent local customizations
4include Books.local
5# Persistent global definitions
6# added by included profile
7#include globals.local
3 8
4 9
5# Temporary fix for https://github.com/netblue30/firejail/issues/2624 10# Temporary fix for https://github.com/netblue30/firejail/issues/2624
diff --git a/etc/profile-a-l/abiword.profile b/etc/profile-a-l/abiword.profile
index 005a502c4..0e7126458 100644
--- a/etc/profile-a-l/abiword.profile
+++ b/etc/profile-a-l/abiword.profile
@@ -42,7 +42,7 @@ tracelog
42private-bin abiword 42private-bin abiword
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc fonts,gtk-3.0,passwd 45private-etc alternatives,fonts,gtk-3.0,ld.so.cache,ld.so.preload,passwd
46private-tmp 46private-tmp
47 47
48# dbus-user none 48# dbus-user none
diff --git a/etc/profile-a-l/agetpkg.profile b/etc/profile-a-l/agetpkg.profile
index fea25fd58..dd3b2e59b 100644
--- a/etc/profile-a-l/agetpkg.profile
+++ b/etc/profile-a-l/agetpkg.profile
@@ -50,7 +50,7 @@ tracelog
50private-bin agetpkg,python3 50private-bin agetpkg,python3
51private-cache 51private-cache
52private-dev 52private-dev
53private-etc ca-certificates,crypto-policies,pki,resolv.conf,ssl 53private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl
54private-tmp 54private-tmp
55 55
56dbus-user none 56dbus-user none
diff --git a/etc/profile-a-l/akonadi_control.profile b/etc/profile-a-l/akonadi_control.profile
index 168e81985..f3fb678d1 100644
--- a/etc/profile-a-l/akonadi_control.profile
+++ b/etc/profile-a-l/akonadi_control.profile
@@ -27,6 +27,7 @@ include disable-exec.inc
27include disable-interpreters.inc 27include disable-interpreters.inc
28include disable-programs.inc 28include disable-programs.inc
29 29
30include whitelist-run-common.inc
30include whitelist-var-common.inc 31include whitelist-var-common.inc
31 32
32# disabled options below are not compatible with the apparmor profile for mysqld-akonadi. 33# disabled options below are not compatible with the apparmor profile for mysqld-akonadi.
diff --git a/etc/profile-a-l/akregator.profile b/etc/profile-a-l/akregator.profile
index d1e7df37b..39008d67a 100644
--- a/etc/profile-a-l/akregator.profile
+++ b/etc/profile-a-l/akregator.profile
@@ -25,6 +25,7 @@ whitelist ${HOME}/.local/share/akregator
25whitelist ${HOME}/.local/share/kssl 25whitelist ${HOME}/.local/share/kssl
26whitelist ${HOME}/.local/share/kxmlgui5/akregator 26whitelist ${HOME}/.local/share/kxmlgui5/akregator
27include whitelist-common.inc 27include whitelist-common.inc
28include whitelist-run-common.inc
28include whitelist-var-common.inc 29include whitelist-var-common.inc
29 30
30caps.drop all 31caps.drop all
diff --git a/etc/profile-a-l/alacarte.profile b/etc/profile-a-l/alacarte.profile
index 69b499c74..5a528595b 100644
--- a/etc/profile-a-l/alacarte.profile
+++ b/etc/profile-a-l/alacarte.profile
@@ -53,7 +53,7 @@ disable-mnt
53# private-bin alacarte,bash,python*,sh 53# private-bin alacarte,bash,python*,sh
54private-cache 54private-cache
55private-dev 55private-dev
56private-etc alternatives,dconf,fonts,gtk-3.0,locale.alias,locale.conf,login.defs,mime.types,nsswitch.conf,passwd,pki,X11,xdg 56private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,locale.alias,locale.conf,login.defs,mime.types,nsswitch.conf,passwd,pki,X11,xdg
57private-tmp 57private-tmp
58 58
59dbus-user none 59dbus-user none
diff --git a/etc/profile-a-l/alienarena.profile b/etc/profile-a-l/alienarena.profile
index 62857a3e2..68512e37b 100644
--- a/etc/profile-a-l/alienarena.profile
+++ b/etc/profile-a-l/alienarena.profile
@@ -29,7 +29,6 @@ caps.drop all
29netfilter 29netfilter
30nodvd 30nodvd
31nogroups 31nogroups
32noinput
33nonewprivs 32nonewprivs
34noroot 33noroot
35notv 34notv
diff --git a/etc/profile-a-l/amarok.profile b/etc/profile-a-l/amarok.profile
index e7b78f7d0..7d8ec481d 100644
--- a/etc/profile-a-l/amarok.profile
+++ b/etc/profile-a-l/amarok.profile
@@ -39,7 +39,7 @@ dbus-user.own org.kde.amarok
39dbus-user.own org.mpris.amarok 39dbus-user.own org.mpris.amarok
40dbus-user.own org.mpris.MediaPlayer2.amarok 40dbus-user.own org.mpris.MediaPlayer2.amarok
41dbus-user.talk org.freedesktop.Notifications 41dbus-user.talk org.freedesktop.Notifications
42dbus-user.talk org.kde.StatusNotifierWatcher 42?ALLOW_TRAY: dbus-user.talk org.kde.StatusNotifierWatcher
43# If you're not on kde-plasma add the next lines to your amarok.local. 43# If you're not on kde-plasma add the next lines to your amarok.local.
44#dbus-user.own org.kde.kded 44#dbus-user.own org.kde.kded
45#dbus-user.own org.kde.klauncher 45#dbus-user.own org.kde.klauncher
diff --git a/etc/profile-a-l/amule.profile b/etc/profile-a-l/amule.profile
index 3ce05c5bc..e82c145d1 100644
--- a/etc/profile-a-l/amule.profile
+++ b/etc/profile-a-l/amule.profile
@@ -32,6 +32,7 @@ nosound
32notv 32notv
33nou2f 33nou2f
34novideo 34novideo
35# Add netlink protocol to use UPnP
35protocol unix,inet,inet6 36protocol unix,inet,inet6
36seccomp 37seccomp
37shell none 38shell none
diff --git a/etc/profile-a-l/anki.profile b/etc/profile-a-l/anki.profile
index fa4dfbb6f..f6d711b2e 100644
--- a/etc/profile-a-l/anki.profile
+++ b/etc/profile-a-l/anki.profile
@@ -50,7 +50,7 @@ disable-mnt
50private-bin anki,python* 50private-bin anki,python*
51private-cache 51private-cache
52private-dev 52private-dev
53private-etc alternatives,ca-certificates,fonts,gtk-2.0,hostname,hosts,machine-id,pki,resolv.conf,ssl,Trolltech.conf 53private-etc alternatives,ca-certificates,fonts,gtk-2.0,hostname,hosts,ld.so.cache,ld.so.preload,machine-id,pki,resolv.conf,ssl,Trolltech.conf
54private-tmp 54private-tmp
55 55
56dbus-user none 56dbus-user none
diff --git a/etc/profile-a-l/aria2c.profile b/etc/profile-a-l/aria2c.profile
index 737cf3095..8aef75cd1 100644
--- a/etc/profile-a-l/aria2c.profile
+++ b/etc/profile-a-l/aria2c.profile
@@ -45,7 +45,7 @@ private-bin aria2c,gzip
45# Add 'private-cache' to your aria2c.local if you don't use Lutris/winetricks (see issue #2772). 45# Add 'private-cache' to your aria2c.local if you don't use Lutris/winetricks (see issue #2772).
46#private-cache 46#private-cache
47private-dev 47private-dev
48private-etc alternatives,ca-certificates,crypto-policies,groups,login.defs,machine-id,nsswitch.conf,passwd,pki,resolv.conf,ssl 48private-etc alternatives,ca-certificates,crypto-policies,groups,ld.so.cache,ld.so.preload,login.defs,machine-id,nsswitch.conf,passwd,pki,resolv.conf,ssl
49private-lib libreadline.so.* 49private-lib libreadline.so.*
50private-tmp 50private-tmp
51 51
diff --git a/etc/profile-a-l/ark.profile b/etc/profile-a-l/ark.profile
index 45071dc62..a26592f3a 100644
--- a/etc/profile-a-l/ark.profile
+++ b/etc/profile-a-l/ark.profile
@@ -16,6 +16,7 @@ include disable-interpreters.inc
16include disable-programs.inc 16include disable-programs.inc
17 17
18whitelist /usr/share/ark 18whitelist /usr/share/ark
19include whitelist-run-common.inc
19include whitelist-usr-share-common.inc 20include whitelist-usr-share-common.inc
20include whitelist-var-common.inc 21include whitelist-var-common.inc
21 22
diff --git a/etc/profile-a-l/arm.profile b/etc/profile-a-l/arm.profile
index 3253fb586..6676d42e9 100644
--- a/etc/profile-a-l/arm.profile
+++ b/etc/profile-a-l/arm.profile
@@ -43,6 +43,6 @@ tracelog
43disable-mnt 43disable-mnt
44private-bin arm,bash,ldconfig,lsof,ps,python*,sh,tor 44private-bin arm,bash,ldconfig,lsof,ps,python*,sh,tor
45private-dev 45private-dev
46private-etc alternatives,ca-certificates,crypto-policies,passwd,pki,ssl,tor 46private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,passwd,pki,ssl,tor
47private-tmp 47private-tmp
48 48
diff --git a/etc/profile-a-l/artha.profile b/etc/profile-a-l/artha.profile
index 8d74b6ba4..254f3f571 100644
--- a/etc/profile-a-l/artha.profile
+++ b/etc/profile-a-l/artha.profile
@@ -56,7 +56,7 @@ disable-mnt
56private-bin artha,enchant,notify-send 56private-bin artha,enchant,notify-send
57private-cache 57private-cache
58private-dev 58private-dev
59private-etc alternatives,fonts,machine-id 59private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
60private-lib libnotify.so.* 60private-lib libnotify.so.*
61private-tmp 61private-tmp
62 62
diff --git a/etc/profile-a-l/atool.profile b/etc/profile-a-l/atool.profile
index e377de2c8..6399bc1a3 100644
--- a/etc/profile-a-l/atool.profile
+++ b/etc/profile-a-l/atool.profile
@@ -13,7 +13,7 @@ include allow-perl.inc
13noroot 13noroot
14 14
15# without login.defs atool complains and uses UID/GID 1000 by default 15# without login.defs atool complains and uses UID/GID 1000 by default
16private-etc alternatives,group,login.defs,passwd 16private-etc alternatives,group,ld.so.cache,ld.so.preload,login.defs,passwd
17private-tmp 17private-tmp
18 18
19# Redirect 19# Redirect
diff --git a/etc/profile-a-l/atril.profile b/etc/profile-a-l/atril.profile
index f7c62926f..264bc0215 100644
--- a/etc/profile-a-l/atril.profile
+++ b/etc/profile-a-l/atril.profile
@@ -42,7 +42,7 @@ tracelog
42 42
43private-bin 7z,7za,7zr,atril,atril-previewer,atril-thumbnailer,sh,tar,unrar,unzip,zipnote 43private-bin 7z,7za,7zr,atril,atril-previewer,atril-thumbnailer,sh,tar,unrar,unzip,zipnote
44private-dev 44private-dev
45private-etc alternatives,fonts,ld.so.cache 45private-etc alternatives,fonts,ld.so.cache,ld.so.preload
46# atril uses webkit gtk to display epub files 46# atril uses webkit gtk to display epub files
47# waiting for globbing support in private-lib; for now hardcoding it to webkit2gtk-4.0 47# waiting for globbing support in private-lib; for now hardcoding it to webkit2gtk-4.0
48#private-lib webkit2gtk-4.0 - problems on Arch with the new version of WebKit 48#private-lib webkit2gtk-4.0 - problems on Arch with the new version of WebKit
diff --git a/etc/profile-a-l/audacious.profile b/etc/profile-a-l/audacious.profile
index d71370b7e..e9ecdd72e 100644
--- a/etc/profile-a-l/audacious.profile
+++ b/etc/profile-a-l/audacious.profile
@@ -17,6 +17,7 @@ include disable-interpreters.inc
17include disable-programs.inc 17include disable-programs.inc
18include disable-xdg.inc 18include disable-xdg.inc
19 19
20include whitelist-run-common.inc
20include whitelist-var-common.inc 21include whitelist-var-common.inc
21 22
22apparmor 23apparmor
diff --git a/etc/profile-a-l/authenticator-rs.profile b/etc/profile-a-l/authenticator-rs.profile
index 411c5f4d3..a8af1928b 100644
--- a/etc/profile-a-l/authenticator-rs.profile
+++ b/etc/profile-a-l/authenticator-rs.profile
@@ -47,7 +47,7 @@ disable-mnt
47private-bin authenticator-rs 47private-bin authenticator-rs
48private-cache 48private-cache
49private-dev 49private-dev
50private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-2.0,gtk-3.0,pki,resolv.conf,ssl,xdg 50private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-2.0,gtk-3.0,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl,xdg
51private-tmp 51private-tmp
52 52
53dbus-user filter 53dbus-user filter
diff --git a/etc/profile-a-l/authenticator.profile b/etc/profile-a-l/authenticator.profile
index 0f0fb7ceb..f9a03ca68 100644
--- a/etc/profile-a-l/authenticator.profile
+++ b/etc/profile-a-l/authenticator.profile
@@ -39,7 +39,7 @@ shell none
39disable-mnt 39disable-mnt
40# private-bin authenticator,python* 40# private-bin authenticator,python*
41private-dev 41private-dev
42private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,pki,resolv.conf,ssl 42private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl
43private-tmp 43private-tmp
44 44
45# makes settings immutable 45# makes settings immutable
diff --git a/etc/profile-a-l/baloo_file.profile b/etc/profile-a-l/baloo_file.profile
index 252016bec..55d2453d8 100644
--- a/etc/profile-a-l/baloo_file.profile
+++ b/etc/profile-a-l/baloo_file.profile
@@ -25,6 +25,7 @@ include disable-exec.inc
25include disable-interpreters.inc 25include disable-interpreters.inc
26include disable-programs.inc 26include disable-programs.inc
27 27
28include whitelist-run-common.inc
28include whitelist-var-common.inc 29include whitelist-var-common.inc
29 30
30apparmor 31apparmor
diff --git a/etc/profile-a-l/balsa.profile b/etc/profile-a-l/balsa.profile
index 197f787ca..be3543b08 100644
--- a/etc/profile-a-l/balsa.profile
+++ b/etc/profile-a-l/balsa.profile
@@ -66,7 +66,7 @@ tracelog
66private-bin balsa,balsa-ab,gpg,gpg-agent,gpg2,gpgsm 66private-bin balsa,balsa-ab,gpg,gpg-agent,gpg2,gpgsm
67private-cache 67private-cache
68private-dev 68private-dev
69private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gcrypt,groups,gtk-2.0,gtk-3.0,hostname,hosts,mailname,passwd,pki,resolv.conf,selinux,ssl,xdg 69private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gcrypt,groups,gtk-2.0,gtk-3.0,hostname,hosts,ld.so.cache,ld.so.preload,mailname,passwd,pki,resolv.conf,selinux,ssl,xdg
70private-tmp 70private-tmp
71writable-run-user 71writable-run-user
72writable-var 72writable-var
@@ -79,4 +79,4 @@ dbus-user.talk org.freedesktop.secrets
79dbus-user.talk org.gnome.keyring.SystemPrompter 79dbus-user.talk org.gnome.keyring.SystemPrompter
80dbus-system none 80dbus-system none
81 81
82read-only ${HOME}/.mozilla/firefox/profiles.ini \ No newline at end of file 82read-only ${HOME}/.mozilla/firefox/profiles.ini
diff --git a/etc/profile-a-l/bibletime.profile b/etc/profile-a-l/bibletime.profile
index 0104dc181..be29ce8a7 100644
--- a/etc/profile-a-l/bibletime.profile
+++ b/etc/profile-a-l/bibletime.profile
@@ -52,7 +52,7 @@ disable-mnt
52# private-bin bibletime,qt5ct 52# private-bin bibletime,qt5ct
53private-cache 53private-cache
54private-dev 54private-dev
55private-etc alternatives,ca-certificates,crypto-policies,fonts,login.defs,machine-id,passwd,pki,resolv.conf,ssl,sword,sword.conf 55private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,login.defs,machine-id,passwd,pki,resolv.conf,ssl,sword,sword.conf
56private-tmp 56private-tmp
57 57
58dbus-user none 58dbus-user none
diff --git a/etc/profile-a-l/bijiben.profile b/etc/profile-a-l/bijiben.profile
index 61cd792b1..b86232860 100644
--- a/etc/profile-a-l/bijiben.profile
+++ b/etc/profile-a-l/bijiben.profile
@@ -51,7 +51,7 @@ disable-mnt
51private-bin bijiben 51private-bin bijiben
52# private-cache -- access to .cache/tracker is required 52# private-cache -- access to .cache/tracker is required
53private-dev 53private-dev
54private-etc dconf,fonts,gtk-3.0,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload 54private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload
55private-tmp 55private-tmp
56 56
57dbus-user filter 57dbus-user filter
diff --git a/etc/profile-a-l/bitwarden.profile b/etc/profile-a-l/bitwarden.profile
index ba2eb2ea7..f8114c71b 100644
--- a/etc/profile-a-l/bitwarden.profile
+++ b/etc/profile-a-l/bitwarden.profile
@@ -23,7 +23,7 @@ no3d
23nosound 23nosound
24 24
25?HAS_APPIMAGE: ignore private-dev 25?HAS_APPIMAGE: ignore private-dev
26private-etc alternatives,ca-certificates,crypto-policies,fonts,hosts,nsswitch.conf,pki,resolv.conf,ssl 26private-etc alternatives,ca-certificates,crypto-policies,fonts,hosts,ld.so.cache,ld.so.preload,nsswitch.conf,pki,resolv.conf,ssl
27private-opt Bitwarden 27private-opt Bitwarden
28 28
29# Redirect 29# Redirect
diff --git a/etc/profile-a-l/bless.profile b/etc/profile-a-l/bless.profile
index 61d1c3a1e..3e20ed133 100644
--- a/etc/profile-a-l/bless.profile
+++ b/etc/profile-a-l/bless.profile
@@ -35,7 +35,7 @@ shell none
35# private-bin bash,bless,mono,sh 35# private-bin bash,bless,mono,sh
36private-cache 36private-cache
37private-dev 37private-dev
38private-etc alternatives,fonts,mono 38private-etc alternatives,fonts,ld.so.cache,ld.so.preload,mono
39private-tmp 39private-tmp
40 40
41dbus-user none 41dbus-user none
diff --git a/etc/profile-a-l/blobby.profile b/etc/profile-a-l/blobby.profile
index 11d705c5b..d7df3bc49 100644
--- a/etc/profile-a-l/blobby.profile
+++ b/etc/profile-a-l/blobby.profile
@@ -41,7 +41,7 @@ tracelog
41disable-mnt 41disable-mnt
42private-bin blobby 42private-bin blobby
43private-dev 43private-dev
44private-etc alsa,alternatives,asound.conf,drirc,group,hosts,login.defs,machine-id,passwd,pulse 44private-etc alsa,alternatives,asound.conf,drirc,group,hosts,ld.so.cache,ld.so.preload,login.defs,machine-id,passwd,pulse
45private-lib 45private-lib
46private-tmp 46private-tmp
47 47
diff --git a/etc/profile-a-l/blobwars.profile b/etc/profile-a-l/blobwars.profile
index 6e3d4256c..cc2fda3f2 100644
--- a/etc/profile-a-l/blobwars.profile
+++ b/etc/profile-a-l/blobwars.profile
@@ -19,6 +19,7 @@ include disable-xdg.inc
19mkdir ${HOME}/.parallelrealities/blobwars 19mkdir ${HOME}/.parallelrealities/blobwars
20whitelist ${HOME}/.parallelrealities/blobwars 20whitelist ${HOME}/.parallelrealities/blobwars
21whitelist /usr/share/blobwars 21whitelist /usr/share/blobwars
22whitelist /usr/share/games/blobwars
22include whitelist-common.inc 23include whitelist-common.inc
23include whitelist-usr-share-common.inc 24include whitelist-usr-share-common.inc
24include whitelist-var-common.inc 25include whitelist-var-common.inc
@@ -28,7 +29,6 @@ caps.drop all
28net none 29net none
29nodvd 30nodvd
30nogroups 31nogroups
31noinput
32nonewprivs 32nonewprivs
33noroot 33noroot
34notv 34notv
@@ -43,7 +43,7 @@ disable-mnt
43private-bin blobwars 43private-bin blobwars
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc machine-id 46private-etc alternatives,ld.so.cache,ld.so.preload,machine-id
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-a-l/bsdtar.profile b/etc/profile-a-l/bsdtar.profile
index d731a6a6e..fbc7c9056 100644
--- a/etc/profile-a-l/bsdtar.profile
+++ b/etc/profile-a-l/bsdtar.profile
@@ -6,7 +6,7 @@ include bsdtar.local
6# Persistent global definitions 6# Persistent global definitions
7include globals.local 7include globals.local
8 8
9private-etc alternatives,group,localtime,passwd 9private-etc alternatives,group,ld.so.cache,ld.so.preload,localtime,passwd
10 10
11# Redirect 11# Redirect
12include archiver-common.profile 12include archiver-common.profile
diff --git a/etc/profile-a-l/build-systems-common.profile b/etc/profile-a-l/build-systems-common.profile
new file mode 100644
index 000000000..1b199d612
--- /dev/null
+++ b/etc/profile-a-l/build-systems-common.profile
@@ -0,0 +1,66 @@
1# Firejail profile for build-systems-common
2# This file is overwritten after every install/update
3# Persistent local customizations
4include build-systems-common.local
5# Persistent global definitions
6# added by caller profile
7#include globals.local
8
9ignore noexec ${HOME}
10ignore noexec /tmp
11
12# Allow /bin/sh (blacklisted by disable-shell.inc)
13include allow-bin-sh.inc
14
15# Allows files commonly used by IDEs
16include allow-common-devel.inc
17
18# Allow ssh (blacklisted by disable-common.inc)
19#include allow-ssh.inc
20
21blacklist ${RUNUSER}
22
23include disable-common.inc
24include disable-exec.inc
25include disable-interpreters.inc
26include disable-programs.inc
27include disable-shell.inc
28include disable-X11.inc
29include disable-xdg.inc
30
31#whitelist ${HOME}/Projects
32#include whitelist-common.inc
33
34whitelist /usr/share/pkgconfig
35include whitelist-run-common.inc
36include whitelist-usr-share-common.inc
37include whitelist-var-common.inc
38
39caps.drop all
40ipc-namespace
41machine-id
42# net none
43netfilter
44no3d
45nodvd
46nogroups
47noinput
48nonewprivs
49noroot
50nosound
51notv
52nou2f
53novideo
54protocol unix,inet,inet6
55seccomp
56seccomp.block-secondary
57shell none
58tracelog
59
60disable-mnt
61private-cache
62private-dev
63private-tmp
64
65dbus-user none
66dbus-system none
diff --git a/etc/profile-a-l/bundle.profile b/etc/profile-a-l/bundle.profile
new file mode 100644
index 000000000..bb82022b1
--- /dev/null
+++ b/etc/profile-a-l/bundle.profile
@@ -0,0 +1,23 @@
1# Firejail profile for bundle
2# Description: Ruby Dependency Management
3# This file is overwritten after every install/update
4quiet
5# Persistent local customizations
6include bundle.local
7# Persistent global definitions
8include globals.local
9
10noblacklist ${HOME}/.bundle
11
12# Allow ruby (blacklisted by disable-interpreters.inc)
13include allow-ruby.inc
14
15#whitelist ${HOME}/.bundle
16#whitelist ${HOME}/.gem
17#whitelist ${HOME}/.local/share/gem
18whitelist /usr/share/gems
19whitelist /usr/share/ruby
20whitelist /usr/share/rubygems
21
22# Redirect
23include build-systems-common.profile
diff --git a/etc/profile-a-l/cameramonitor.profile b/etc/profile-a-l/cameramonitor.profile
index ae9e0f1d2..92c455144 100644
--- a/etc/profile-a-l/cameramonitor.profile
+++ b/etc/profile-a-l/cameramonitor.profile
@@ -46,7 +46,7 @@ tracelog
46disable-mnt 46disable-mnt
47private-bin cameramonitor,python* 47private-bin cameramonitor,python*
48private-cache 48private-cache
49private-etc alternatives,fonts 49private-etc alternatives,fonts,ld.so.cache,ld.so.preload
50private-tmp 50private-tmp
51 51
52# dbus-user none 52# dbus-user none
diff --git a/etc/profile-a-l/cargo.profile b/etc/profile-a-l/cargo.profile
index ff46cd429..4c8afd895 100644
--- a/etc/profile-a-l/cargo.profile
+++ b/etc/profile-a-l/cargo.profile
@@ -7,66 +7,18 @@ include cargo.local
7# Persistent global definitions 7# Persistent global definitions
8include globals.local 8include globals.local
9 9
10ignore noexec ${HOME} 10ignore read-only ${HOME}/.cargo/bin
11ignore noexec /tmp
12
13blacklist /tmp/.X11-unix
14blacklist ${RUNUSER}
15 11
16noblacklist ${HOME}/.cargo/credentials 12noblacklist ${HOME}/.cargo/credentials
17noblacklist ${HOME}/.cargo/credentials.toml 13noblacklist ${HOME}/.cargo/credentials.toml
18 14
19# Allows files commonly used by IDEs
20include allow-common-devel.inc
21
22# Allow ssh (blacklisted by disable-common.inc)
23#include allow-ssh.inc
24
25include disable-common.inc
26include disable-exec.inc
27include disable-interpreters.inc
28include disable-programs.inc
29include disable-xdg.inc
30
31#mkdir ${HOME}/.cargo
32#whitelist ${HOME}/YOUR_CARGO_PROJECTS
33#whitelist ${HOME}/.cargo 15#whitelist ${HOME}/.cargo
34#whitelist ${HOME}/.rustup 16#whitelist ${HOME}/.rustup
35#include whitelist-common.inc
36whitelist /usr/share/pkgconfig
37include whitelist-runuser-common.inc
38include whitelist-usr-share-common.inc
39include whitelist-var-common.inc
40 17
41caps.drop all
42ipc-namespace
43machine-id
44netfilter
45no3d
46nodvd
47nogroups
48noinput
49nonewprivs
50noroot
51nosound
52notv
53nou2f
54novideo
55protocol unix,inet,inet6
56seccomp
57seccomp.block-secondary
58shell none
59tracelog
60
61disable-mnt
62#private-bin cargo,rustc 18#private-bin cargo,rustc
63private-cache
64private-dev
65private-etc alternatives,ca-certificates,crypto-policies,group,host.conf,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,locale,locale.alias,locale.conf,localtime,magic,magic.mgc,nsswitch.conf,passwd,pki,protocols,resolv.conf,rpc,services,ssl 19private-etc alternatives,ca-certificates,crypto-policies,group,host.conf,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,locale,locale.alias,locale.conf,localtime,magic,magic.mgc,nsswitch.conf,passwd,pki,protocols,resolv.conf,rpc,services,ssl
66private-tmp
67
68dbus-user none
69dbus-system none
70 20
71memory-deny-write-execute 21memory-deny-write-execute
72read-write ${HOME}/.cargo/bin 22
23# Redirect
24include build-systems-common.profile
diff --git a/etc/profile-a-l/cawbird.profile b/etc/profile-a-l/cawbird.profile
index 78df5af83..c7a98250e 100644
--- a/etc/profile-a-l/cawbird.profile
+++ b/etc/profile-a-l/cawbird.profile
@@ -39,7 +39,7 @@ disable-mnt
39private-bin cawbird 39private-bin cawbird
40private-cache 40private-cache
41private-dev 41private-dev
42private-etc alternatives,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,mime.types,nsswitch.conf,pki,resolv.conf,ssl,X11,xdg 42private-etc alternatives,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,mime.types,nsswitch.conf,pki,resolv.conf,ssl,X11,xdg
43private-tmp 43private-tmp
44 44
45# dbus-user none 45# dbus-user none
diff --git a/etc/profile-a-l/celluloid.profile b/etc/profile-a-l/celluloid.profile
index 0beeaafdd..1a9340632 100644
--- a/etc/profile-a-l/celluloid.profile
+++ b/etc/profile-a-l/celluloid.profile
@@ -53,7 +53,7 @@ tracelog
53 53
54private-bin celluloid,env,gnome-mpv,python*,youtube-dl 54private-bin celluloid,env,gnome-mpv,python*,youtube-dl
55private-cache 55private-cache
56private-etc alternatives,ca-certificates,crypto-policies,dconf,drirc,fonts,gtk-3.0,hosts,ld.so.cache,libva.conf,localtime,machine-id,pkcs11,pki,resolv.conf,selinux,ssl,xdg 56private-etc alternatives,ca-certificates,crypto-policies,dconf,drirc,fonts,gtk-3.0,hosts,ld.so.cache,ld.so.preload,libva.conf,localtime,machine-id,pkcs11,pki,resolv.conf,selinux,ssl,xdg
57private-dev 57private-dev
58private-tmp 58private-tmp
59 59
diff --git a/etc/profile-a-l/cheese.profile b/etc/profile-a-l/cheese.profile
index c2fc064f3..713d8a5e4 100644
--- a/etc/profile-a-l/cheese.profile
+++ b/etc/profile-a-l/cheese.profile
@@ -9,17 +9,23 @@ include globals.local
9noblacklist ${VIDEOS} 9noblacklist ${VIDEOS}
10noblacklist ${PICTURES} 10noblacklist ${PICTURES}
11 11
12include allow-python3.inc
13
12include disable-common.inc 14include disable-common.inc
13include disable-devel.inc 15include disable-devel.inc
14include disable-exec.inc 16include disable-exec.inc
15include disable-interpreters.inc 17include disable-interpreters.inc
16include disable-programs.inc 18include disable-programs.inc
19include disable-shell.inc
17include disable-xdg.inc 20include disable-xdg.inc
18 21
19whitelist ${VIDEOS} 22whitelist ${VIDEOS}
20whitelist ${PICTURES} 23whitelist ${PICTURES}
24whitelist /usr/libexec/gstreamer-1.0/gst-plugin-scanner
21whitelist /usr/share/gnome-video-effects 25whitelist /usr/share/gnome-video-effects
26whitelist /usr/share/gstreamer-1.0
22include whitelist-common.inc 27include whitelist-common.inc
28include whitelist-run-common.inc
23include whitelist-runuser-common.inc 29include whitelist-runuser-common.inc
24include whitelist-usr-share-common.inc 30include whitelist-usr-share-common.inc
25include whitelist-var-common.inc 31include whitelist-var-common.inc
@@ -30,21 +36,26 @@ machine-id
30net none 36net none
31nodvd 37nodvd
32nogroups 38nogroups
39noinput
33nonewprivs 40nonewprivs
34noroot 41noroot
42nosound
35notv 43notv
36nou2f 44nou2f
37protocol unix 45protocol unix
38seccomp 46seccomp
47seccomp.block-secondary
39shell none 48shell none
40tracelog 49tracelog
41 50
42disable-mnt 51disable-mnt
43private-bin cheese 52private-bin cheese
44private-cache 53private-cache
45private-etc alternatives,clutter-1.0,dconf,drirc,fonts,gtk-3.0 54private-dev
55private-etc alternatives,clutter-1.0,dconf,drirc,fonts,gtk-3.0,ld.so.cache,ld.so.preload
46private-tmp 56private-tmp
47 57
48dbus-user filter 58dbus-user filter
59dbus-user.own org.gnome.Cheese
49dbus-user.talk ca.desrt.dconf 60dbus-user.talk ca.desrt.dconf
50dbus-system none 61dbus-system none
diff --git a/etc/profile-a-l/clawsker.profile b/etc/profile-a-l/clawsker.profile
index 8ccf67ba1..677d2b7eb 100644
--- a/etc/profile-a-l/clawsker.profile
+++ b/etc/profile-a-l/clawsker.profile
@@ -44,7 +44,7 @@ disable-mnt
44private-bin bash,clawsker,perl,sh,which 44private-bin bash,clawsker,perl,sh,which
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc alternatives,fonts 47private-etc alternatives,fonts,ld.so.cache,ld.so.preload
48private-lib girepository-1.*,libdbus-glib-1.so.*,libetpan.so.*,libgirepository-1.*,libgtk-3.so.*,libgtk-x11-2.0.so.*,libstartup-notification-1.so.*,perl* 48private-lib girepository-1.*,libdbus-glib-1.so.*,libetpan.so.*,libgirepository-1.*,libgtk-3.so.*,libgtk-x11-2.0.so.*,libstartup-notification-1.so.*,perl*
49private-tmp 49private-tmp
50 50
diff --git a/etc/profile-a-l/cmake.profile b/etc/profile-a-l/cmake.profile
new file mode 100644
index 000000000..26cc2a00a
--- /dev/null
+++ b/etc/profile-a-l/cmake.profile
@@ -0,0 +1,13 @@
1# Firejail profile for cargo
2# Description: The Rust package manager
3# This file is overwritten after every install/update
4quiet
5# Persistent local customizations
6include cargo.local
7# Persistent global definitions
8include globals.local
9
10memory-deny-write-execute
11
12# Redirect
13include build-systems-common.profile
diff --git a/etc/profile-a-l/cmus.profile b/etc/profile-a-l/cmus.profile
index 19a30e694..7421debe0 100644
--- a/etc/profile-a-l/cmus.profile
+++ b/etc/profile-a-l/cmus.profile
@@ -27,4 +27,4 @@ seccomp
27shell none 27shell none
28 28
29private-bin cmus 29private-bin cmus
30private-etc alternatives,asound.conf,ca-certificates,crypto-policies,group,machine-id,pki,pulse,resolv.conf,ssl 30private-etc alternatives,asound.conf,ca-certificates,crypto-policies,group,ld.so.cache,ld.so.preload,machine-id,pki,pulse,resolv.conf,ssl
diff --git a/etc/profile-a-l/codium.profile b/etc/profile-a-l/codium.profile
new file mode 100644
index 000000000..9ff87ed8a
--- /dev/null
+++ b/etc/profile-a-l/codium.profile
@@ -0,0 +1,10 @@
1# Firejail profile alias for VSCodium
2# This file is overwritten after every install/update
3# Persistent local customizations
4include codium.local
5# Persistent global definitions
6# added by included profile
7#include globals.local
8
9# Redirect
10include vscodium.profile
diff --git a/etc/profile-a-l/cola.profile b/etc/profile-a-l/cola.profile
index e5debfd82..97bf6d394 100644
--- a/etc/profile-a-l/cola.profile
+++ b/etc/profile-a-l/cola.profile
@@ -7,4 +7,4 @@ include cola.local
7include globals.local 7include globals.local
8 8
9# Redirect 9# Redirect
10include git-cola.profile \ No newline at end of file 10include git-cola.profile
diff --git a/etc/profile-a-l/com.github.bleakgrey.tootle.profile b/etc/profile-a-l/com.github.bleakgrey.tootle.profile
index 8d9de93bb..27780b669 100644
--- a/etc/profile-a-l/com.github.bleakgrey.tootle.profile
+++ b/etc/profile-a-l/com.github.bleakgrey.tootle.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin com.github.bleakgrey.tootle 45private-bin com.github.bleakgrey.tootle
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,dconf,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,machine-id mime.types,nsswitch.conf,pki,pulse,resolv.conf,ssl,X11,xdg 48private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,dconf,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,machine-id mime.types,nsswitch.conf,pki,pulse,resolv.conf,ssl,X11,xdg
49private-tmp 49private-tmp
50 50
51# Settings are immutable 51# Settings are immutable
diff --git a/etc/profile-a-l/com.github.dahenson.agenda.profile b/etc/profile-a-l/com.github.dahenson.agenda.profile
index e7aa32be9..0e29d90de 100644
--- a/etc/profile-a-l/com.github.dahenson.agenda.profile
+++ b/etc/profile-a-l/com.github.dahenson.agenda.profile
@@ -52,7 +52,7 @@ disable-mnt
52private-bin com.github.dahenson.agenda 52private-bin com.github.dahenson.agenda
53private-cache 53private-cache
54private-dev 54private-dev
55private-etc dconf,fonts,gtk-3.0 55private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload
56private-tmp 56private-tmp
57 57
58dbus-user filter 58dbus-user filter
diff --git a/etc/profile-a-l/com.github.johnfactotum.Foliate.profile b/etc/profile-a-l/com.github.johnfactotum.Foliate.profile
index aa9a19fcb..24222164b 100644
--- a/etc/profile-a-l/com.github.johnfactotum.Foliate.profile
+++ b/etc/profile-a-l/com.github.johnfactotum.Foliate.profile
@@ -55,7 +55,7 @@ disable-mnt
55private-bin com.github.johnfactotum.Foliate,gjs 55private-bin com.github.johnfactotum.Foliate,gjs
56private-cache 56private-cache
57private-dev 57private-dev
58private-etc dconf,fonts,gconf,gtk-3.0 58private-etc alternatives,dconf,fonts,gconf,gtk-3.0,ld.so.cache,ld.so.preload
59private-tmp 59private-tmp
60 60
61read-only ${HOME} 61read-only ${HOME}
diff --git a/etc/profile-a-l/coyim.profile b/etc/profile-a-l/coyim.profile
index 03218d85a..099253b21 100644
--- a/etc/profile-a-l/coyim.profile
+++ b/etc/profile-a-l/coyim.profile
@@ -40,7 +40,7 @@ tracelog
40disable-mnt 40disable-mnt
41private-cache 41private-cache
42private-dev 42private-dev
43private-etc alternatives,ca-certificates,crypto-policies,fonts,machine-id,pki,ssl 43private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,machine-id,pki,ssl
44private-tmp 44private-tmp
45 45
46dbus-user none 46dbus-user none
diff --git a/etc/profile-a-l/crow.profile b/etc/profile-a-l/crow.profile
index 177abf829..ed1213687 100644
--- a/etc/profile-a-l/crow.profile
+++ b/etc/profile-a-l/crow.profile
@@ -39,7 +39,7 @@ shell none
39disable-mnt 39disable-mnt
40private-bin crow 40private-bin crow
41private-dev 41private-dev
42private-etc alternatives,asound.conf,ca-certificates,crypto-policies,dconf,fonts,machine-id,nsswitch.conf,pki,pulse,resolv.conf,ssl 42private-etc alternatives,asound.conf,ca-certificates,crypto-policies,dconf,fonts,ld.so.cache,ld.so.preload,machine-id,nsswitch.conf,pki,pulse,resolv.conf,ssl
43private-opt none 43private-opt none
44private-tmp 44private-tmp
45private-srv none 45private-srv none
diff --git a/etc/profile-a-l/d-feet.profile b/etc/profile-a-l/d-feet.profile
index 0e4b8d475..c75bc756f 100644
--- a/etc/profile-a-l/d-feet.profile
+++ b/etc/profile-a-l/d-feet.profile
@@ -50,7 +50,7 @@ disable-mnt
50private-bin d-feet,python* 50private-bin d-feet,python*
51private-cache 51private-cache
52private-dev 52private-dev
53private-etc alternatives,dbus-1,fonts,machine-id 53private-etc alternatives,dbus-1,fonts,ld.so.cache,ld.so.preload,machine-id
54private-tmp 54private-tmp
55 55
56#memory-deny-write-execute - breaks on Arch (see issue #1803) 56#memory-deny-write-execute - breaks on Arch (see issue #1803)
diff --git a/etc/profile-a-l/dbus-send.profile b/etc/profile-a-l/dbus-send.profile
index 768f1ac2c..e1b96f186 100644
--- a/etc/profile-a-l/dbus-send.profile
+++ b/etc/profile-a-l/dbus-send.profile
@@ -51,7 +51,7 @@ private
51private-bin dbus-send 51private-bin dbus-send
52private-cache 52private-cache
53private-dev 53private-dev
54private-etc alternatives,dbus-1 54private-etc alternatives,dbus-1,ld.so.cache,ld.so.preload
55private-lib libpcre* 55private-lib libpcre*
56private-tmp 56private-tmp
57 57
diff --git a/etc/profile-a-l/dconf-editor.profile b/etc/profile-a-l/dconf-editor.profile
index f57063ab6..8c3c22dcf 100644
--- a/etc/profile-a-l/dconf-editor.profile
+++ b/etc/profile-a-l/dconf-editor.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin dconf-editor 43private-bin dconf-editor
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,dconf,fonts,gtk-3.0,machine-id 46private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,machine-id
47private-lib 47private-lib
48private-tmp 48private-tmp
49 49
diff --git a/etc/profile-a-l/dconf.profile b/etc/profile-a-l/dconf.profile
index 8b7c86789..b170842c3 100644
--- a/etc/profile-a-l/dconf.profile
+++ b/etc/profile-a-l/dconf.profile
@@ -46,7 +46,7 @@ disable-mnt
46private-bin dconf,gsettings 46private-bin dconf,gsettings
47private-cache 47private-cache
48private-dev 48private-dev
49private-etc alternatives,dconf 49private-etc alternatives,dconf,ld.so.cache,ld.so.preload
50private-lib 50private-lib
51private-tmp 51private-tmp
52 52
diff --git a/etc/profile-a-l/ddgtk.profile b/etc/profile-a-l/ddgtk.profile
index 701755d93..e9b8f5c47 100644
--- a/etc/profile-a-l/ddgtk.profile
+++ b/etc/profile-a-l/ddgtk.profile
@@ -45,7 +45,7 @@ tracelog
45disable-mnt 45disable-mnt
46private-bin bash,dd,ddgtk,grep,lsblk,python*,sed,sh,tr 46private-bin bash,dd,ddgtk,grep,lsblk,python*,sed,sh,tr
47private-cache 47private-cache
48private-etc alternatives,fonts 48private-etc alternatives,fonts,ld.so.cache,ld.so.preload
49private-tmp 49private-tmp
50 50
51dbus-user none 51dbus-user none
diff --git a/etc/profile-a-l/devhelp.profile b/etc/profile-a-l/devhelp.profile
index a416bc27e..562f6b105 100644
--- a/etc/profile-a-l/devhelp.profile
+++ b/etc/profile-a-l/devhelp.profile
@@ -42,7 +42,7 @@ disable-mnt
42private-bin devhelp 42private-bin devhelp
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc alternatives,dconf,fonts,ld.so.cache,machine-id,ssl 45private-etc alternatives,dconf,fonts,ld.so.cache,ld.so.preload,machine-id,ssl
46private-tmp 46private-tmp
47 47
48# makes settings immutable 48# makes settings immutable
diff --git a/etc/profile-a-l/devilspie.profile b/etc/profile-a-l/devilspie.profile
index 89c8e1ae8..a0f24c388 100644
--- a/etc/profile-a-l/devilspie.profile
+++ b/etc/profile-a-l/devilspie.profile
@@ -48,7 +48,7 @@ disable-mnt
48private-bin devilspie 48private-bin devilspie
49private-cache 49private-cache
50private-dev 50private-dev
51private-etc alternatives 51private-etc alternatives,ld.so.cache,ld.so.preload
52private-lib gconv 52private-lib gconv
53private-tmp 53private-tmp
54 54
diff --git a/etc/profile-a-l/discord-common.profile b/etc/profile-a-l/discord-common.profile
index 2613027ba..c04e38899 100644
--- a/etc/profile-a-l/discord-common.profile
+++ b/etc/profile-a-l/discord-common.profile
@@ -24,7 +24,7 @@ whitelist ${HOME}/.config/BetterDiscord
24whitelist ${HOME}/.local/share/betterdiscordctl 24whitelist ${HOME}/.local/share/betterdiscordctl
25 25
26private-bin bash,cut,echo,egrep,electron,electron[0-9],electron[0-9][0-9],fish,grep,head,sed,sh,tclsh,tr,xdg-mime,xdg-open,zsh 26private-bin bash,cut,echo,egrep,electron,electron[0-9],electron[0-9][0-9],fish,grep,head,sed,sh,tclsh,tr,xdg-mime,xdg-open,zsh
27private-etc alternatives,ca-certificates,crypto-policies,fonts,group,ld.so.cache,localtime,login.defs,machine-id,password,pki,pulse,resolv.conf,ssl 27private-etc alternatives,ca-certificates,crypto-policies,fonts,group,ld.so.cache,ld.so.preload,localtime,login.defs,machine-id,password,pki,pulse,resolv.conf,ssl
28 28
29join-or-start discord 29join-or-start discord
30 30
diff --git a/etc/profile-a-l/display.profile b/etc/profile-a-l/display.profile
index 0f134bd87..8a8d816a3 100644
--- a/etc/profile-a-l/display.profile
+++ b/etc/profile-a-l/display.profile
@@ -40,7 +40,7 @@ shell none
40private-bin display,python* 40private-bin display,python*
41private-dev 41private-dev
42# On Debian-based systems, display is a symlink in /etc/alternatives 42# On Debian-based systems, display is a symlink in /etc/alternatives
43private-etc alternatives 43private-etc alternatives,ld.so.cache,ld.so.preload
44private-tmp 44private-tmp
45 45
46dbus-user none 46dbus-user none
diff --git a/etc/profile-a-l/dragon.profile b/etc/profile-a-l/dragon.profile
index 26243ab4e..d5591adfb 100644
--- a/etc/profile-a-l/dragon.profile
+++ b/etc/profile-a-l/dragon.profile
@@ -19,6 +19,7 @@ include disable-shell.inc
19include disable-xdg.inc 19include disable-xdg.inc
20 20
21whitelist /usr/share/dragonplayer 21whitelist /usr/share/dragonplayer
22include whitelist-run-common.inc
22include whitelist-usr-share-common.inc 23include whitelist-usr-share-common.inc
23include whitelist-var-common.inc 24include whitelist-var-common.inc
24 25
diff --git a/etc/profile-a-l/drawio.profile b/etc/profile-a-l/drawio.profile
index 6d5e2501f..df7be55de 100644
--- a/etc/profile-a-l/drawio.profile
+++ b/etc/profile-a-l/drawio.profile
@@ -45,7 +45,7 @@ shell none
45private-bin drawio 45private-bin drawio
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,fonts 48private-etc alternatives,fonts,ld.so.cache,ld.so.preload
49private-tmp 49private-tmp
50 50
51dbus-user none 51dbus-user none
diff --git a/etc/profile-a-l/easystroke.profile b/etc/profile-a-l/easystroke.profile
index fd7f252b6..20cffae73 100644
--- a/etc/profile-a-l/easystroke.profile
+++ b/etc/profile-a-l/easystroke.profile
@@ -45,7 +45,7 @@ disable-mnt
45#private-bin bash,easystroke,sh 45#private-bin bash,easystroke,sh
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,fonts,group,passwd 48private-etc alternatives,fonts,group,ld.so.cache,ld.so.preload,passwd
49# breaks custom shell command functionality 49# breaks custom shell command functionality
50#private-lib gdk-pixbuf-2.*,gio,gvfs/libgvfscommon.so,libgconf-2.so.*,librsvg-2.so.* 50#private-lib gdk-pixbuf-2.*,gio,gvfs/libgvfscommon.so,libgconf-2.so.*,librsvg-2.so.*
51private-tmp 51private-tmp
diff --git a/etc/profile-a-l/electron-mail.profile b/etc/profile-a-l/electron-mail.profile
index 9aac3f570..09d14045a 100644
--- a/etc/profile-a-l/electron-mail.profile
+++ b/etc/profile-a-l/electron-mail.profile
@@ -45,7 +45,7 @@ shell none
45private-bin electron-mail 45private-bin electron-mail
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,nsswitch.conf,pki,resolv.conf,selinux,ssl,xdg 48private-etc alternatives,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,ld.so.cache,ld.so.preload,nsswitch.conf,pki,resolv.conf,selinux,ssl,xdg
49private-opt ElectronMail 49private-opt ElectronMail
50private-tmp 50private-tmp
51 51
diff --git a/etc/profile-a-l/electrum.profile b/etc/profile-a-l/electrum.profile
index 1647f2bc4..dfbe5cee4 100644
--- a/etc/profile-a-l/electrum.profile
+++ b/etc/profile-a-l/electrum.profile
@@ -47,7 +47,7 @@ private-bin electrum,python*
47private-cache 47private-cache
48?HAS_APPIMAGE: ignore private-dev 48?HAS_APPIMAGE: ignore private-dev
49private-dev 49private-dev
50private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,machine-id,pki,resolv.conf,ssl 50private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,ld.so.cache,ld.so.preload,machine-id,pki,resolv.conf,ssl
51private-tmp 51private-tmp
52 52
53# dbus-user none 53# dbus-user none
diff --git a/etc/profile-a-l/email-common.profile b/etc/profile-a-l/email-common.profile
index 03fd9033a..ac73f002f 100644
--- a/etc/profile-a-l/email-common.profile
+++ b/etc/profile-a-l/email-common.profile
@@ -12,7 +12,7 @@ noblacklist ${HOME}/.gnupg
12noblacklist ${HOME}/.mozilla 12noblacklist ${HOME}/.mozilla
13noblacklist ${HOME}/.signature 13noblacklist ${HOME}/.signature
14# when storing mail outside the default ${HOME}/Mail path, 'noblacklist' the custom path in your email-common.local 14# when storing mail outside the default ${HOME}/Mail path, 'noblacklist' the custom path in your email-common.local
15# and 'blacklist' it in your disable-common.local too so it is kept hidden from other applications 15# and 'blacklist' it in your disable-common.local too so it is kept hidden from other applications
16noblacklist ${HOME}/Mail 16noblacklist ${HOME}/Mail
17 17
18noblacklist ${DOCUMENTS} 18noblacklist ${DOCUMENTS}
@@ -66,7 +66,7 @@ tracelog
66# disable-mnt 66# disable-mnt
67private-cache 67private-cache
68private-dev 68private-dev
69private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gcrypt,gnupg,groups,gtk-2.0,gtk-3.0,hostname,hosts,hosts.conf,mailname,nsswitch.conf,passwd,pki,resolv.conf,selinux,ssl,xdg 69private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gcrypt,gnupg,groups,gtk-2.0,gtk-3.0,hostname,hosts,hosts.conf,ld.so.cache,ld.so.preload,mailname,nsswitch.conf,passwd,pki,resolv.conf,selinux,ssl,xdg
70private-tmp 70private-tmp
71# encrypting and signing email 71# encrypting and signing email
72writable-run-user 72writable-run-user
diff --git a/etc/profile-a-l/enchant.profile b/etc/profile-a-l/enchant.profile
index dc383984e..eff0f64ea 100644
--- a/etc/profile-a-l/enchant.profile
+++ b/etc/profile-a-l/enchant.profile
@@ -48,7 +48,7 @@ x11 none
48private-bin enchant,enchant-* 48private-bin enchant,enchant-*
49private-cache 49private-cache
50private-dev 50private-dev
51private-etc alternatives 51private-etc alternatives,ld.so.cache,ld.so.preload
52private-lib 52private-lib
53private-tmp 53private-tmp
54 54
diff --git a/etc/profile-a-l/eo-common.profile b/etc/profile-a-l/eo-common.profile
index 02112ef20..31f39e210 100644
--- a/etc/profile-a-l/eo-common.profile
+++ b/etc/profile-a-l/eo-common.profile
@@ -47,6 +47,6 @@ tracelog
47 47
48private-cache 48private-cache
49private-dev 49private-dev
50private-etc alternatives,dconf,fonts,gtk-3.0 50private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload
51private-lib eog,eom,gdk-pixbuf-2.*,gio,girepository-1.*,gvfs,libgconf-2.so.* 51private-lib eog,eom,gdk-pixbuf-2.*,gio,girepository-1.*,gvfs,libgconf-2.so.*
52private-tmp 52private-tmp
diff --git a/etc/profile-a-l/eog.profile b/etc/profile-a-l/eog.profile
index 5892374bd..65e5c6e69 100644
--- a/etc/profile-a-l/eog.profile
+++ b/etc/profile-a-l/eog.profile
@@ -18,7 +18,7 @@ whitelist /usr/share/eog
18 18
19private-bin eog 19private-bin eog
20 20
21# broken on Debian 10 (buster) running LXDE got the folowing error: 21# broken on Debian 10 (buster) running LXDE got the following error:
22# Failed to register: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown 22# Failed to register: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
23#dbus-user filter 23#dbus-user filter
24#dbus-user.own org.gnome.eog 24#dbus-user.own org.gnome.eog
diff --git a/etc/profile-a-l/equalx.profile b/etc/profile-a-l/equalx.profile
index 7566f7b50..0c3b790d5 100644
--- a/etc/profile-a-l/equalx.profile
+++ b/etc/profile-a-l/equalx.profile
@@ -54,7 +54,7 @@ disable-mnt
54private-bin equalx,gs,pdflatex,pdftocairo 54private-bin equalx,gs,pdflatex,pdftocairo
55private-cache 55private-cache
56private-dev 56private-dev
57private-etc equalx,equalx.conf,fonts,gtk-2.0,latexmk.conf,machine-id,papersize,passwd,texlive,Trolltech.conf 57private-etc alternatives,equalx,equalx.conf,fonts,gtk-2.0,latexmk.conf,ld.so.cache,ld.so.preload,machine-id,papersize,passwd,texlive,Trolltech.conf
58private-tmp 58private-tmp
59 59
60dbus-user none 60dbus-user none
diff --git a/etc/profile-a-l/evince.profile b/etc/profile-a-l/evince.profile
index 19ad5799c..63e456488 100644
--- a/etc/profile-a-l/evince.profile
+++ b/etc/profile-a-l/evince.profile
@@ -54,7 +54,7 @@ tracelog
54private-bin evince,evince-previewer,evince-thumbnailer 54private-bin evince,evince-previewer,evince-thumbnailer
55private-cache 55private-cache
56private-dev 56private-dev
57private-etc alternatives,fonts,group,ld.so.cache,machine-id,passwd 57private-etc alternatives,fonts,group,ld.so.cache,ld.so.preload,machine-id,passwd
58# private-lib might break two-page-view on some systems 58# private-lib might break two-page-view on some systems
59private-lib evince,gcc/*/*/libgcc_s.so.*,gcc/*/*/libstdc++.so.*,gconv,gdk-pixbuf-2.*,gio,gvfs/libgvfscommon.so,libarchive.so.*,libdjvulibre.so.*,libgconf-2.so.*,libgraphite2.so.*,libpoppler-glib.so.*,librsvg-2.so.*,libspectre.so.* 59private-lib evince,gcc/*/*/libgcc_s.so.*,gcc/*/*/libstdc++.so.*,gconv,gdk-pixbuf-2.*,gio,gvfs/libgvfscommon.so,libarchive.so.*,libdjvulibre.so.*,libgconf-2.so.*,libgraphite2.so.*,libpoppler-glib.so.*,librsvg-2.so.*,libspectre.so.*
60private-tmp 60private-tmp
diff --git a/etc/profile-a-l/exiftool.profile b/etc/profile-a-l/exiftool.profile
index 49a16f2f2..ae550e842 100644
--- a/etc/profile-a-l/exiftool.profile
+++ b/etc/profile-a-l/exiftool.profile
@@ -48,7 +48,7 @@ x11 none
48#private-bin exiftool,perl 48#private-bin exiftool,perl
49private-cache 49private-cache
50private-dev 50private-dev
51private-etc alternatives 51private-etc alternatives,ld.so.cache,ld.so.preload
52private-tmp 52private-tmp
53 53
54dbus-user none 54dbus-user none
diff --git a/etc/profile-a-l/falkon.profile b/etc/profile-a-l/falkon.profile
index 3911a8c75..321cb0145 100644
--- a/etc/profile-a-l/falkon.profile
+++ b/etc/profile-a-l/falkon.profile
@@ -23,6 +23,7 @@ whitelist ${HOME}/.cache/falkon
23whitelist ${HOME}/.config/falkon 23whitelist ${HOME}/.config/falkon
24whitelist /usr/share/falkon 24whitelist /usr/share/falkon
25include whitelist-common.inc 25include whitelist-common.inc
26include whitelist-run-common.inc
26include whitelist-runuser-common.inc 27include whitelist-runuser-common.inc
27include whitelist-usr-share-common.inc 28include whitelist-usr-share-common.inc
28include whitelist-var-common.inc 29include whitelist-var-common.inc
@@ -46,7 +47,7 @@ disable-mnt
46# private-bin falkon 47# private-bin falkon
47private-cache 48private-cache
48private-dev 49private-dev
49private-etc adobe,alternatives,asound.conf,ati,ca-certificates,crypto-policies,dconf,drirc,fonts,group,gtk-2.0,gtk-3.0,hostname,hosts,localtime,machine-id,mailcap,mime.types,nsswitch.conf,pango,passwd,pki,pulse,resolv.conf,selinux,ssl,xdg 50private-etc adobe,alternatives,asound.conf,ati,ca-certificates,crypto-policies,dconf,drirc,fonts,group,gtk-2.0,gtk-3.0,hostname,hosts,ld.so.cache,ld.so.preload,localtime,machine-id,mailcap,mime.types,nsswitch.conf,pango,passwd,pki,pulse,resolv.conf,selinux,ssl,xdg
50private-tmp 51private-tmp
51 52
52# dbus-user filter 53# dbus-user filter
diff --git a/etc/profile-a-l/fdns.profile b/etc/profile-a-l/fdns.profile
index 25e1082ad..ee775566e 100644
--- a/etc/profile-a-l/fdns.profile
+++ b/etc/profile-a-l/fdns.profile
@@ -42,7 +42,7 @@ private
42private-bin bash,fdns,sh 42private-bin bash,fdns,sh
43private-cache 43private-cache
44#private-dev 44#private-dev
45private-etc ca-certificates,crypto-policies,fdns,ld.so.cache,ld.so.preload,localtime,nsswitch.conf,passwd,pki,ssl 45private-etc alternatives,ca-certificates,crypto-policies,fdns,ld.so.cache,ld.so.preload,localtime,nsswitch.conf,passwd,pki,ssl
46# private-lib 46# private-lib
47private-tmp 47private-tmp
48 48
diff --git a/etc/profile-a-l/feh-network.inc.profile b/etc/profile-a-l/feh-network.inc.profile
index 690b39171..7293e89a8 100644
--- a/etc/profile-a-l/feh-network.inc.profile
+++ b/etc/profile-a-l/feh-network.inc.profile
@@ -5,4 +5,4 @@ include feh-network.inc.local
5ignore net none 5ignore net none
6netfilter 6netfilter
7protocol unix,inet,inet6 7protocol unix,inet,inet6
8private-etc ca-certificates,crypto-policies,hosts,pki,resolv.conf,ssl 8private-etc alternatives,ca-certificates,crypto-policies,hosts,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl
diff --git a/etc/profile-a-l/feh.profile b/etc/profile-a-l/feh.profile
index 0fdb1d3d3..4b8d41170 100644
--- a/etc/profile-a-l/feh.profile
+++ b/etc/profile-a-l/feh.profile
@@ -36,7 +36,7 @@ shell none
36private-bin feh,jpegexiforient,jpegtran 36private-bin feh,jpegexiforient,jpegtran
37private-cache 37private-cache
38private-dev 38private-dev
39private-etc alternatives,feh 39private-etc alternatives,feh,ld.so.cache,ld.so.preload
40private-tmp 40private-tmp
41 41
42dbus-user none 42dbus-user none
diff --git a/etc/profile-a-l/ffplay.profile b/etc/profile-a-l/ffplay.profile
index 04134cbf4..52abb99d4 100644
--- a/etc/profile-a-l/ffplay.profile
+++ b/etc/profile-a-l/ffplay.profile
@@ -14,7 +14,7 @@ ignore nogroups
14ignore nosound 14ignore nosound
15 15
16private-bin ffplay 16private-bin ffplay
17private-etc alsa,asound.conf,group 17private-etc alsa,alternatives,asound.conf,group,ld.so.cache,ld.so.preload
18 18
19# Redirect 19# Redirect
20include ffmpeg.profile 20include ffmpeg.profile
diff --git a/etc/profile-a-l/file-roller.profile b/etc/profile-a-l/file-roller.profile
index 434466139..06a8f6170 100644
--- a/etc/profile-a-l/file-roller.profile
+++ b/etc/profile-a-l/file-roller.profile
@@ -43,7 +43,7 @@ tracelog
43private-bin 7z,7za,7zr,ar,arj,atool,bash,brotli,bsdtar,bzip2,compress,cp,cpio,dpkg-deb,file-roller,gtar,gzip,isoinfo,lha,lrzip,lsar,lz4,lzip,lzma,lzop,mv,p7zip,rar,rm,rzip,sh,tar,unace,unalz,unar,uncompress,unrar,unsquashfs,unstuff,unzip,unzstd,xz,xzdec,zip,zoo,zstd 43private-bin 7z,7za,7zr,ar,arj,atool,bash,brotli,bsdtar,bzip2,compress,cp,cpio,dpkg-deb,file-roller,gtar,gzip,isoinfo,lha,lrzip,lsar,lz4,lzip,lzma,lzop,mv,p7zip,rar,rm,rzip,sh,tar,unace,unalz,unar,uncompress,unrar,unsquashfs,unstuff,unzip,unzstd,xz,xzdec,zip,zoo,zstd
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc dconf,fonts,gtk-3.0,xdg 46private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,xdg
47# private-tmp 47# private-tmp
48 48
49dbus-system none 49dbus-system none
diff --git a/etc/profile-a-l/firefox-common.profile b/etc/profile-a-l/firefox-common.profile
index 20ae039aa..ef647b5a0 100644
--- a/etc/profile-a-l/firefox-common.profile
+++ b/etc/profile-a-l/firefox-common.profile
@@ -19,6 +19,7 @@ include disable-common.inc
19include disable-devel.inc 19include disable-devel.inc
20include disable-exec.inc 20include disable-exec.inc
21include disable-interpreters.inc 21include disable-interpreters.inc
22include disable-proc.inc
22include disable-programs.inc 23include disable-programs.inc
23 24
24mkdir ${HOME}/.pki 25mkdir ${HOME}/.pki
diff --git a/etc/profile-a-l/flameshot.profile b/etc/profile-a-l/flameshot.profile
index e9241efc3..f80297022 100644
--- a/etc/profile-a-l/flameshot.profile
+++ b/etc/profile-a-l/flameshot.profile
@@ -52,7 +52,7 @@ tracelog
52disable-mnt 52disable-mnt
53private-bin flameshot 53private-bin flameshot
54private-cache 54private-cache
55private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.conf,machine-id,pki,resolv.conf,ssl 55private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.conf,ld.so.preload,machine-id,pki,resolv.conf,ssl
56private-dev 56private-dev
57#private-tmp 57#private-tmp
58 58
@@ -63,6 +63,6 @@ dbus-user.talk org.freedesktop.Notifications
63dbus-user.talk org.freedesktop.portal.Desktop 63dbus-user.talk org.freedesktop.portal.Desktop
64dbus-user.talk org.gnome.Shell 64dbus-user.talk org.gnome.Shell
65dbus-user.talk org.kde.KWin 65dbus-user.talk org.kde.KWin
66dbus-user.talk org.kde.StatusNotifierWatcher 66?ALLOW_TRAY: dbus-user.talk org.kde.StatusNotifierWatcher
67dbus-user.own org.kde.* 67?ALLOW_TRAY: dbus-user.own org.kde.*
68dbus-system none 68dbus-system none
diff --git a/etc/profile-a-l/freetube.profile b/etc/profile-a-l/freetube.profile
index 7beb2bcba..cb00ce11b 100644
--- a/etc/profile-a-l/freetube.profile
+++ b/etc/profile-a-l/freetube.profile
@@ -16,7 +16,7 @@ mkdir ${HOME}/.config/FreeTube
16whitelist ${HOME}/.config/FreeTube 16whitelist ${HOME}/.config/FreeTube
17 17
18private-bin electron,electron[0-9],electron[0-9][0-9],freetube,sh 18private-bin electron,electron[0-9],electron[0-9][0-9],freetube,sh
19private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,mime.types,nsswitch.conf,pki,pulse,resolv.conf,ssl,X11,xdg 19private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,mime.types,nsswitch.conf,pki,pulse,resolv.conf,ssl,X11,xdg
20 20
21# Redirect 21# Redirect
22include electron.profile 22include electron.profile
diff --git a/etc/profile-a-l/frogatto.profile b/etc/profile-a-l/frogatto.profile
index fa08b4956..8419998de 100644
--- a/etc/profile-a-l/frogatto.profile
+++ b/etc/profile-a-l/frogatto.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin frogatto,sh 45private-bin frogatto,sh
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc machine-id 48private-etc alternatives,ld.so.cache,ld.so.preload,machine-id
49private-tmp 49private-tmp
50 50
51dbus-user none 51dbus-user none
diff --git a/etc/profile-a-l/frozen-bubble.profile b/etc/profile-a-l/frozen-bubble.profile
index bb35c9447..88943760a 100644
--- a/etc/profile-a-l/frozen-bubble.profile
+++ b/etc/profile-a-l/frozen-bubble.profile
@@ -30,7 +30,6 @@ caps.drop all
30net none 30net none
31nodvd 31nodvd
32nogroups 32nogroups
33noinput
34nonewprivs 33nonewprivs
35noroot 34noroot
36notv 35notv
diff --git a/etc/profile-a-l/funnyboat.profile b/etc/profile-a-l/funnyboat.profile
index 1009f345b..4a08fca9b 100644
--- a/etc/profile-a-l/funnyboat.profile
+++ b/etc/profile-a-l/funnyboat.profile
@@ -35,7 +35,6 @@ ipc-namespace
35netfilter 35netfilter
36nodvd 36nodvd
37nogroups 37nogroups
38noinput
39nonewprivs 38nonewprivs
40noroot 39noroot
41notv 40notv
diff --git a/etc/profile-a-l/gajim.profile b/etc/profile-a-l/gajim.profile
index b0d017db9..6d764a0f9 100644
--- a/etc/profile-a-l/gajim.profile
+++ b/etc/profile-a-l/gajim.profile
@@ -59,7 +59,7 @@ disable-mnt
59private-bin bash,gajim,gajim-history-manager,gpg,gpg2,paplay,python*,sh,zsh 59private-bin bash,gajim,gajim-history-manager,gpg,gpg2,paplay,python*,sh,zsh
60private-cache 60private-cache
61private-dev 61private-dev
62private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,group,hostname,hosts,ld.so.cache,ld.so.conf,localtime,machine-id,passwd,pki,pulse,resolv.conf,ssl,xdg 62private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,group,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.preload,localtime,machine-id,passwd,pki,pulse,resolv.conf,ssl,xdg
63private-tmp 63private-tmp
64writable-run-user 64writable-run-user
65 65
diff --git a/etc/profile-a-l/galculator.profile b/etc/profile-a-l/galculator.profile
index 50b1c319c..4efe41f8d 100644
--- a/etc/profile-a-l/galculator.profile
+++ b/etc/profile-a-l/galculator.profile
@@ -43,7 +43,7 @@ tracelog
43private-bin galculator 43private-bin galculator
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,fonts 46private-etc alternatives,fonts,ld.so.cache,ld.so.preload
47private-lib 47private-lib
48private-tmp 48private-tmp
49 49
diff --git a/etc/profile-a-l/gallery-dl.profile b/etc/profile-a-l/gallery-dl.profile
index 9c8200dc4..2947873ef 100644
--- a/etc/profile-a-l/gallery-dl.profile
+++ b/etc/profile-a-l/gallery-dl.profile
@@ -12,7 +12,7 @@ noblacklist ${HOME}/.config/gallery-dl
12noblacklist ${HOME}/.gallery-dl.conf 12noblacklist ${HOME}/.gallery-dl.conf
13 13
14private-bin gallery-dl 14private-bin gallery-dl
15private-etc gallery-dl.conf 15private-etc alternatives,gallery-dl.conf,ld.so.cache,ld.so.preload
16 16
17# Redirect 17# Redirect
18include youtube-dl.profile 18include youtube-dl.profile
diff --git a/etc/profile-a-l/gapplication.profile b/etc/profile-a-l/gapplication.profile
index 8263423a0..ec5b733c8 100644
--- a/etc/profile-a-l/gapplication.profile
+++ b/etc/profile-a-l/gapplication.profile
@@ -49,7 +49,7 @@ private
49private-bin gapplication 49private-bin gapplication
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc none 52private-etc alternatives,ld.so.cache,ld.so.preload
53private-tmp 53private-tmp
54 54
55# Add the next line to your gapplication.local to filter D-Bus names. 55# Add the next line to your gapplication.local to filter D-Bus names.
diff --git a/etc/profile-a-l/gcloud.profile b/etc/profile-a-l/gcloud.profile
index 388f4c0df..297e5d345 100644
--- a/etc/profile-a-l/gcloud.profile
+++ b/etc/profile-a-l/gcloud.profile
@@ -36,7 +36,7 @@ tracelog
36 36
37disable-mnt 37disable-mnt
38private-dev 38private-dev
39private-etc alternatives,ca-certificates,crypto-policies,hosts,ld.so.cache,localtime,nsswitch.conf,pki,resolv.conf,ssl 39private-etc alternatives,ca-certificates,crypto-policies,hosts,ld.so.cache,ld.so.preload,localtime,nsswitch.conf,pki,resolv.conf,ssl
40private-tmp 40private-tmp
41 41
42dbus-user none 42dbus-user none
diff --git a/etc/profile-a-l/gconf.profile b/etc/profile-a-l/gconf.profile
index b01d88f80..a45374d4e 100644
--- a/etc/profile-a-l/gconf.profile
+++ b/etc/profile-a-l/gconf.profile
@@ -54,7 +54,7 @@ disable-mnt
54private-bin gconf-editor,gconf-merge-*,gconfpkg,gconftool-2,gsettings-*-convert,python2* 54private-bin gconf-editor,gconf-merge-*,gconfpkg,gconftool-2,gsettings-*-convert,python2*
55private-cache 55private-cache
56private-dev 56private-dev
57private-etc alternatives,fonts,gconf 57private-etc alternatives,fonts,gconf,ld.so.cache,ld.so.preload
58private-lib GConf,libpython*,python2* 58private-lib GConf,libpython*,python2*
59private-tmp 59private-tmp
60 60
diff --git a/etc/profile-a-l/geary.profile b/etc/profile-a-l/geary.profile
index 29c620556..cececd9e9 100644
--- a/etc/profile-a-l/geary.profile
+++ b/etc/profile-a-l/geary.profile
@@ -70,7 +70,7 @@ tracelog
70private-bin geary 70private-bin geary
71private-cache 71private-cache
72private-dev 72private-dev
73private-etc alternatives,ca-certificates,crypto-policies,fonts,hostname,hosts,pki,resolv.conf,ssl,xdg 73private-etc alternatives,ca-certificates,crypto-policies,fonts,hostname,hosts,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl,xdg
74private-tmp 74private-tmp
75 75
76dbus-user filter 76dbus-user filter
diff --git a/etc/profile-a-l/geekbench.profile b/etc/profile-a-l/geekbench.profile
index f0e17963c..243b893b9 100644
--- a/etc/profile-a-l/geekbench.profile
+++ b/etc/profile-a-l/geekbench.profile
@@ -6,6 +6,10 @@ include geekbench.local
6# Persistent global definitions 6# Persistent global definitions
7include globals.local 7include globals.local
8 8
9noblacklist ${HOME}/.geekbench5
10noblacklist /sbin
11noblacklist /usr/sbin
12
9include disable-common.inc 13include disable-common.inc
10include disable-devel.inc 14include disable-devel.inc
11include disable-exec.inc 15include disable-exec.inc
@@ -13,6 +17,8 @@ include disable-interpreters.inc
13include disable-programs.inc 17include disable-programs.inc
14include disable-xdg.inc 18include disable-xdg.inc
15 19
20mkdir ${HOME}/.geekbench5
21whitelist ${HOME}/.geekbench5
16include whitelist-common.inc 22include whitelist-common.inc
17include whitelist-usr-share-common.inc 23include whitelist-usr-share-common.inc
18include whitelist-var-common.inc 24include whitelist-var-common.inc
@@ -39,16 +45,14 @@ shell none
39tracelog 45tracelog
40 46
41disable-mnt 47disable-mnt
42private-bin bash,geekbenc*,sh 48#private-bin bash,geekbench*,sh -- #4576
43private-cache 49private-cache
44private-dev 50private-dev
45private-etc alternatives,group,lsb-release,passwd 51private-etc alternatives,group,ld.so.cache,ld.so.preload,lsb-release,passwd
46private-lib gcc/*/*/libstdc++.so.*
47private-opt none
48private-tmp 52private-tmp
49 53
50dbus-user none 54dbus-user none
51dbus-system none 55dbus-system none
52 56
53#memory-deny-write-execute - breaks on Arch (see issue #1803)
54read-only ${HOME} 57read-only ${HOME}
58read-write ${HOME}/.geekbench5
diff --git a/etc/profile-a-l/gget.profile b/etc/profile-a-l/gget.profile
index b2adaa8e4..bc1199914 100644
--- a/etc/profile-a-l/gget.profile
+++ b/etc/profile-a-l/gget.profile
@@ -49,7 +49,7 @@ disable-mnt
49private-bin gget 49private-bin gget
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc alternatives,ca-certificates,crypto-policies,pki,resolv.conf,ssl 52private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl
53private-lib 53private-lib
54private-tmp 54private-tmp
55 55
diff --git a/etc/profile-a-l/gimp.profile b/etc/profile-a-l/gimp.profile
index df9c2ac7a..28070cb9c 100644
--- a/etc/profile-a-l/gimp.profile
+++ b/etc/profile-a-l/gimp.profile
@@ -39,6 +39,7 @@ whitelist /usr/share/gegl-0.4
39whitelist /usr/share/gimp 39whitelist /usr/share/gimp
40whitelist /usr/share/mypaint-data 40whitelist /usr/share/mypaint-data
41whitelist /usr/share/lensfun 41whitelist /usr/share/lensfun
42include whitelist-run-common.inc
42include whitelist-usr-share-common.inc 43include whitelist-usr-share-common.inc
43include whitelist-var-common.inc 44include whitelist-var-common.inc
44 45
diff --git a/etc/profile-a-l/gist.profile b/etc/profile-a-l/gist.profile
index 80fa18119..506ab7127 100644
--- a/etc/profile-a-l/gist.profile
+++ b/etc/profile-a-l/gist.profile
@@ -52,7 +52,7 @@ tracelog
52disable-mnt 52disable-mnt
53private-cache 53private-cache
54private-dev 54private-dev
55private-etc alternatives 55private-etc alternatives,ld.so.cache,ld.so.preload
56private-tmp 56private-tmp
57 57
58dbus-user none 58dbus-user none
diff --git a/etc/profile-a-l/git-cola.profile b/etc/profile-a-l/git-cola.profile
index f77adef63..6439c8821 100644
--- a/etc/profile-a-l/git-cola.profile
+++ b/etc/profile-a-l/git-cola.profile
@@ -70,7 +70,7 @@ tracelog
70private-bin basename,bash,cola,envsubst,gettext,git,git-cola,git-dag,git-gui,gitk,gpg,gpg-agent,nano,ps,python*,sh,ssh,ssh-agent,tclsh,tr,wc,which,xed 70private-bin basename,bash,cola,envsubst,gettext,git,git-cola,git-dag,git-gui,gitk,gpg,gpg-agent,nano,ps,python*,sh,ssh,ssh-agent,tclsh,tr,wc,which,xed
71private-cache 71private-cache
72private-dev 72private-dev
73private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gcrypt,gitconfig,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,localtime,login.defs,machine-id,mime.types,nsswitch.conf,passwd,pki,resolv.conf,selinux,ssh,ssl,X11,xdg 73private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gcrypt,gitconfig,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,localtime,login.defs,machine-id,mime.types,nsswitch.conf,passwd,pki,resolv.conf,selinux,ssh,ssl,X11,xdg
74private-tmp 74private-tmp
75writable-run-user 75writable-run-user
76 76
diff --git a/etc/profile-a-l/gitter.profile b/etc/profile-a-l/gitter.profile
index 5dfb48189..16358d064 100644
--- a/etc/profile-a-l/gitter.profile
+++ b/etc/profile-a-l/gitter.profile
@@ -37,7 +37,7 @@ shell none
37 37
38disable-mnt 38disable-mnt
39private-bin bash,env,gitter 39private-bin bash,env,gitter
40private-etc alternatives,ca-certificates,crypto-policies,fonts,pki,pulse,resolv.conf,ssl 40private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,pki,pulse,resolv.conf,ssl
41private-opt Gitter 41private-opt Gitter
42private-dev 42private-dev
43private-tmp 43private-tmp
diff --git a/etc/profile-a-l/gl-117.profile b/etc/profile-a-l/gl-117.profile
index 35d969e6d..edb85048b 100644
--- a/etc/profile-a-l/gl-117.profile
+++ b/etc/profile-a-l/gl-117.profile
@@ -29,7 +29,6 @@ caps.drop all
29net none 29net none
30nodvd 30nodvd
31nogroups 31nogroups
32noinput
33nonewprivs 32nonewprivs
34noroot 33noroot
35notv 34notv
diff --git a/etc/profile-a-l/glaxium.profile b/etc/profile-a-l/glaxium.profile
index dec0daef2..b5f98b411 100644
--- a/etc/profile-a-l/glaxium.profile
+++ b/etc/profile-a-l/glaxium.profile
@@ -29,7 +29,6 @@ caps.drop all
29net none 29net none
30nodvd 30nodvd
31nogroups 31nogroups
32noinput
33nonewprivs 32nonewprivs
34noroot 33noroot
35notv 34notv
diff --git a/etc/profile-a-l/gmpc.profile b/etc/profile-a-l/gmpc.profile
index 4aa4b6c20..e53297c06 100644
--- a/etc/profile-a-l/gmpc.profile
+++ b/etc/profile-a-l/gmpc.profile
@@ -44,7 +44,7 @@ tracelog
44disable-mnt 44disable-mnt
45#private-bin gmpc 45#private-bin gmpc
46private-cache 46private-cache
47private-etc alternatives,fonts 47private-etc alternatives,fonts,ld.so.cache,ld.so.preload
48private-tmp 48private-tmp
49writable-run-user 49writable-run-user
50 50
diff --git a/etc/profile-a-l/gnome-calendar.profile b/etc/profile-a-l/gnome-calendar.profile
index c8903a991..f9df83e2a 100644
--- a/etc/profile-a-l/gnome-calendar.profile
+++ b/etc/profile-a-l/gnome-calendar.profile
@@ -45,7 +45,7 @@ private
45private-bin gnome-calendar 45private-bin gnome-calendar
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc ca-certificates,crypto-policies,dconf,fonts,gtk-3.0,localtime,nsswitch.conf,pki,resolv.conf,ssl 48private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,localtime,nsswitch.conf,pki,resolv.conf,ssl
49private-tmp 49private-tmp
50 50
51dbus-user filter 51dbus-user filter
diff --git a/etc/profile-a-l/gnome-chess.profile b/etc/profile-a-l/gnome-chess.profile
index d038d775a..dc9092a93 100644
--- a/etc/profile-a-l/gnome-chess.profile
+++ b/etc/profile-a-l/gnome-chess.profile
@@ -50,5 +50,5 @@ disable-mnt
50private-bin fairymax,gnome-chess,gnuchess,hoichess 50private-bin fairymax,gnome-chess,gnuchess,hoichess
51private-cache 51private-cache
52private-dev 52private-dev
53private-etc alternatives,dconf,fonts,gnome-chess,gtk-3.0 53private-etc alternatives,dconf,fonts,gnome-chess,gtk-3.0,ld.so.cache,ld.so.preload
54private-tmp 54private-tmp
diff --git a/etc/profile-a-l/gnome-clocks.profile b/etc/profile-a-l/gnome-clocks.profile
index 96a39f6ce..90665add6 100644
--- a/etc/profile-a-l/gnome-clocks.profile
+++ b/etc/profile-a-l/gnome-clocks.profile
@@ -42,6 +42,6 @@ disable-mnt
42private-bin gnome-clocks,gsound-play 42private-bin gnome-clocks,gsound-play
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-3.0,hosts,localtime,machine-id,pkcs11,pki,ssl 45private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-3.0,hosts,ld.so.cache,ld.so.preload,localtime,machine-id,pkcs11,pki,ssl
46private-tmp 46private-tmp
47 47
diff --git a/etc/profile-a-l/gnome-hexgl.profile b/etc/profile-a-l/gnome-hexgl.profile
index 19a4bc5c7..ab6279608 100644
--- a/etc/profile-a-l/gnome-hexgl.profile
+++ b/etc/profile-a-l/gnome-hexgl.profile
@@ -42,7 +42,7 @@ private
42private-bin gnome-hexgl 42private-bin gnome-hexgl
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc alsa,asound.conf,machine-id,pulse 45private-etc alsa,alternatives,asound.conf,ld.so.cache,ld.so.preload,machine-id,pulse
46private-tmp 46private-tmp
47 47
48dbus-user none 48dbus-user none
diff --git a/etc/profile-a-l/gnome-latex.profile b/etc/profile-a-l/gnome-latex.profile
index 26c2c4409..39a6718a6 100644
--- a/etc/profile-a-l/gnome-latex.profile
+++ b/etc/profile-a-l/gnome-latex.profile
@@ -48,6 +48,6 @@ tracelog
48private-cache 48private-cache
49private-dev 49private-dev
50# passwd,login.defs,firejail are a temporary workaround for #2877 and can be removed once it is fixed 50# passwd,login.defs,firejail are a temporary workaround for #2877 and can be removed once it is fixed
51private-etc alternatives,dconf,fonts,gtk-3.0,latexmk.conf,login.defs,passwd,texlive 51private-etc alternatives,dconf,fonts,gtk-3.0,latexmk.conf,ld.so.cache,ld.so.preload,login.defs,passwd,texlive
52 52
53dbus-system none 53dbus-system none
diff --git a/etc/profile-a-l/gnome-logs.profile b/etc/profile-a-l/gnome-logs.profile
index 2c15f7592..7ee4d8b75 100644
--- a/etc/profile-a-l/gnome-logs.profile
+++ b/etc/profile-a-l/gnome-logs.profile
@@ -40,7 +40,7 @@ disable-mnt
40private-bin gnome-logs 40private-bin gnome-logs
41private-cache 41private-cache
42private-dev 42private-dev
43private-etc alternatives,fonts,localtime,machine-id 43private-etc alternatives,fonts,ld.so.cache,ld.so.preload,localtime,machine-id
44private-lib gdk-pixbuf-2.*,gio,gvfs/libgvfscommon.so,libgconf-2.so.*,librsvg-2.so.* 44private-lib gdk-pixbuf-2.*,gio,gvfs/libgvfscommon.so,libgconf-2.so.*,librsvg-2.so.*
45private-tmp 45private-tmp
46writable-var-log 46writable-var-log
diff --git a/etc/profile-a-l/gnome-music.profile b/etc/profile-a-l/gnome-music.profile
index a00edfa37..7b79fa15d 100644
--- a/etc/profile-a-l/gnome-music.profile
+++ b/etc/profile-a-l/gnome-music.profile
@@ -42,6 +42,6 @@ tracelog
42# private-bin calls a file manager - whatever is installed! 42# private-bin calls a file manager - whatever is installed!
43#private-bin env,gio-launch-desktop,gnome-music,python*,yelp 43#private-bin env,gio-launch-desktop,gnome-music,python*,yelp
44private-dev 44private-dev
45private-etc alternatives,asound.conf,dconf,fonts,fonts,gtk-3.0,machine-id,pulse,selinux,xdg 45private-etc alternatives,asound.conf,dconf,fonts,fonts,gtk-3.0,ld.so.cache,ld.so.preload,machine-id,pulse,selinux,xdg
46private-tmp 46private-tmp
47 47
diff --git a/etc/profile-a-l/gnome-passwordsafe.profile b/etc/profile-a-l/gnome-passwordsafe.profile
index b69899c70..a96ec6f05 100644
--- a/etc/profile-a-l/gnome-passwordsafe.profile
+++ b/etc/profile-a-l/gnome-passwordsafe.profile
@@ -53,7 +53,7 @@ disable-mnt
53private-bin gnome-passwordsafe,python3* 53private-bin gnome-passwordsafe,python3*
54private-cache 54private-cache
55private-dev 55private-dev
56private-etc dconf,fonts,gtk-3.0,passwd 56private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,passwd
57private-tmp 57private-tmp
58 58
59dbus-user filter 59dbus-user filter
diff --git a/etc/profile-a-l/gnome-pie.profile b/etc/profile-a-l/gnome-pie.profile
index 3ab2e4aad..6d30213cb 100644
--- a/etc/profile-a-l/gnome-pie.profile
+++ b/etc/profile-a-l/gnome-pie.profile
@@ -34,7 +34,7 @@ shell none
34disable-mnt 34disable-mnt
35private-cache 35private-cache
36private-dev 36private-dev
37private-etc alternatives,fonts,machine-id 37private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
38private-lib gdk-pixbuf-2.*,gio,gvfs/libgvfscommon.so,libgconf-2.so.*,librsvg-2.so.* 38private-lib gdk-pixbuf-2.*,gio,gvfs/libgvfscommon.so,libgconf-2.so.*,librsvg-2.so.*
39private-tmp 39private-tmp
40 40
diff --git a/etc/profile-a-l/gnome-pomodoro.profile b/etc/profile-a-l/gnome-pomodoro.profile
index 256a0c69f..99d569a04 100644
--- a/etc/profile-a-l/gnome-pomodoro.profile
+++ b/etc/profile-a-l/gnome-pomodoro.profile
@@ -44,7 +44,7 @@ disable-mnt
44private-bin gnome-pomodoro 44private-bin gnome-pomodoro
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc dconf,fonts,gtk-3.0,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,localtime,machine-id 47private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,localtime,machine-id
48private-tmp 48private-tmp
49 49
50dbus-user filter 50dbus-user filter
diff --git a/etc/profile-a-l/gnome-recipes.profile b/etc/profile-a-l/gnome-recipes.profile
index 01162b552..b2ce4a92a 100644
--- a/etc/profile-a-l/gnome-recipes.profile
+++ b/etc/profile-a-l/gnome-recipes.profile
@@ -47,7 +47,7 @@ shell none
47disable-mnt 47disable-mnt
48private-bin gnome-recipes,tar 48private-bin gnome-recipes,tar
49private-dev 49private-dev
50private-etc alternatives,ca-certificates,crypto-policies,fonts,pki,ssl 50private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,pki,ssl
51private-lib gdk-pixbuf-2.0,gio,gvfs/libgvfscommon.so,libgconf-2.so.*,libgnutls.so.*,libjpeg.so.*,libp11-kit.so.*,libproxy.so.*,librsvg-2.so.* 51private-lib gdk-pixbuf-2.0,gio,gvfs/libgvfscommon.so,libgconf-2.so.*,libgnutls.so.*,libjpeg.so.*,libp11-kit.so.*,libproxy.so.*,librsvg-2.so.*
52private-tmp 52private-tmp
53 53
diff --git a/etc/profile-a-l/gnome-screenshot.profile b/etc/profile-a-l/gnome-screenshot.profile
index f5afa9fb3..36c6693a9 100644
--- a/etc/profile-a-l/gnome-screenshot.profile
+++ b/etc/profile-a-l/gnome-screenshot.profile
@@ -42,7 +42,7 @@ tracelog
42disable-mnt 42disable-mnt
43private-bin gnome-screenshot 43private-bin gnome-screenshot
44private-dev 44private-dev
45private-etc dconf,fonts,gtk-3.0,localtime,machine-id 45private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,localtime,machine-id
46private-tmp 46private-tmp
47 47
48dbus-user filter 48dbus-user filter
diff --git a/etc/profile-a-l/gnome-sound-recorder.profile b/etc/profile-a-l/gnome-sound-recorder.profile
index 159145b1b..28a0205b9 100644
--- a/etc/profile-a-l/gnome-sound-recorder.profile
+++ b/etc/profile-a-l/gnome-sound-recorder.profile
@@ -40,5 +40,5 @@ tracelog
40disable-mnt 40disable-mnt
41private-cache 41private-cache
42private-dev 42private-dev
43private-etc alsa,asound.conf,dconf,fonts,gtk-2.0,gtk-3.0,machine-id,openal,pango,pulse,xdg 43private-etc alsa,alternatives,asound.conf,dconf,fonts,gtk-2.0,gtk-3.0,ld.so.cache,ld.so.preload,machine-id,openal,pango,pulse,xdg
44private-tmp 44private-tmp
diff --git a/etc/profile-a-l/gnome-system-log.profile b/etc/profile-a-l/gnome-system-log.profile
index 3f9497e80..02b023855 100644
--- a/etc/profile-a-l/gnome-system-log.profile
+++ b/etc/profile-a-l/gnome-system-log.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin gnome-system-log 43private-bin gnome-system-log
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,fonts,localtime,machine-id 46private-etc alternatives,fonts,ld.so.cache,ld.so.preload,localtime,machine-id
47private-lib 47private-lib
48private-tmp 48private-tmp
49writable-var-log 49writable-var-log
diff --git a/etc/profile-a-l/gnome-todo.profile b/etc/profile-a-l/gnome-todo.profile
index 4640f7f43..c6cd12250 100644
--- a/etc/profile-a-l/gnome-todo.profile
+++ b/etc/profile-a-l/gnome-todo.profile
@@ -46,7 +46,7 @@ disable-mnt
46private-bin gnome-todo 46private-bin gnome-todo
47private-cache 47private-cache
48private-dev 48private-dev
49private-etc dconf,fonts,gtk-3.0,localtime,passwd,xdg 49private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,localtime,passwd,xdg
50private-tmp 50private-tmp
51 51
52dbus-user filter 52dbus-user filter
diff --git a/etc/profile-a-l/gnome_games-common.profile b/etc/profile-a-l/gnome_games-common.profile
index 4ad39a988..9b4f68808 100644
--- a/etc/profile-a-l/gnome_games-common.profile
+++ b/etc/profile-a-l/gnome_games-common.profile
@@ -41,7 +41,7 @@ tracelog
41disable-mnt 41disable-mnt
42private-cache 42private-cache
43private-dev 43private-dev
44private-etc dconf,fonts,gconf,gtk-2.0,gtk-3.0,machine-id,pango,passwd,X11 44private-etc alternatives,dconf,fonts,gconf,gtk-2.0,gtk-3.0,ld.so.cache,ld.so.preload,machine-id,pango,passwd,X11
45private-tmp 45private-tmp
46 46
47dbus-user filter 47dbus-user filter
diff --git a/etc/profile-a-l/gnote.profile b/etc/profile-a-l/gnote.profile
index 2d4ce2437..928f2c548 100644
--- a/etc/profile-a-l/gnote.profile
+++ b/etc/profile-a-l/gnote.profile
@@ -51,7 +51,7 @@ disable-mnt
51private-bin gnote 51private-bin gnote
52private-cache 52private-cache
53private-dev 53private-dev
54private-etc dconf,fonts,gtk-3.0,pango,X11 54private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,pango,X11
55private-tmp 55private-tmp
56 56
57dbus-user filter 57dbus-user filter
diff --git a/etc/profile-a-l/gnubik.profile b/etc/profile-a-l/gnubik.profile
index 902e76416..c895b4ce9 100644
--- a/etc/profile-a-l/gnubik.profile
+++ b/etc/profile-a-l/gnubik.profile
@@ -43,7 +43,7 @@ private
43private-bin gnubik 43private-bin gnubik
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc drirc,fonts,gtk-2.0 46private-etc alternatives,drirc,fonts,gtk-2.0,ld.so.cache,ld.so.preload
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-a-l/godot.profile b/etc/profile-a-l/godot.profile
index b3c19e97f..46b362db9 100644
--- a/etc/profile-a-l/godot.profile
+++ b/etc/profile-a-l/godot.profile
@@ -38,7 +38,7 @@ tracelog
38# private-bin godot 38# private-bin godot
39private-cache 39private-cache
40private-dev 40private-dev
41private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,drirc,fonts,machine-id,mono,nsswitch.conf,openal,pki,pulse,resolv.conf,ssl 41private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,drirc,fonts,ld.so.cache,ld.so.preload,machine-id,mono,nsswitch.conf,openal,pki,pulse,resolv.conf,ssl
42private-tmp 42private-tmp
43 43
44dbus-user none 44dbus-user none
diff --git a/etc/profile-a-l/goldendict.profile b/etc/profile-a-l/goldendict.profile
new file mode 100644
index 000000000..5251ed427
--- /dev/null
+++ b/etc/profile-a-l/goldendict.profile
@@ -0,0 +1,57 @@
1# Firejail profile for goldendict
2# This file is overwritten after every install/update
3# Persistent local customizations
4include goldendict.local
5# Persistent global definitions
6include globals.local
7
8noblacklist ${HOME}/.goldendict
9noblacklist ${HOME}/.cache/GoldenDict
10
11include disable-common.inc
12include disable-devel.inc
13include disable-exec.inc
14include disable-interpreters.inc
15include disable-programs.inc
16include disable-shell.inc
17include disable-xdg.inc
18
19mkdir ${HOME}/.goldendict
20mkdir ${HOME}/.cache/GoldenDict
21whitelist ${HOME}/.goldendict
22whitelist ${HOME}/.cache/GoldenDict
23# The default path of dictionaries
24whitelist /usr/share/stardict/dic
25include whitelist-common.inc
26include whitelist-runuser-common.inc
27include whitelist-usr-share-common.inc
28include whitelist-var-common.inc
29
30apparmor
31caps.drop all
32netfilter
33# no3d leads to the libGL MESA-LOADER errors
34#no3d
35nodvd
36nogroups
37noinput
38nonewprivs
39noroot
40notv
41nou2f
42novideo
43protocol unix,inet,inet6,netlink
44seccomp
45seccomp.block-secondary
46shell none
47tracelog
48
49disable-mnt
50private-bin goldendict
51private-cache
52private-dev
53private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,machine-id,nsswitch.conf,pki,resolv.conf,ssl
54private-tmp
55
56dbus-user none
57dbus-system none
diff --git a/etc/profile-a-l/googler-common.profile b/etc/profile-a-l/googler-common.profile
index b8e2b04df..a35813a09 100644
--- a/etc/profile-a-l/googler-common.profile
+++ b/etc/profile-a-l/googler-common.profile
@@ -54,7 +54,7 @@ disable-mnt
54private-bin env,python3*,sh,w3m 54private-bin env,python3*,sh,w3m
55private-cache 55private-cache
56private-dev 56private-dev
57private-etc ca-certificates,crypto-policies,host.conf,hostname,hosts,nsswitch.conf,pki,protocols,resolv.conf,rpc,services,ssl 57private-etc alternatives,ca-certificates,crypto-policies,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,nsswitch.conf,pki,protocols,resolv.conf,rpc,services,ssl
58private-tmp 58private-tmp
59 59
60dbus-user none 60dbus-user none
diff --git a/etc/profile-a-l/gpicview.profile b/etc/profile-a-l/gpicview.profile
index 9a782b238..26afe6e49 100644
--- a/etc/profile-a-l/gpicview.profile
+++ b/etc/profile-a-l/gpicview.profile
@@ -41,7 +41,7 @@ tracelog
41private-bin gpicview 41private-bin gpicview
42private-cache 42private-cache
43private-dev 43private-dev
44private-etc alternatives,fonts,group,passwd 44private-etc alternatives,fonts,group,ld.so.cache,ld.so.preload,passwd
45private-lib 45private-lib
46private-tmp 46private-tmp
47 47
diff --git a/etc/profile-a-l/gpredict.profile b/etc/profile-a-l/gpredict.profile
index 54e52d695..511be6fcc 100644
--- a/etc/profile-a-l/gpredict.profile
+++ b/etc/profile-a-l/gpredict.profile
@@ -36,6 +36,6 @@ tracelog
36 36
37private-bin gpredict 37private-bin gpredict
38private-dev 38private-dev
39private-etc alternatives,ca-certificates,crypto-policies,fonts,pki,resolv.conf,ssl 39private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl
40private-tmp 40private-tmp
41 41
diff --git a/etc/profile-a-l/gradio.profile b/etc/profile-a-l/gradio.profile
index 31f95fb80..9cc25e45c 100644
--- a/etc/profile-a-l/gradio.profile
+++ b/etc/profile-a-l/gradio.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin gradio 45private-bin gradio
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-3.0,host.conf,hostname,hosts,machine-id,pki,pulse,resolv.conf,ssl,xdg 48private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,machine-id,pki,pulse,resolv.conf,ssl,xdg
49private-tmp 49private-tmp
50 50
51dbus-user filter 51dbus-user filter
diff --git a/etc/profile-a-l/gravity-beams-and-evaporating-stars.profile b/etc/profile-a-l/gravity-beams-and-evaporating-stars.profile
index c5bcc85f3..d76ca105f 100644
--- a/etc/profile-a-l/gravity-beams-and-evaporating-stars.profile
+++ b/etc/profile-a-l/gravity-beams-and-evaporating-stars.profile
@@ -40,7 +40,7 @@ private
40private-bin gravity-beams-and-evaporating-stars 40private-bin gravity-beams-and-evaporating-stars
41private-cache 41private-cache
42private-dev 42private-dev
43private-etc fonts,machine-id 43private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
44private-tmp 44private-tmp
45 45
46dbus-user none 46dbus-user none
diff --git a/etc/profile-a-l/gtk-update-icon-cache.profile b/etc/profile-a-l/gtk-update-icon-cache.profile
index 3231374b7..ec8a614fd 100644
--- a/etc/profile-a-l/gtk-update-icon-cache.profile
+++ b/etc/profile-a-l/gtk-update-icon-cache.profile
@@ -46,7 +46,7 @@ disable-mnt
46private-bin gtk-update-icon-cache 46private-bin gtk-update-icon-cache
47private-cache 47private-cache
48private-dev 48private-dev
49private-etc none 49private-etc alternatives,ld.so.cache,ld.so.preload
50private-lib 50private-lib
51private-tmp 51private-tmp
52 52
diff --git a/etc/profile-a-l/gwenview.profile b/etc/profile-a-l/gwenview.profile
index 8c4453a8b..d98d341ae 100644
--- a/etc/profile-a-l/gwenview.profile
+++ b/etc/profile-a-l/gwenview.profile
@@ -25,6 +25,7 @@ include disable-interpreters.inc
25include disable-programs.inc 25include disable-programs.inc
26include disable-shell.inc 26include disable-shell.inc
27 27
28include whitelist-run-common.inc
28include whitelist-var-common.inc 29include whitelist-var-common.inc
29 30
30apparmor 31apparmor
@@ -46,7 +47,7 @@ shell none
46 47
47private-bin gimp*,gwenview,kbuildsycoca4,kdeinit4 48private-bin gimp*,gwenview,kbuildsycoca4,kdeinit4
48private-dev 49private-dev
49private-etc alternatives,fonts,gimp,gtk-2.0,kde4rc,kde5rc,ld.so.cache,machine-id,passwd,pulse,xdg 50private-etc alternatives,fonts,gimp,gtk-2.0,kde4rc,kde5rc,ld.so.cache,ld.so.preload,machine-id,passwd,pulse,xdg
50 51
51# dbus-user none 52# dbus-user none
52# dbus-system none 53# dbus-system none
diff --git a/etc/profile-a-l/hyperrogue.profile b/etc/profile-a-l/hyperrogue.profile
index f210a264f..74e0faa7f 100644
--- a/etc/profile-a-l/hyperrogue.profile
+++ b/etc/profile-a-l/hyperrogue.profile
@@ -44,7 +44,7 @@ private-bin hyperrogue
44private-cache 44private-cache
45private-cwd ${HOME} 45private-cwd ${HOME}
46private-dev 46private-dev
47private-etc fonts,machine-id 47private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
48private-tmp 48private-tmp
49 49
50dbus-user none 50dbus-user none
diff --git a/etc/profile-a-l/i2prouter.profile b/etc/profile-a-l/i2prouter.profile
index c875cad72..200b4c8b1 100644
--- a/etc/profile-a-l/i2prouter.profile
+++ b/etc/profile-a-l/i2prouter.profile
@@ -68,5 +68,5 @@ shell none
68disable-mnt 68disable-mnt
69private-cache 69private-cache
70private-dev 70private-dev
71private-etc alternatives,ca-certificates,crypto-policies,dconf,group,hostname,hosts,i2p,java-10-openjdk,java-11-openjdk,java-12-openjdk,java-13-openjdk,java-8-openjdk,java-9-openjdk,java-openjdk,ld.so.cache,localtime,machine-id,nsswitch.conf,passwd,pki,resolv.conf,ssl 71private-etc alternatives,ca-certificates,crypto-policies,dconf,group,hostname,hosts,i2p,java-10-openjdk,java-11-openjdk,java-12-openjdk,java-13-openjdk,java-8-openjdk,java-9-openjdk,java-openjdk,ld.so.cache,ld.so.preload,localtime,machine-id,nsswitch.conf,passwd,pki,resolv.conf,ssl
72private-tmp 72private-tmp
diff --git a/etc/profile-a-l/imv.profile b/etc/profile-a-l/imv.profile
new file mode 100644
index 000000000..65e7537bf
--- /dev/null
+++ b/etc/profile-a-l/imv.profile
@@ -0,0 +1,57 @@
1# Firejail profile for imv
2# Description: imv is an image viewer.
3# This file is overwritten after every install/update
4# Persistent local customizations
5include imv.local
6# Persistent global definitions
7include globals.local
8
9include allow-bin-sh.inc
10
11blacklist /usr/libexec
12
13include disable-common.inc
14include disable-devel.inc
15include disable-exec.inc
16include disable-interpreters.inc
17include disable-programs.inc
18include disable-shell.inc
19include disable-write-mnt.inc
20# Users may want to view images in ${HOME}
21#include disable-xdg.inc
22
23# Users may want to view images in ${HOME}
24#include whitelist-common.inc
25include whitelist-run-common.inc
26include whitelist-runuser-common.inc
27# Users may want to view images in /usr/share
28#include whitelist-usr-share-common.inc
29include whitelist-var-common.inc
30
31apparmor
32caps.drop all
33net none
34nodvd
35nogroups
36noinput
37nonewprivs
38noroot
39nosound
40notv
41nou2f
42novideo
43protocol unix
44seccomp
45seccomp.block-secondary
46shell none
47tracelog
48
49private-bin imv,imv-wayland,imv-x11,sh
50private-cache
51private-dev
52private-tmp
53
54dbus-user none
55dbus-system none
56
57read-only ${HOME}
diff --git a/etc/profile-a-l/inkscape.profile b/etc/profile-a-l/inkscape.profile
index 5e54b5441..016a4d6c8 100644
--- a/etc/profile-a-l/inkscape.profile
+++ b/etc/profile-a-l/inkscape.profile
@@ -1,6 +1,7 @@
1# Firejail profile for inkscape 1# Firejail profile for inkscape
2# Description: Vector-based drawing program 2# Description: Vector-based drawing program
3# This file is overwritten after every install/update 3# This file is overwritten after every install/update
4quiet
4# Persistent local customizations 5# Persistent local customizations
5include inkscape.local 6include inkscape.local
6# Persistent global definitions 7# Persistent global definitions
@@ -28,6 +29,7 @@ include disable-programs.inc
28include disable-xdg.inc 29include disable-xdg.inc
29 30
30whitelist /usr/share/inkscape 31whitelist /usr/share/inkscape
32include whitelist-run-common.inc
31include whitelist-usr-share-common.inc 33include whitelist-usr-share-common.inc
32include whitelist-var-common.inc 34include whitelist-var-common.inc
33 35
diff --git a/etc/profile-a-l/ipcalc.profile b/etc/profile-a-l/ipcalc.profile
index ea4ee5ae1..6eefd2945 100644
--- a/etc/profile-a-l/ipcalc.profile
+++ b/etc/profile-a-l/ipcalc.profile
@@ -50,7 +50,7 @@ private-bin bash,ipcalc,ipcalc-ng,perl,sh
50# private-cache 50# private-cache
51private-dev 51private-dev
52# empty etc directory 52# empty etc directory
53private-etc none 53private-etc alternatives,ld.so.cache,ld.so.preload
54private-lib 54private-lib
55private-opt none 55private-opt none
56private-tmp 56private-tmp
diff --git a/etc/profile-a-l/jerry.profile b/etc/profile-a-l/jerry.profile
index 1209c5e11..6ca977512 100644
--- a/etc/profile-a-l/jerry.profile
+++ b/etc/profile-a-l/jerry.profile
@@ -34,7 +34,7 @@ tracelog
34 34
35private-bin bash,jerry,sh,stockfish 35private-bin bash,jerry,sh,stockfish
36private-dev 36private-dev
37private-etc fonts,gtk-2.0,gtk-3.0 37private-etc alternatives,fonts,gtk-2.0,gtk-3.0,ld.so.cache,ld.so.preload
38private-tmp 38private-tmp
39 39
40dbus-user none 40dbus-user none
diff --git a/etc/profile-a-l/jumpnbump-menu.profile b/etc/profile-a-l/jumpnbump-menu.profile
index 8d391b90f..59d762f55 100644
--- a/etc/profile-a-l/jumpnbump-menu.profile
+++ b/etc/profile-a-l/jumpnbump-menu.profile
@@ -10,7 +10,7 @@ include jumpnbump-menu.local
10# Allow python (blacklisted by disable-interpreters.inc) 10# Allow python (blacklisted by disable-interpreters.inc)
11include allow-python3.inc 11include allow-python3.inc
12 12
13private-bin jumpnbump-menu,python3* 13private-bin env,jumpnbump-menu,python3*
14 14
15# Redirect 15# Redirect
16include jumpnbump.profile 16include jumpnbump.profile
diff --git a/etc/profile-a-l/jumpnbump.profile b/etc/profile-a-l/jumpnbump.profile
index 77d3f6bf4..4a9232344 100644
--- a/etc/profile-a-l/jumpnbump.profile
+++ b/etc/profile-a-l/jumpnbump.profile
@@ -27,7 +27,6 @@ caps.drop all
27net none 27net none
28nodvd 28nodvd
29nogroups 29nogroups
30noinput
31nonewprivs 30nonewprivs
32noroot 31noroot
33notv 32notv
@@ -42,7 +41,7 @@ disable-mnt
42private-bin jumpnbump 41private-bin jumpnbump
43private-cache 42private-cache
44private-dev 43private-dev
45private-etc none 44private-etc alternatives,ld.so.cache,ld.so.preload
46private-tmp 45private-tmp
47 46
48dbus-user none 47dbus-user none
diff --git a/etc/profile-a-l/kaffeine.profile b/etc/profile-a-l/kaffeine.profile
index 8799a6f24..e74c57546 100644
--- a/etc/profile-a-l/kaffeine.profile
+++ b/etc/profile-a-l/kaffeine.profile
@@ -22,6 +22,7 @@ include disable-interpreters.inc
22include disable-programs.inc 22include disable-programs.inc
23include disable-xdg.inc 23include disable-xdg.inc
24 24
25include whitelist-run-common.inc
25include whitelist-var-common.inc 26include whitelist-var-common.inc
26 27
27caps.drop all 28caps.drop all
diff --git a/etc/profile-a-l/kalgebra.profile b/etc/profile-a-l/kalgebra.profile
index 210b7cf03..6ad50cf14 100644
--- a/etc/profile-a-l/kalgebra.profile
+++ b/etc/profile-a-l/kalgebra.profile
@@ -42,7 +42,7 @@ disable-mnt
42private-bin kalgebra,kalgebramobile 42private-bin kalgebra,kalgebramobile
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc fonts,machine-id 45private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
46private-tmp 46private-tmp
47 47
48dbus-user none 48dbus-user none
diff --git a/etc/profile-a-l/kate.profile b/etc/profile-a-l/kate.profile
index d8b2dddb1..8c340d536 100644
--- a/etc/profile-a-l/kate.profile
+++ b/etc/profile-a-l/kate.profile
@@ -29,6 +29,7 @@ include disable-exec.inc
29# include disable-interpreters.inc 29# include disable-interpreters.inc
30include disable-programs.inc 30include disable-programs.inc
31 31
32include whitelist-run-common.inc
32include whitelist-var-common.inc 33include whitelist-var-common.inc
33 34
34# apparmor 35# apparmor
diff --git a/etc/profile-a-l/kazam.profile b/etc/profile-a-l/kazam.profile
index 7b990bf41..277db1c24 100644
--- a/etc/profile-a-l/kazam.profile
+++ b/etc/profile-a-l/kazam.profile
@@ -49,7 +49,7 @@ disable-mnt
49# private-bin kazam,python* 49# private-bin kazam,python*
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc alsa,alternatives,asound.conf,dconf,fonts,gtk-2.0,gtk-3.0,machine-id,pulse,selinux,X11,xdg 52private-etc alsa,alternatives,asound.conf,dconf,fonts,gtk-2.0,gtk-3.0,ld.so.cache,ld.so.preload,machine-id,pulse,selinux,X11,xdg
53private-tmp 53private-tmp
54 54
55dbus-system none 55dbus-system none
diff --git a/etc/profile-a-l/kcalc.profile b/etc/profile-a-l/kcalc.profile
index 46e8ccb82..06978cbf1 100644
--- a/etc/profile-a-l/kcalc.profile
+++ b/etc/profile-a-l/kcalc.profile
@@ -28,6 +28,7 @@ whitelist /usr/share/config.kcfg/kcalc.kcfg
28whitelist /usr/share/kcalc 28whitelist /usr/share/kcalc
29whitelist /usr/share/kconf_update/kcalcrc.upd 29whitelist /usr/share/kconf_update/kcalcrc.upd
30include whitelist-common.inc 30include whitelist-common.inc
31include whitelist-run-common.inc
31include whitelist-runuser-common.inc 32include whitelist-runuser-common.inc
32include whitelist-usr-share-common.inc 33include whitelist-usr-share-common.inc
33include whitelist-var-common.inc 34include whitelist-var-common.inc
@@ -55,7 +56,7 @@ disable-mnt
55private-bin kcalc 56private-bin kcalc
56private-cache 57private-cache
57private-dev 58private-dev
58private-etc alternatives,fonts,ld.so.cache,locale,locale.conf 59private-etc alternatives,fonts,ld.so.cache,ld.so.preload,locale,locale.conf
59# private-lib - problems on Arch 60# private-lib - problems on Arch
60private-tmp 61private-tmp
61 62
diff --git a/etc/profile-a-l/kdiff3.profile b/etc/profile-a-l/kdiff3.profile
index 7c9be2bcc..df7ee31dc 100644
--- a/etc/profile-a-l/kdiff3.profile
+++ b/etc/profile-a-l/kdiff3.profile
@@ -23,6 +23,8 @@ include disable-interpreters.inc
23include disable-shell.inc 23include disable-shell.inc
24include disable-xdg.inc 24include disable-xdg.inc
25 25
26# Add the next line to your kdiff3.local if you don't need to compare files in /run.
27#include whitelist-run-common.inc
26include whitelist-runuser-common.inc 28include whitelist-runuser-common.inc
27# Add the next line to your kdiff3.local if you don't need to compare files in /usr/share. 29# Add the next line to your kdiff3.local if you don't need to compare files in /usr/share.
28#include whitelist-usr-share-common.inc 30#include whitelist-usr-share-common.inc
@@ -48,7 +50,7 @@ shell none
48tracelog 50tracelog
49 51
50disable-mnt 52disable-mnt
51private-bin kdiff3 53private-bin kdiff3
52private-cache 54private-cache
53private-dev 55private-dev
54 56
diff --git a/etc/profile-a-l/keepassx.profile b/etc/profile-a-l/keepassx.profile
index 768a3cef0..5e2d6d8df 100644
--- a/etc/profile-a-l/keepassx.profile
+++ b/etc/profile-a-l/keepassx.profile
@@ -41,7 +41,7 @@ tracelog
41 41
42private-bin keepassx,keepassx2 42private-bin keepassx,keepassx2
43private-dev 43private-dev
44private-etc alternatives,fonts,machine-id 44private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
45private-tmp 45private-tmp
46 46
47dbus-user none 47dbus-user none
diff --git a/etc/profile-a-l/keepassxc.profile b/etc/profile-a-l/keepassxc.profile
index b915f6202..45a707071 100644
--- a/etc/profile-a-l/keepassxc.profile
+++ b/etc/profile-a-l/keepassxc.profile
@@ -88,7 +88,7 @@ tracelog
88 88
89private-bin keepassxc,keepassxc-cli,keepassxc-proxy 89private-bin keepassxc,keepassxc-cli,keepassxc-proxy
90private-dev 90private-dev
91private-etc alternatives,fonts,ld.so.cache,machine-id 91private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
92private-tmp 92private-tmp
93 93
94dbus-user filter 94dbus-user filter
@@ -98,11 +98,10 @@ dbus-user.talk org.freedesktop.ScreenSaver
98dbus-user.talk org.gnome.ScreenSaver 98dbus-user.talk org.gnome.ScreenSaver
99dbus-user.talk org.gnome.SessionManager 99dbus-user.talk org.gnome.SessionManager
100dbus-user.talk org.xfce.ScreenSaver 100dbus-user.talk org.xfce.ScreenSaver
101?ALLOW_TRAY: dbus-user.talk org.kde.StatusNotifierWatcher
102?ALLOW_TRAY: dbus-user.own org.kde.*
101# Add the next line to your keepassxc.local to allow notifications. 103# Add the next line to your keepassxc.local to allow notifications.
102#dbus-user.talk org.freedesktop.Notifications 104#dbus-user.talk org.freedesktop.Notifications
103# Add the next line to your keepassxc.local to allow the tray menu.
104#dbus-user.talk org.kde.StatusNotifierWatcher
105#dbus-user.own org.kde.*
106dbus-system filter 105dbus-system filter
107dbus-system.talk org.freedesktop.login1 106dbus-system.talk org.freedesktop.login1
108 107
diff --git a/etc/profile-a-l/kget.profile b/etc/profile-a-l/kget.profile
index ec315b431..9b6646725 100644
--- a/etc/profile-a-l/kget.profile
+++ b/etc/profile-a-l/kget.profile
@@ -20,6 +20,7 @@ include disable-exec.inc
20include disable-interpreters.inc 20include disable-interpreters.inc
21include disable-programs.inc 21include disable-programs.inc
22 22
23include whitelist-run-common.inc
23include whitelist-var-common.inc 24include whitelist-var-common.inc
24 25
25caps.drop all 26caps.drop all
diff --git a/etc/profile-a-l/kid3.profile b/etc/profile-a-l/kid3.profile
index e66716eeb..5563aa410 100644
--- a/etc/profile-a-l/kid3.profile
+++ b/etc/profile-a-l/kid3.profile
@@ -37,7 +37,7 @@ tracelog
37 37
38private-cache 38private-cache
39private-dev 39private-dev
40private-etc alternatives,ca-certificates,crypto-policies,dconf,drirc,fonts,gtk-3.0,hostname,hosts,kde5rc,machine-id,pki,pulse,resolv.conf,ssl 40private-etc alternatives,ca-certificates,crypto-policies,dconf,drirc,fonts,gtk-3.0,hostname,hosts,kde5rc,ld.so.cache,ld.so.preload,machine-id,pki,pulse,resolv.conf,ssl
41private-tmp 41private-tmp
42private-opt none 42private-opt none
43private-srv none 43private-srv none
diff --git a/etc/profile-a-l/kiwix-desktop.profile b/etc/profile-a-l/kiwix-desktop.profile
index 968402a8a..837ea9e36 100644
--- a/etc/profile-a-l/kiwix-desktop.profile
+++ b/etc/profile-a-l/kiwix-desktop.profile
@@ -44,7 +44,7 @@ shell none
44disable-mnt 44disable-mnt
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,hostname,hosts,ld.so.cache,machine-id,pki,pulse,resolv.conf,ssl 47private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,hostname,hosts,ld.so.cache,ld.so.preload,machine-id,pki,pulse,resolv.conf,ssl
48private-tmp 48private-tmp
49 49
50dbus-user none 50dbus-user none
diff --git a/etc/profile-a-l/klavaro.profile b/etc/profile-a-l/klavaro.profile
index f733fa42c..46164403b 100644
--- a/etc/profile-a-l/klavaro.profile
+++ b/etc/profile-a-l/klavaro.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin bash,klavaro,sh,tclsh,tclsh* 45private-bin bash,klavaro,sh,tclsh,tclsh*
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,fonts 48private-etc alternatives,fonts,ld.so.cache,ld.so.preload
49private-tmp 49private-tmp
50private-opt none 50private-opt none
51private-srv none 51private-srv none
diff --git a/etc/profile-a-l/kmail.profile b/etc/profile-a-l/kmail.profile
index 2c645677c..0796e6876 100644
--- a/etc/profile-a-l/kmail.profile
+++ b/etc/profile-a-l/kmail.profile
@@ -37,6 +37,7 @@ include disable-exec.inc
37include disable-interpreters.inc 37include disable-interpreters.inc
38include disable-programs.inc 38include disable-programs.inc
39 39
40include whitelist-run-common.inc
40include whitelist-var-common.inc 41include whitelist-var-common.inc
41 42
42# apparmor 43# apparmor
diff --git a/etc/profile-a-l/konversation.profile b/etc/profile-a-l/konversation.profile
index 723fef0d2..1121dc8a5 100644
--- a/etc/profile-a-l/konversation.profile
+++ b/etc/profile-a-l/konversation.profile
@@ -20,6 +20,7 @@ include disable-programs.inc
20include disable-shell.inc 20include disable-shell.inc
21include disable-xdg.inc 21include disable-xdg.inc
22 22
23include whitelist-run-common.inc
23include whitelist-var-common.inc 24include whitelist-var-common.inc
24 25
25caps.drop all 26caps.drop all
diff --git a/etc/profile-a-l/ktorrent.profile b/etc/profile-a-l/ktorrent.profile
index 9d8aa1bd7..6e3b0c875 100644
--- a/etc/profile-a-l/ktorrent.profile
+++ b/etc/profile-a-l/ktorrent.profile
@@ -37,6 +37,7 @@ whitelist ${HOME}/.kde4/share/config/ktorrentrc
37whitelist ${HOME}/.local/share/ktorrent 37whitelist ${HOME}/.local/share/ktorrent
38whitelist ${HOME}/.local/share/kxmlgui5/ktorrent 38whitelist ${HOME}/.local/share/kxmlgui5/ktorrent
39include whitelist-common.inc 39include whitelist-common.inc
40include whitelist-run-common.inc
40include whitelist-var-common.inc 41include whitelist-var-common.inc
41 42
42caps.drop all 43caps.drop all
diff --git a/etc/profile-a-l/ktouch.profile b/etc/profile-a-l/ktouch.profile
index 051782172..44da8acca 100644
--- a/etc/profile-a-l/ktouch.profile
+++ b/etc/profile-a-l/ktouch.profile
@@ -46,7 +46,7 @@ disable-mnt
46private-bin ktouch 46private-bin ktouch
47private-cache 47private-cache
48private-dev 48private-dev
49private-etc alternatives,fonts,kde5rc,machine-id 49private-etc alternatives,fonts,kde5rc,ld.so.cache,ld.so.preload,machine-id
50private-tmp 50private-tmp
51 51
52dbus-user none 52dbus-user none
diff --git a/etc/profile-a-l/kube.profile b/etc/profile-a-l/kube.profile
index 262ffb532..718cbbf40 100644
--- a/etc/profile-a-l/kube.profile
+++ b/etc/profile-a-l/kube.profile
@@ -68,7 +68,7 @@ tracelog
68private-bin kube,sink_synchronizer 68private-bin kube,sink_synchronizer
69private-cache 69private-cache
70private-dev 70private-dev
71private-etc alternatives,ca-certificates,crypto-policies,fonts,gcrypt,gtk-2.0,gtk-3.0,hostname,hosts,pki,resolv.conf,selinux,ssl,xdg 71private-etc alternatives,ca-certificates,crypto-policies,fonts,gcrypt,gtk-2.0,gtk-3.0,hostname,hosts,ld.so.cache,ld.so.preload,pki,resolv.conf,selinux,ssl,xdg
72private-tmp 72private-tmp
73writable-run-user 73writable-run-user
74 74
diff --git a/etc/profile-a-l/kwin_x11.profile b/etc/profile-a-l/kwin_x11.profile
index 5bbadfc73..0b8763c29 100644
--- a/etc/profile-a-l/kwin_x11.profile
+++ b/etc/profile-a-l/kwin_x11.profile
@@ -21,6 +21,7 @@ include disable-programs.inc
21include disable-shell.inc 21include disable-shell.inc
22include disable-xdg.inc 22include disable-xdg.inc
23 23
24include whitelist-run-common.inc
24include whitelist-var-common.inc 25include whitelist-var-common.inc
25 26
26caps.drop all 27caps.drop all
@@ -42,5 +43,5 @@ tracelog
42disable-mnt 43disable-mnt
43private-bin kwin_x11 44private-bin kwin_x11
44private-dev 45private-dev
45private-etc alternatives,drirc,fonts,kde5rc,ld.so.cache,machine-id,xdg 46private-etc alternatives,drirc,fonts,kde5rc,ld.so.cache,ld.so.preload,machine-id,xdg
46private-tmp 47private-tmp
diff --git a/etc/profile-a-l/kwrite.profile b/etc/profile-a-l/kwrite.profile
index 682c7782d..aff6f3181 100644
--- a/etc/profile-a-l/kwrite.profile
+++ b/etc/profile-a-l/kwrite.profile
@@ -24,6 +24,7 @@ include disable-programs.inc
24include disable-shell.inc 24include disable-shell.inc
25include disable-xdg.inc 25include disable-xdg.inc
26 26
27include whitelist-run-common.inc
27include whitelist-var-common.inc 28include whitelist-var-common.inc
28 29
29apparmor 30apparmor
@@ -46,7 +47,7 @@ tracelog
46 47
47private-bin kbuildsycoca4,kdeinit4,kwrite 48private-bin kbuildsycoca4,kdeinit4,kwrite
48private-dev 49private-dev
49private-etc alternatives,fonts,kde4rc,kde5rc,ld.so.cache,machine-id,pulse,xdg 50private-etc alternatives,fonts,kde4rc,kde5rc,ld.so.cache,ld.so.preload,machine-id,pulse,xdg
50private-tmp 51private-tmp
51 52
52# dbus-user none 53# dbus-user none
diff --git a/etc/profile-a-l/libreoffice.profile b/etc/profile-a-l/libreoffice.profile
index 328307705..12ff79748 100644
--- a/etc/profile-a-l/libreoffice.profile
+++ b/etc/profile-a-l/libreoffice.profile
@@ -21,6 +21,7 @@ include disable-devel.inc
21include disable-exec.inc 21include disable-exec.inc
22include disable-programs.inc 22include disable-programs.inc
23 23
24include whitelist-run-common.inc
24include whitelist-var-common.inc 25include whitelist-var-common.inc
25 26
26# Debian 10/Ubuntu 18.04 come with their own apparmor profile, but it is not in enforce mode. 27# Debian 10/Ubuntu 18.04 come with their own apparmor profile, but it is not in enforce mode.
diff --git a/etc/profile-a-l/links-common.profile b/etc/profile-a-l/links-common.profile
index bd28f25d6..84f5dc50d 100644
--- a/etc/profile-a-l/links-common.profile
+++ b/etc/profile-a-l/links-common.profile
@@ -47,11 +47,11 @@ shell none
47tracelog 47tracelog
48 48
49disable-mnt 49disable-mnt
50# Add 'private-bin PROGRAM1,PROGRAM2' to your links-common.local if you want to use user-configured programs. 50# Add 'private-bin PROGRAM1,PROGRAM2' to your links-common.local if you want to use user-configured programs.
51private-bin sh 51private-bin sh
52private-cache 52private-cache
53private-dev 53private-dev
54private-etc alternatives,ca-certificates,crypto-policies,nsswitch.conf,pki,resolv.conf,ssl 54private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,nsswitch.conf,pki,resolv.conf,ssl
55# Add the next line to your links-common.local to allow external media players. 55# Add the next line to your links-common.local to allow external media players.
56# private-etc alsa,asound.conf,machine-id,openal,pulse 56# private-etc alsa,asound.conf,machine-id,openal,pulse
57private-tmp 57private-tmp
diff --git a/etc/profile-a-l/lollypop.profile b/etc/profile-a-l/lollypop.profile
index a187ca0fc..fde338ff0 100644
--- a/etc/profile-a-l/lollypop.profile
+++ b/etc/profile-a-l/lollypop.profile
@@ -37,6 +37,6 @@ seccomp
37shell none 37shell none
38 38
39private-dev 39private-dev
40private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-3.0,host.conf,hostname,hosts,machine-id,pki,pulse,resolv.conf,ssl,xdg 40private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,machine-id,pki,pulse,resolv.conf,ssl,xdg
41private-tmp 41private-tmp
42 42
diff --git a/etc/profile-a-l/lyx.profile b/etc/profile-a-l/lyx.profile
index fa69463d1..ae2f2d434 100644
--- a/etc/profile-a-l/lyx.profile
+++ b/etc/profile-a-l/lyx.profile
@@ -32,7 +32,7 @@ apparmor
32machine-id 32machine-id
33 33
34# private-bin atril,dvilualatex,env,latex,lua*,luatex,lyx,lyxclient,okular,pdf2latex,pdflatex,pdftex,perl*,python*,qpdf,qpdfview,sh,tex2lyx,texmf,xelatex 34# private-bin atril,dvilualatex,env,latex,lua*,luatex,lyx,lyxclient,okular,pdf2latex,pdflatex,pdftex,perl*,python*,qpdf,qpdfview,sh,tex2lyx,texmf,xelatex
35private-etc alternatives,dconf,fonts,gtk-2.0,gtk-3.0,locale,locale.alias,locale.conf,lyx,machine-id,mime.types,passwd,texmf,X11,xdg 35private-etc alternatives,dconf,fonts,gtk-2.0,gtk-3.0,ld.so.cache,ld.so.preload,locale,locale.alias,locale.conf,lyx,machine-id,mime.types,passwd,texmf,X11,xdg
36 36
37# Redirect 37# Redirect
38include latex-common.profile 38include latex-common.profile
diff --git a/etc/profile-m-z/QOwnNotes.profile b/etc/profile-m-z/QOwnNotes.profile
index 15cb931dd..235640eeb 100644
--- a/etc/profile-m-z/QOwnNotes.profile
+++ b/etc/profile-m-z/QOwnNotes.profile
@@ -50,6 +50,6 @@ tracelog
50disable-mnt 50disable-mnt
51private-bin gio,QOwnNotes 51private-bin gio,QOwnNotes
52private-dev 52private-dev
53private-etc alternatives,ca-certificates,crypto-policies,fonts,host.conf,hosts,ld.so.cache,machine-id,nsswitch.conf,pki,pulse,resolv.conf,ssl 53private-etc alternatives,ca-certificates,crypto-policies,fonts,host.conf,hosts,ld.so.cache,ld.so.preload,machine-id,nsswitch.conf,pki,pulse,resolv.conf,ssl
54private-tmp 54private-tmp
55 55
diff --git a/etc/profile-m-z/Viber.profile b/etc/profile-m-z/Viber.profile
index 866d57e67..89ca53af6 100644
--- a/etc/profile-m-z/Viber.profile
+++ b/etc/profile-m-z/Viber.profile
@@ -33,5 +33,5 @@ shell none
33 33
34disable-mnt 34disable-mnt
35private-bin awk,bash,dig,sh,Viber 35private-bin awk,bash,dig,sh,Viber
36private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,hosts,localtime,machine-id,mailcap,nsswitch.conf,pki,proxychains.conf,pulse,resolv.conf,ssl,X11 36private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,hosts,ld.so.cache,ld.so.preload,localtime,machine-id,mailcap,nsswitch.conf,pki,proxychains.conf,pulse,resolv.conf,ssl,X11
37private-tmp 37private-tmp
diff --git a/etc/profile-m-z/Xvfb.profile b/etc/profile-m-z/Xvfb.profile
index 1acd43023..722e12d9c 100644
--- a/etc/profile-m-z/Xvfb.profile
+++ b/etc/profile-m-z/Xvfb.profile
@@ -43,5 +43,5 @@ private
43# private-bin sh,xkbcomp,Xvfb 43# private-bin sh,xkbcomp,Xvfb
44# private-bin bash,cat,ls,sh,strace,xkbcomp,Xvfb 44# private-bin bash,cat,ls,sh,strace,xkbcomp,Xvfb
45private-dev 45private-dev
46private-etc alternatives,gai.conf,host.conf,hostname,hosts,ld.so.cache,ld.so.conf,nsswitch.conf,resolv.conf 46private-etc alternatives,gai.conf,host.conf,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.preload,nsswitch.conf,resolv.conf
47private-tmp 47private-tmp
diff --git a/etc/profile-m-z/magicor.profile b/etc/profile-m-z/magicor.profile
index fc5ae3ee9..47165dd3d 100644
--- a/etc/profile-m-z/magicor.profile
+++ b/etc/profile-m-z/magicor.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin magicor,python2* 45private-bin magicor,python2*
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc machine-id 48private-etc alternatives,ld.so.cache,ld.so.preload,machine-id
49private-tmp 49private-tmp
50 50
51dbus-user none 51dbus-user none
diff --git a/etc/profile-m-z/make.profile b/etc/profile-m-z/make.profile
new file mode 100644
index 000000000..7e9638fe4
--- /dev/null
+++ b/etc/profile-m-z/make.profile
@@ -0,0 +1,13 @@
1# Firejail profile for make
2# Description: GNU make utility to maintain groups of programs
3# This file is overwritten after every install/update
4quiet
5# Persistent local customizations
6include make.local
7# Persistent global definitions
8include globals.local
9
10memory-deny-write-execute
11
12# Redirect
13include build-systems-common.profile
diff --git a/etc/profile-m-z/man.profile b/etc/profile-m-z/man.profile
index b2f761230..9c5959091 100644
--- a/etc/profile-m-z/man.profile
+++ b/etc/profile-m-z/man.profile
@@ -58,7 +58,7 @@ disable-mnt
58#private-bin apropos,bash,cat,catman,col,gpreconv,groff,grotty,gunzip,gzip,less,man,most,nroff,preconv,sed,sh,tbl,tr,troff,whatis,which,xtotroff,zcat,zsoelim 58#private-bin apropos,bash,cat,catman,col,gpreconv,groff,grotty,gunzip,gzip,less,man,most,nroff,preconv,sed,sh,tbl,tr,troff,whatis,which,xtotroff,zcat,zsoelim
59private-cache 59private-cache
60private-dev 60private-dev
61private-etc alternatives,fonts,groff,locale,locale.alias,locale.conf,man_db.conf,manpath.config,selinux,sysless,xdg 61private-etc alternatives,fonts,groff,ld.so.cache,ld.so.preload,locale,locale.alias,locale.conf,man_db.conf,manpath.config,selinux,sysless,xdg
62#private-tmp 62#private-tmp
63 63
64dbus-user none 64dbus-user none
diff --git a/etc/profile-m-z/masterpdfeditor.profile b/etc/profile-m-z/masterpdfeditor.profile
index e61578ffe..764d040ab 100644
--- a/etc/profile-m-z/masterpdfeditor.profile
+++ b/etc/profile-m-z/masterpdfeditor.profile
@@ -36,6 +36,6 @@ tracelog
36 36
37private-cache 37private-cache
38private-dev 38private-dev
39private-etc alternatives,fonts 39private-etc alternatives,fonts,ld.so.cache,ld.so.preload
40private-tmp 40private-tmp
41 41
diff --git a/etc/profile-m-z/mate-calc.profile b/etc/profile-m-z/mate-calc.profile
index 64b184482..2be6b9af1 100644
--- a/etc/profile-m-z/mate-calc.profile
+++ b/etc/profile-m-z/mate-calc.profile
@@ -42,7 +42,7 @@ shell none
42 42
43disable-mnt 43disable-mnt
44private-bin mate-calc,mate-calculator 44private-bin mate-calc,mate-calculator
45private-etc alternatives,dconf,fonts,gtk-3.0 45private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload
46private-dev 46private-dev
47private-opt none 47private-opt none
48private-tmp 48private-tmp
diff --git a/etc/profile-m-z/mate-color-select.profile b/etc/profile-m-z/mate-color-select.profile
index a6b49315c..e16b0fc6c 100644
--- a/etc/profile-m-z/mate-color-select.profile
+++ b/etc/profile-m-z/mate-color-select.profile
@@ -33,7 +33,7 @@ shell none
33 33
34disable-mnt 34disable-mnt
35private-bin mate-color-select 35private-bin mate-color-select
36private-etc alternatives,fonts 36private-etc alternatives,fonts,ld.so.cache,ld.so.preload
37private-dev 37private-dev
38private-lib 38private-lib
39private-tmp 39private-tmp
diff --git a/etc/profile-m-z/mate-dictionary.profile b/etc/profile-m-z/mate-dictionary.profile
index 3f3d027b9..469416304 100644
--- a/etc/profile-m-z/mate-dictionary.profile
+++ b/etc/profile-m-z/mate-dictionary.profile
@@ -37,7 +37,7 @@ shell none
37 37
38disable-mnt 38disable-mnt
39private-bin mate-dictionary 39private-bin mate-dictionary
40private-etc alternatives,ca-certificates,crypto-policies,fonts,pki,resolv.conf,ssl 40private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl
41private-opt mate-dictionary 41private-opt mate-dictionary
42private-dev 42private-dev
43private-tmp 43private-tmp
diff --git a/etc/profile-m-z/mcabber.profile b/etc/profile-m-z/mcabber.profile
index 7592d879c..4c4a6aa76 100644
--- a/etc/profile-m-z/mcabber.profile
+++ b/etc/profile-m-z/mcabber.profile
@@ -31,4 +31,4 @@ shell none
31 31
32private-bin mcabber 32private-bin mcabber
33private-dev 33private-dev
34private-etc alternatives,ca-certificates,crypto-policies,pki,ssl 34private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,pki,ssl
diff --git a/etc/profile-m-z/mdr.profile b/etc/profile-m-z/mdr.profile
index 08d56ede5..bcfd59cbb 100644
--- a/etc/profile-m-z/mdr.profile
+++ b/etc/profile-m-z/mdr.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin mdr 45private-bin mdr
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc none 48private-etc alternatives,ld.so.cache,ld.so.preload
49private-lib 49private-lib
50private-tmp 50private-tmp
51 51
diff --git a/etc/profile-m-z/mediainfo.profile b/etc/profile-m-z/mediainfo.profile
index 7597d4067..9bfbaf745 100644
--- a/etc/profile-m-z/mediainfo.profile
+++ b/etc/profile-m-z/mediainfo.profile
@@ -42,7 +42,7 @@ x11 none
42private-bin mediainfo 42private-bin mediainfo
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc alternatives 45private-etc alternatives,ld.so.cache,ld.so.preload
46private-tmp 46private-tmp
47 47
48dbus-user none 48dbus-user none
diff --git a/etc/profile-m-z/menulibre.profile b/etc/profile-m-z/menulibre.profile
index 4845e9cce..ed0758a49 100644
--- a/etc/profile-m-z/menulibre.profile
+++ b/etc/profile-m-z/menulibre.profile
@@ -52,7 +52,7 @@ tracelog
52disable-mnt 52disable-mnt
53private-cache 53private-cache
54private-dev 54private-dev
55private-etc alternatives,dconf,fonts,gtk-3.0,locale.alias,locale.conf,mime.types,nsswitch.conf,passwd,pki,selinux,X11,xdg 55private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,locale.alias,locale.conf,mime.types,nsswitch.conf,passwd,pki,selinux,X11,xdg
56private-tmp 56private-tmp
57 57
58dbus-user none 58dbus-user none
diff --git a/etc/profile-m-z/meson.profile b/etc/profile-m-z/meson.profile
new file mode 100644
index 000000000..b4909a9d8
--- /dev/null
+++ b/etc/profile-m-z/meson.profile
@@ -0,0 +1,14 @@
1# Firejail profile for meson
2# Description: A high productivity build system
3# This file is overwritten after every install/update
4quiet
5# Persistent local customizations
6include meson.local
7# Persistent global definitions
8include globals.local
9
10# Allow python3 (blacklisted by disable-interpreters.inc)
11include allow-python3.inc
12
13# Redirect
14include build-systems-common.profile
diff --git a/etc/profile-m-z/microsoft-edge-beta.profile b/etc/profile-m-z/microsoft-edge-beta.profile
index 34d9f470a..095038f08 100644
--- a/etc/profile-m-z/microsoft-edge-beta.profile
+++ b/etc/profile-m-z/microsoft-edge-beta.profile
@@ -17,4 +17,4 @@ whitelist ${HOME}/.config/microsoft-edge-beta
17private-opt microsoft 17private-opt microsoft
18 18
19# Redirect 19# Redirect
20include chromium-common.profile \ No newline at end of file 20include chromium-common.profile
diff --git a/etc/profile-m-z/mindless.profile b/etc/profile-m-z/mindless.profile
index ad7e40b12..16ace7ce4 100644
--- a/etc/profile-m-z/mindless.profile
+++ b/etc/profile-m-z/mindless.profile
@@ -42,7 +42,7 @@ private
42private-bin mindless 42private-bin mindless
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc fonts 45private-etc alternatives,fonts,ld.so.cache,ld.so.preload
46private-tmp 46private-tmp
47 47
48dbus-user none 48dbus-user none
diff --git a/etc/profile-m-z/mirrormagic.profile b/etc/profile-m-z/mirrormagic.profile
index c47a16ffd..be846ce63 100644
--- a/etc/profile-m-z/mirrormagic.profile
+++ b/etc/profile-m-z/mirrormagic.profile
@@ -44,7 +44,7 @@ private
44private-bin mirrormagic 44private-bin mirrormagic
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc machine-id 47private-etc alternatives,ld.so.cache,ld.so.preload,machine-id
48private-tmp 48private-tmp
49 49
50dbus-user none 50dbus-user none
diff --git a/etc/profile-m-z/mocp.profile b/etc/profile-m-z/mocp.profile
index dbc3c1d40..313d78030 100644
--- a/etc/profile-m-z/mocp.profile
+++ b/etc/profile-m-z/mocp.profile
@@ -42,7 +42,7 @@ tracelog
42private-bin mocp 42private-bin mocp
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc alternatives,asound.conf,ca-certificates,crypto-policies,group,machine-id,pki,pulse,resolv.conf,ssl 45private-etc alternatives,asound.conf,ca-certificates,crypto-policies,group,ld.so.cache,ld.so.preload,machine-id,pki,pulse,resolv.conf,ssl
46private-tmp 46private-tmp
47 47
48dbus-user none 48dbus-user none
diff --git a/etc/profile-m-z/mp3splt-gtk.profile b/etc/profile-m-z/mp3splt-gtk.profile
index f0063d250..fe3c78b55 100644
--- a/etc/profile-m-z/mp3splt-gtk.profile
+++ b/etc/profile-m-z/mp3splt-gtk.profile
@@ -37,7 +37,7 @@ tracelog
37private-bin mp3splt-gtk 37private-bin mp3splt-gtk
38private-cache 38private-cache
39private-dev 39private-dev
40private-etc alsa,alternatives,asound.conf,dconf,fonts,gtk-3.0,machine-id,openal,pulse 40private-etc alsa,alternatives,asound.conf,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,machine-id,openal,pulse
41private-tmp 41private-tmp
42 42
43dbus-user none 43dbus-user none
diff --git a/etc/profile-m-z/mp3splt.profile b/etc/profile-m-z/mp3splt.profile
index 400d8a6b6..c89c72ce4 100644
--- a/etc/profile-m-z/mp3splt.profile
+++ b/etc/profile-m-z/mp3splt.profile
@@ -44,7 +44,7 @@ disable-mnt
44private-bin flacsplt,mp3splt,mp3wrap,oggsplt 44private-bin flacsplt,mp3splt,mp3wrap,oggsplt
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc alternatives 47private-etc alternatives,ld.so.cache,ld.so.preload
48private-tmp 48private-tmp
49 49
50memory-deny-write-execute 50memory-deny-write-execute
diff --git a/etc/profile-m-z/mpDris2.profile b/etc/profile-m-z/mpDris2.profile
index 10964ef24..18a839363 100644
--- a/etc/profile-m-z/mpDris2.profile
+++ b/etc/profile-m-z/mpDris2.profile
@@ -49,7 +49,7 @@ shell none
49private-bin mpDris2,notify-send,python* 49private-bin mpDris2,notify-send,python*
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc alternatives,hosts,nsswitch.conf 52private-etc alternatives,hosts,ld.so.cache,ld.so.preload,nsswitch.conf
53private-lib libdbus-1.so.*,libdbus-glib-1.so.*,libgirepository-1.0.so.*,libnotify.so.*,libpython*,python2*,python3* 53private-lib libdbus-1.so.*,libdbus-glib-1.so.*,libgirepository-1.0.so.*,libnotify.so.*,libpython*,python2*,python3*
54private-tmp 54private-tmp
55 55
diff --git a/etc/profile-m-z/mpv.profile b/etc/profile-m-z/mpv.profile
index fa433b672..efb11465b 100644
--- a/etc/profile-m-z/mpv.profile
+++ b/etc/profile-m-z/mpv.profile
@@ -11,7 +11,7 @@ include globals.local
11# edit ~/.config/mpv/foobar.conf: 11# edit ~/.config/mpv/foobar.conf:
12# screenshot-directory=~/Pictures 12# screenshot-directory=~/Pictures
13 13
14# Mpv has a powerfull lua-API, some off these lua-scripts interact 14# Mpv has a powerful lua-API, some off these lua-scripts interact
15# with external resources which are blocked by firejail. In such cases 15# with external resources which are blocked by firejail. In such cases
16# you need to allow these resources by 16# you need to allow these resources by
17# - adding additional binaries to private-bin 17# - adding additional binaries to private-bin
@@ -74,7 +74,7 @@ seccomp.block-secondary
74shell none 74shell none
75tracelog 75tracelog
76 76
77private-bin env,mpv,python*,waf,youtube-dl 77private-bin env,mpv,python*,waf,youtube-dl,yt-dlp
78# private-cache causes slow OSD, see #2838 78# private-cache causes slow OSD, see #2838
79#private-cache 79#private-cache
80private-dev 80private-dev
diff --git a/etc/profile-m-z/mrrescue.profile b/etc/profile-m-z/mrrescue.profile
index 530e779fc..3fe88ec7f 100644
--- a/etc/profile-m-z/mrrescue.profile
+++ b/etc/profile-m-z/mrrescue.profile
@@ -37,7 +37,6 @@ caps.drop all
37net none 37net none
38nodvd 38nodvd
39nogroups 39nogroups
40noinput
41nonewprivs 40nonewprivs
42noroot 41noroot
43notv 42notv
@@ -53,7 +52,7 @@ disable-mnt
53private-bin love,mrrescue,sh 52private-bin love,mrrescue,sh
54private-cache 53private-cache
55private-dev 54private-dev
56private-etc machine-id 55private-etc alternatives,ld.so.cache,ld.so.preload,machine-id
57private-tmp 56private-tmp
58 57
59dbus-user none 58dbus-user none
diff --git a/etc/profile-m-z/ms-office.profile b/etc/profile-m-z/ms-office.profile
index ad12f53a4..e15b14db7 100644
--- a/etc/profile-m-z/ms-office.profile
+++ b/etc/profile-m-z/ms-office.profile
@@ -35,7 +35,7 @@ tracelog
35 35
36disable-mnt 36disable-mnt
37private-bin bash,env,fonts,jak,ms-office,python*,sh 37private-bin bash,env,fonts,jak,ms-office,python*,sh
38private-etc alternatives,ca-certificates,crypto-policies,pki,resolv.conf,ssl 38private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl
39private-dev 39private-dev
40private-tmp 40private-tmp
41 41
diff --git a/etc/profile-m-z/mupdf-x11-curl.profile b/etc/profile-m-z/mupdf-x11-curl.profile
index a04d386a2..006f64ba8 100644
--- a/etc/profile-m-z/mupdf-x11-curl.profile
+++ b/etc/profile-m-z/mupdf-x11-curl.profile
@@ -12,7 +12,7 @@ ignore net none
12netfilter 12netfilter
13protocol unix,inet,inet6 13protocol unix,inet,inet6
14 14
15private-etc ca-certificates,crypto-policies,hosts,nsswitch.conf,pki,resolv.conf,ssl 15private-etc alternatives,ca-certificates,crypto-policies,hosts,ld.so.cache,ld.so.preload,nsswitch.conf,pki,resolv.conf,ssl
16 16
17# Redirect 17# Redirect
18include mupdf.profile 18include mupdf.profile
diff --git a/etc/profile-m-z/musixmatch.profile b/etc/profile-m-z/musixmatch.profile
index 07661cac8..796d7fbb0 100644
--- a/etc/profile-m-z/musixmatch.profile
+++ b/etc/profile-m-z/musixmatch.profile
@@ -29,9 +29,9 @@ notv
29nou2f 29nou2f
30novideo 30novideo
31protocol unix,inet,inet6,netlink 31protocol unix,inet,inet6,netlink
32seccomp 32seccomp !chroot
33 33
34disable-mnt 34disable-mnt
35private-dev 35private-dev
36private-etc alternatives,asound.conf,ca-certificates,crypto-policies,machine-id,pki,pulse,ssl 36private-etc alternatives,asound.conf,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,machine-id,pki,pulse,ssl
37 37
diff --git a/etc/profile-m-z/mutt.profile b/etc/profile-m-z/mutt.profile
index c4d96711c..d10c55549 100644
--- a/etc/profile-m-z/mutt.profile
+++ b/etc/profile-m-z/mutt.profile
@@ -134,7 +134,7 @@ tracelog
134# disable-mnt 134# disable-mnt
135private-cache 135private-cache
136private-dev 136private-dev
137private-etc alternatives,ca-certificates,crypto-policies,fonts,gai.conf,gcrypt,gnupg,gnutls,hostname,hosts,hosts.conf,mail,mailname,Mutt,Muttrc,Muttrc.d,nntpserver,nsswitch.conf,passwd,pki,resolv.conf,ssl,terminfo,xdg 137private-etc alternatives,ca-certificates,crypto-policies,fonts,gai.conf,gcrypt,gnupg,gnutls,hostname,hosts,hosts.conf,ld.so.cache,ld.so.preload,mail,mailname,Mutt,Muttrc,Muttrc.d,nntpserver,nsswitch.conf,passwd,pki,resolv.conf,ssl,terminfo,xdg
138private-tmp 138private-tmp
139writable-run-user 139writable-run-user
140writable-var 140writable-var
diff --git a/etc/profile-m-z/mypaint.profile b/etc/profile-m-z/mypaint.profile
index 1b4fc4346..74301df06 100644
--- a/etc/profile-m-z/mypaint.profile
+++ b/etc/profile-m-z/mypaint.profile
@@ -43,7 +43,7 @@ tracelog
43 43
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,dconf,fonts,gtk-3.0 46private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-m-z/nano.profile b/etc/profile-m-z/nano.profile
index 996a1722a..f7c1f0ff7 100644
--- a/etc/profile-m-z/nano.profile
+++ b/etc/profile-m-z/nano.profile
@@ -49,7 +49,7 @@ private-dev
49# Add the next lines to your nano.local if you want to edit files in /etc directly. 49# Add the next lines to your nano.local if you want to edit files in /etc directly.
50#ignore private-etc 50#ignore private-etc
51#writable-etc 51#writable-etc
52private-etc alternatives,nanorc 52private-etc alternatives,ld.so.cache,ld.so.preload,nanorc
53# Add the next line to your nano.local if you want to edit files in /var directly. 53# Add the next line to your nano.local if you want to edit files in /var directly.
54#writable-var 54#writable-var
55 55
diff --git a/etc/profile-m-z/neochat.profile b/etc/profile-m-z/neochat.profile
index 58cc716d9..0f55b674f 100644
--- a/etc/profile-m-z/neochat.profile
+++ b/etc/profile-m-z/neochat.profile
@@ -60,6 +60,6 @@ private-tmp
60dbus-user filter 60dbus-user filter
61dbus-user.own org.kde.neochat 61dbus-user.own org.kde.neochat
62dbus-user.talk org.freedesktop.Notifications 62dbus-user.talk org.freedesktop.Notifications
63dbus-user.talk org.kde.StatusNotifierWatcher 63?ALLOW_TRAY: dbus-user.talk org.kde.StatusNotifierWatcher
64dbus-user.talk org.kde.kwalletd5 64dbus-user.talk org.kde.kwalletd5
65dbus-system none 65dbus-system none
diff --git a/etc/profile-m-z/neomutt.profile b/etc/profile-m-z/neomutt.profile
index 7e627a52e..f31cf9dcb 100644
--- a/etc/profile-m-z/neomutt.profile
+++ b/etc/profile-m-z/neomutt.profile
@@ -137,7 +137,7 @@ tracelog
137# disable-mnt 137# disable-mnt
138private-cache 138private-cache
139private-dev 139private-dev
140private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gcrypt,gnupg,hostname,hosts,hosts.conf,mail,mailname,Mutt,Muttrc,Muttrc.d,neomuttrc,neomuttrc.d,nntpserver,nsswitch.conf,passwd,pki,resolv.conf,ssl,xdg 140private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gcrypt,gnupg,hostname,hosts,hosts.conf,ld.so.cache,ld.so.preload,mail,mailname,Mutt,Muttrc,Muttrc.d,neomuttrc,neomuttrc.d,nntpserver,nsswitch.conf,passwd,pki,resolv.conf,ssl,xdg
141private-tmp 141private-tmp
142writable-run-user 142writable-run-user
143writable-var 143writable-var
diff --git a/etc/profile-m-z/netactview.profile b/etc/profile-m-z/netactview.profile
index 1bcc6a962..d6ac8d5bc 100644
--- a/etc/profile-m-z/netactview.profile
+++ b/etc/profile-m-z/netactview.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin netactview,netactview_polkit 45private-bin netactview,netactview_polkit
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,fonts 48private-etc alternatives,fonts,ld.so.cache,ld.so.preload
49private-lib 49private-lib
50private-tmp 50private-tmp
51 51
diff --git a/etc/profile-m-z/newsboat.profile b/etc/profile-m-z/newsboat.profile
index fa4ccea7c..cf72bf802 100644
--- a/etc/profile-m-z/newsboat.profile
+++ b/etc/profile-m-z/newsboat.profile
@@ -53,7 +53,7 @@ disable-mnt
53private-bin gzip,lynx,newsboat,sh,w3m 53private-bin gzip,lynx,newsboat,sh,w3m
54private-cache 54private-cache
55private-dev 55private-dev
56private-etc alternatives,ca-certificates,crypto-policies,lynx.cfg,lynx.lss,pki,resolv.conf,ssl,terminfo 56private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,lynx.cfg,lynx.lss,pki,resolv.conf,ssl,terminfo
57private-tmp 57private-tmp
58 58
59dbus-user none 59dbus-user none
diff --git a/etc/profile-m-z/newsflash.profile b/etc/profile-m-z/newsflash.profile
index 56cedec03..9966a0e1b 100644
--- a/etc/profile-m-z/newsflash.profile
+++ b/etc/profile-m-z/newsflash.profile
@@ -51,7 +51,7 @@ disable-mnt
51private-bin com.gitlab.newsflash,newsflash 51private-bin com.gitlab.newsflash,newsflash
52private-cache 52private-cache
53private-dev 53private-dev
54private-etc ca-certificates,crypto-policies,dconf,fonts,gtk-3.0,hosts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,nsswitch.conf,pango,pki,resolv.conf,ssl,X11 54private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-3.0,hosts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,nsswitch.conf,pango,pki,resolv.conf,ssl,X11
55private-tmp 55private-tmp
56 56
57dbus-user none 57dbus-user none
diff --git a/etc/profile-m-z/nextcloud.profile b/etc/profile-m-z/nextcloud.profile
index cb499ba34..354d3351e 100644
--- a/etc/profile-m-z/nextcloud.profile
+++ b/etc/profile-m-z/nextcloud.profile
@@ -61,12 +61,11 @@ tracelog
61disable-mnt 61disable-mnt
62private-bin nextcloud,nextcloud-desktop 62private-bin nextcloud,nextcloud-desktop
63private-cache 63private-cache
64private-etc alternatives,ca-certificates,crypto-policies,drirc,fonts,gcrypt,host.conf,hosts,ld.so.cache,machine-id,Nextcloud,nsswitch.conf,os-release,passwd,pki,pulse,resolv.conf,selinux,ssl,xdg 64private-etc alternatives,ca-certificates,crypto-policies,drirc,fonts,gcrypt,host.conf,hosts,ld.so.cache,ld.so.preload,machine-id,Nextcloud,nsswitch.conf,os-release,passwd,pki,pulse,resolv.conf,selinux,ssl,xdg
65private-dev 65private-dev
66private-tmp 66private-tmp
67 67
68dbus-user filter 68dbus-user filter
69dbus-user.talk org.freedesktop.secrets 69dbus-user.talk org.freedesktop.secrets
70# Add the next line to your nextcloud.local for tray icon support 70?ALLOW_TRAY: dbus-user.talk org.kde.StatusNotifierWatcher
71#dbus-user.talk org.kde.StatusNotifierWatcher
72dbus-system none 71dbus-system none
diff --git a/etc/profile-m-z/nheko.profile b/etc/profile-m-z/nheko.profile
index 035ad086a..89a146a09 100644
--- a/etc/profile-m-z/nheko.profile
+++ b/etc/profile-m-z/nheko.profile
@@ -51,11 +51,9 @@ private-dev
51private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,locale,locale.alias,locale.conf,mime.types,nsswitch.conf,pki,pulse,resolv.conf,selinux,ssl,X11,xdg 51private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,locale,locale.alias,locale.conf,mime.types,nsswitch.conf,pki,pulse,resolv.conf,selinux,ssl,X11,xdg
52private-tmp 52private-tmp
53 53
54 54dbus-user filter
55# Add the next lines to your nheko.local to enable notification support. 55dbus-user.talk org.freedesktop.secrets
56#ignore dbus-user none 56?ALLOW_TRAY: dbus-user.talk org.kde.StatusNotifierWatcher
57#dbus-user filter 57# Add the next line to your nheko.local to enable notification support.
58#dbus-user.talk org.freedesktop.Notifications 58#dbus-user.talk org.freedesktop.Notifications
59#dbus-user.talk org.kde.StatusNotifierWatcher
60dbus-user none
61dbus-system none 59dbus-system none
diff --git a/etc/profile-m-z/nitroshare.profile b/etc/profile-m-z/nitroshare.profile
index d5dd4ca95..d6234cd04 100644
--- a/etc/profile-m-z/nitroshare.profile
+++ b/etc/profile-m-z/nitroshare.profile
@@ -42,7 +42,7 @@ disable-mnt
42private-bin awk,grep,nitroshare,nitroshare-cli,nitroshare-nmh,nitroshare-send,nitroshare-ui 42private-bin awk,grep,nitroshare,nitroshare-cli,nitroshare-nmh,nitroshare-send,nitroshare-ui
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc alternatives,ca-certificates,dconf,fonts,hostname,hosts,ld.so.cache,machine-id,nsswitch.conf,ssl 45private-etc alternatives,ca-certificates,dconf,fonts,hostname,hosts,ld.so.cache,ld.so.preload,machine-id,nsswitch.conf,ssl
46# private-lib libnitroshare.so.*,libqhttpengine.so.*,libqmdnsengine.so.*,nitroshare 46# private-lib libnitroshare.so.*,libqhttpengine.so.*,libqmdnsengine.so.*,nitroshare
47private-tmp 47private-tmp
48 48
diff --git a/etc/profile-m-z/nomacs.profile b/etc/profile-m-z/nomacs.profile
index b044fb879..7ffb09e56 100644
--- a/etc/profile-m-z/nomacs.profile
+++ b/etc/profile-m-z/nomacs.profile
@@ -41,5 +41,5 @@ tracelog
41#private-bin nomacs 41#private-bin nomacs
42private-cache 42private-cache
43private-dev 43private-dev
44private-etc alternatives,ca-certificates,crypto-policies,dconf,drirc,fonts,gtk-3.0,hosts,login.defs,machine-id,pki,resolv.conf,ssl 44private-etc alternatives,ca-certificates,crypto-policies,dconf,drirc,fonts,gtk-3.0,hosts,ld.so.cache,ld.so.preload,login.defs,machine-id,pki,resolv.conf,ssl
45private-tmp 45private-tmp
diff --git a/etc/profile-m-z/noprofile.profile b/etc/profile-m-z/noprofile.profile
new file mode 100644
index 000000000..560ee9db3
--- /dev/null
+++ b/etc/profile-m-z/noprofile.profile
@@ -0,0 +1,28 @@
1# This is the weakest possible firejail profile.
2# If a program still fail with this profile, it is incompatible with firejail.
3# (from https://gist.github.com/rusty-snake/bb234cb3e50e1e4e7429f29a7931cc72)
4#
5# Usage:
6# 1. download
7# 2. firejail --profile=noprofile.profile /path/to/program
8
9# Keep in mind that even with this profile some things are done
10# which can break the program.
11# - some env-vars are cleared
12# - /etc/firejail/firejail.config can contain options such as 'force-nonewprivs yes'
13# - a new private pid-namespace is created
14# - a minimal hardcoded blacklist is applied
15# - ...
16
17noblacklist /sys/fs
18noblacklist /sys/module
19
20allow-debuggers
21allusers
22keep-config-pulse
23keep-dev-shm
24keep-var-tmp
25writable-etc
26writable-run-user
27writable-var
28writable-var-log
diff --git a/etc/profile-m-z/notify-send.profile b/etc/profile-m-z/notify-send.profile
index 5caf3374d..9f23c099d 100644
--- a/etc/profile-m-z/notify-send.profile
+++ b/etc/profile-m-z/notify-send.profile
@@ -49,7 +49,7 @@ private
49private-bin notify-send 49private-bin notify-send
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc none 52private-etc alternatives,ld.so.cache,ld.so.preload
53private-tmp 53private-tmp
54 54
55dbus-user filter 55dbus-user filter
diff --git a/etc/profile-m-z/nuclear.profile b/etc/profile-m-z/nuclear.profile
index 886403b9e..9f4a6ec46 100644
--- a/etc/profile-m-z/nuclear.profile
+++ b/etc/profile-m-z/nuclear.profile
@@ -18,7 +18,7 @@ whitelist ${HOME}/.config/nuclear
18no3d 18no3d
19 19
20# private-bin nuclear 20# private-bin nuclear
21private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,mime.types,nsswitch.conf,pki,pulse,resolv.conf,selinux,ssl,X11,xdg 21private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,mime.types,nsswitch.conf,pki,pulse,resolv.conf,selinux,ssl,X11,xdg
22private-opt nuclear 22private-opt nuclear
23 23
24# Redirect 24# Redirect
diff --git a/etc/profile-m-z/nyx.profile b/etc/profile-m-z/nyx.profile
index 460a580b3..653591482 100644
--- a/etc/profile-m-z/nyx.profile
+++ b/etc/profile-m-z/nyx.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin nyx,python* 45private-bin nyx,python*
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,fonts,passwd,tor 48private-etc alternatives,fonts,ld.so.cache,ld.so.preload,passwd,tor
49private-opt none 49private-opt none
50private-srv none 50private-srv none
51private-tmp 51private-tmp
diff --git a/etc/profile-m-z/ocenaudio.profile b/etc/profile-m-z/ocenaudio.profile
index 8e87f1d5d..0bfb35333 100644
--- a/etc/profile-m-z/ocenaudio.profile
+++ b/etc/profile-m-z/ocenaudio.profile
@@ -45,7 +45,7 @@ tracelog
45private-bin ocenaudio 45private-bin ocenaudio
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,asound.conf,fonts,ld.so.cache,pulse 48private-etc alternatives,asound.conf,fonts,ld.so.cache,ld.so.preload,pulse
49private-tmp 49private-tmp
50 50
51# breaks preferences 51# breaks preferences
diff --git a/etc/profile-m-z/odt2txt.profile b/etc/profile-m-z/odt2txt.profile
index 22cec475b..de62f4114 100644
--- a/etc/profile-m-z/odt2txt.profile
+++ b/etc/profile-m-z/odt2txt.profile
@@ -38,7 +38,7 @@ x11 none
38private-bin odt2txt 38private-bin odt2txt
39private-cache 39private-cache
40private-dev 40private-dev
41private-etc alternatives 41private-etc alternatives,ld.so.cache,ld.so.preload
42private-tmp 42private-tmp
43 43
44dbus-user none 44dbus-user none
diff --git a/etc/profile-m-z/okular.profile b/etc/profile-m-z/okular.profile
index 84edc65ef..fb28ad89f 100644
--- a/etc/profile-m-z/okular.profile
+++ b/etc/profile-m-z/okular.profile
@@ -36,6 +36,7 @@ whitelist /usr/share/kconf_update/okular.upd
36whitelist /usr/share/kxmlgui5/okular 36whitelist /usr/share/kxmlgui5/okular
37whitelist /usr/share/okular 37whitelist /usr/share/okular
38whitelist /usr/share/poppler 38whitelist /usr/share/poppler
39include whitelist-run-common.inc
39include whitelist-runuser-common.inc 40include whitelist-runuser-common.inc
40include whitelist-usr-share-common.inc 41include whitelist-usr-share-common.inc
41include whitelist-var-common.inc 42include whitelist-var-common.inc
@@ -61,7 +62,7 @@ tracelog
61 62
62private-bin kbuildsycoca4,kdeinit4,lpr,okular,unar,unrar 63private-bin kbuildsycoca4,kdeinit4,lpr,okular,unar,unrar
63private-dev 64private-dev
64private-etc alternatives,cups,fonts,kde4rc,kde5rc,ld.so.cache,machine-id,passwd,xdg 65private-etc alternatives,cups,fonts,kde4rc,kde5rc,ld.so.cache,ld.so.preload,machine-id,passwd,xdg
65# private-tmp - on KDE we need access to the real /tmp for data exchange with email clients 66# private-tmp - on KDE we need access to the real /tmp for data exchange with email clients
66 67
67# dbus-user none 68# dbus-user none
diff --git a/etc/profile-m-z/onboard.profile b/etc/profile-m-z/onboard.profile
index b0ffba19c..e05e58cad 100644
--- a/etc/profile-m-z/onboard.profile
+++ b/etc/profile-m-z/onboard.profile
@@ -50,7 +50,7 @@ disable-mnt
50private-cache 50private-cache
51private-bin onboard,python*,tput 51private-bin onboard,python*,tput
52private-dev 52private-dev
53private-etc alternatives,dbus-1,dconf,fonts,gtk-2.0,gtk-3.0,locale,locale.alias,locale.conf,mime.types,selinux,X11,xdg 53private-etc alternatives,dbus-1,dconf,fonts,gtk-2.0,gtk-3.0,ld.so.cache,ld.so.preload,locale,locale.alias,locale.conf,mime.types,selinux,X11,xdg
54private-tmp 54private-tmp
55 55
56dbus-system none 56dbus-system none
diff --git a/etc/profile-m-z/open-invaders.profile b/etc/profile-m-z/open-invaders.profile
index 12c7ea3d0..c2c22f42d 100644
--- a/etc/profile-m-z/open-invaders.profile
+++ b/etc/profile-m-z/open-invaders.profile
@@ -25,7 +25,6 @@ caps.drop all
25net none 25net none
26nodvd 26nodvd
27nogroups 27nogroups
28noinput
29nonewprivs 28nonewprivs
30noroot 29noroot
31notv 30notv
diff --git a/etc/profile-m-z/openarena.profile b/etc/profile-m-z/openarena.profile
index 076a655a1..c3ac097a0 100644
--- a/etc/profile-m-z/openarena.profile
+++ b/etc/profile-m-z/openarena.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin bash,cut,glxinfo,grep,head,openarena,openarena_ded,quake3,zenity 43private-bin bash,cut,glxinfo,grep,head,openarena,openarena_ded,quake3,zenity
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc drirc,machine-id,openal,passwd,selinux,udev,xdg 46private-etc alternatives,drirc,ld.so.cache,ld.so.preload,machine-id,openal,passwd,selinux,udev,xdg
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-m-z/openclonk.profile b/etc/profile-m-z/openclonk.profile
index 253465991..68362cbc8 100644
--- a/etc/profile-m-z/openclonk.profile
+++ b/etc/profile-m-z/openclonk.profile
@@ -28,7 +28,6 @@ ipc-namespace
28netfilter 28netfilter
29nodvd 29nodvd
30nogroups 30nogroups
31noinput
32nonewprivs 31nonewprivs
33noroot 32noroot
34notv 33notv
diff --git a/etc/profile-m-z/pandoc.profile b/etc/profile-m-z/pandoc.profile
index 2595d8a8f..c016b5103 100644
--- a/etc/profile-m-z/pandoc.profile
+++ b/etc/profile-m-z/pandoc.profile
@@ -11,6 +11,8 @@ blacklist ${RUNUSER}
11 11
12noblacklist ${DOCUMENTS} 12noblacklist ${DOCUMENTS}
13 13
14include allow-bin-sh.inc
15
14include disable-common.inc 16include disable-common.inc
15include disable-devel.inc 17include disable-devel.inc
16include disable-exec.inc 18include disable-exec.inc
@@ -19,6 +21,7 @@ include disable-programs.inc
19include disable-shell.inc 21include disable-shell.inc
20include disable-xdg.inc 22include disable-xdg.inc
21 23
24include whitelist-runuser-common.inc
22# breaks pdf output 25# breaks pdf output
23#include whitelist-var-common.inc 26#include whitelist-var-common.inc
24 27
@@ -39,15 +42,15 @@ nou2f
39novideo 42novideo
40protocol unix 43protocol unix
41seccomp 44seccomp
45seccomp.block-secondary
42shell none 46shell none
43tracelog 47tracelog
44x11 none 48x11 none
45 49
46disable-mnt 50disable-mnt
47private-bin context,latex,mktexfmt,pandoc,pdflatex,pdfroff,prince,weasyprint,wkhtmltopdf
48private-cache 51private-cache
49private-dev 52private-dev
50private-etc alternatives,texlive,texmf 53private-etc alternatives,ld.so.cache,ld.so.preload,texlive,texmf
51private-tmp 54private-tmp
52 55
53dbus-user none 56dbus-user none
diff --git a/etc/profile-m-z/parole.profile b/etc/profile-m-z/parole.profile
index 33d75f0d2..3d380542f 100644
--- a/etc/profile-m-z/parole.profile
+++ b/etc/profile-m-z/parole.profile
@@ -27,4 +27,4 @@ shell none
27 27
28private-bin dbus-launch,parole 28private-bin dbus-launch,parole
29private-cache 29private-cache
30private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,group,machine-id,passwd,pki,pulse,ssl 30private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,group,ld.so.cache,ld.so.preload,machine-id,passwd,pki,pulse,ssl
diff --git a/etc/profile-m-z/pavucontrol.profile b/etc/profile-m-z/pavucontrol.profile
index 0bd14e88e..d64aab200 100644
--- a/etc/profile-m-z/pavucontrol.profile
+++ b/etc/profile-m-z/pavucontrol.profile
@@ -45,7 +45,7 @@ disable-mnt
45private-bin pavucontrol 45private-bin pavucontrol
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,asound.conf,avahi,fonts,machine-id,pulse 48private-etc alternatives,asound.conf,avahi,fonts,ld.so.cache,ld.so.preload,machine-id,pulse
49private-lib 49private-lib
50private-tmp 50private-tmp
51 51
diff --git a/etc/profile-m-z/pdfchain.profile b/etc/profile-m-z/pdfchain.profile
index bebd4ba44..41ec98a39 100644
--- a/etc/profile-m-z/pdfchain.profile
+++ b/etc/profile-m-z/pdfchain.profile
@@ -34,7 +34,7 @@ shell none
34 34
35private-bin pdfchain,pdftk,sh 35private-bin pdfchain,pdftk,sh
36private-dev 36private-dev
37private-etc alternatives,dconf,fonts,gtk-3.0,xdg 37private-etc alternatives,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,xdg
38private-tmp 38private-tmp
39 39
40dbus-user none 40dbus-user none
diff --git a/etc/profile-m-z/pdftotext.profile b/etc/profile-m-z/pdftotext.profile
index 0cb08aa74..9d2f2b95f 100644
--- a/etc/profile-m-z/pdftotext.profile
+++ b/etc/profile-m-z/pdftotext.profile
@@ -48,7 +48,7 @@ x11 none
48private-bin pdftotext 48private-bin pdftotext
49private-cache 49private-cache
50private-dev 50private-dev
51private-etc alternatives 51private-etc alternatives,ld.so.cache,ld.so.preload
52private-tmp 52private-tmp
53 53
54dbus-user none 54dbus-user none
diff --git a/etc/profile-m-z/peek.profile b/etc/profile-m-z/peek.profile
index a8f925313..f5c295b5d 100644
--- a/etc/profile-m-z/peek.profile
+++ b/etc/profile-m-z/peek.profile
@@ -48,7 +48,7 @@ tracelog
48disable-mnt 48disable-mnt
49private-bin bash,convert,ffmpeg,firejail,fish,peek,sh,which,zsh 49private-bin bash,convert,ffmpeg,firejail,fish,peek,sh,which,zsh
50private-dev 50private-dev
51private-etc dconf,firejail,fonts,gtk-3.0,login.defs,pango,passwd,X11 51private-etc alternatives,dconf,firejail,fonts,gtk-3.0,ld.so.cache,ld.so.preload,login.defs,pango,passwd,X11
52private-tmp 52private-tmp
53 53
54dbus-user filter 54dbus-user filter
diff --git a/etc/profile-m-z/photoflare.profile b/etc/profile-m-z/photoflare.profile
index c012504c4..80efedec7 100644
--- a/etc/profile-m-z/photoflare.profile
+++ b/etc/profile-m-z/photoflare.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin photoflare 43private-bin photoflare
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,fonts,locale,locale.alias,locale.conf,mime.types,X11 46private-etc alternatives,fonts,ld.so.cache,ld.so.preload,locale,locale.alias,locale.conf,mime.types,X11
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-m-z/pingus.profile b/etc/profile-m-z/pingus.profile
index 5b2d7a5a4..69c78740d 100644
--- a/etc/profile-m-z/pingus.profile
+++ b/etc/profile-m-z/pingus.profile
@@ -50,7 +50,7 @@ disable-mnt
50private-bin pingus,pingus.bin,sh 50private-bin pingus,pingus.bin,sh
51private-cache 51private-cache
52private-dev 52private-dev
53private-etc machine-id 53private-etc alternatives,ld.so.cache,ld.so.preload,machine-id
54private-tmp 54private-tmp
55 55
56dbus-user none 56dbus-user none
diff --git a/etc/profile-m-z/pip.profile b/etc/profile-m-z/pip.profile
new file mode 100644
index 000000000..a0926371f
--- /dev/null
+++ b/etc/profile-m-z/pip.profile
@@ -0,0 +1,18 @@
1# Firejail profile for pip
2# Description: package manager for Python packages
3# This file is overwritten after every install/update
4quiet
5# Persistent local customizations
6include meson.local
7# Persistent global definitions
8include globals.local
9
10ignore read-only ${HOME}/.local/lib
11
12# Allow python3 (blacklisted by disable-interpreters.inc)
13include allow-python3.inc
14
15#whitelist ${HOME}/.local/lib/python*
16
17# Redirect
18include build-systems-common.profile
diff --git a/etc/profile-m-z/pkglog.profile b/etc/profile-m-z/pkglog.profile
index c2707dac4..69b954f53 100644
--- a/etc/profile-m-z/pkglog.profile
+++ b/etc/profile-m-z/pkglog.profile
@@ -44,7 +44,7 @@ private
44private-bin pkglog,python* 44private-bin pkglog,python*
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc alternatives 47private-etc alternatives,ld.so.cache,ld.so.preload
48private-opt none 48private-opt none
49private-tmp 49private-tmp
50writable-var-log 50writable-var-log
diff --git a/etc/profile-m-z/plv.profile b/etc/profile-m-z/plv.profile
index 80f768170..38ccf72e8 100644
--- a/etc/profile-m-z/plv.profile
+++ b/etc/profile-m-z/plv.profile
@@ -46,7 +46,7 @@ disable-mnt
46private-bin plv 46private-bin plv
47private-cache 47private-cache
48private-dev 48private-dev
49private-etc alternatives,fonts 49private-etc alternatives,fonts,ld.so.cache,ld.so.preload
50private-opt none 50private-opt none
51private-tmp 51private-tmp
52writable-var-log 52writable-var-log
diff --git a/etc/profile-m-z/pngquant.profile b/etc/profile-m-z/pngquant.profile
index 0b3d2b44c..6b989202f 100644
--- a/etc/profile-m-z/pngquant.profile
+++ b/etc/profile-m-z/pngquant.profile
@@ -47,7 +47,7 @@ x11 none
47private-bin pngquant 47private-bin pngquant
48private-cache 48private-cache
49private-dev 49private-dev
50private-etc alternatives 50private-etc alternatives,ld.so.cache,ld.so.preload
51private-tmp 51private-tmp
52 52
53dbus-user none 53dbus-user none
diff --git a/etc/profile-m-z/pragha.profile b/etc/profile-m-z/pragha.profile
index bc0ff0e85..fd595c27a 100644
--- a/etc/profile-m-z/pragha.profile
+++ b/etc/profile-m-z/pragha.profile
@@ -33,6 +33,6 @@ seccomp
33shell none 33shell none
34 34
35private-dev 35private-dev
36private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-3.0,host.conf,hostname,hosts,machine-id,pki,pulse,resolv.conf,ssl,xdg 36private-etc alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,machine-id,pki,pulse,resolv.conf,ssl,xdg
37private-tmp 37private-tmp
38 38
diff --git a/etc/profile-m-z/profanity.profile b/etc/profile-m-z/profanity.profile
index 705af370b..25a248425 100644
--- a/etc/profile-m-z/profanity.profile
+++ b/etc/profile-m-z/profanity.profile
@@ -44,7 +44,7 @@ shell none
44private-bin profanity 44private-bin profanity
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc alternatives,ca-certificates,crypto-policies,localtime,mime.types,nsswitch.conf,pki,resolv.conf,ssl 47private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,localtime,mime.types,nsswitch.conf,pki,resolv.conf,ssl
48private-tmp 48private-tmp
49 49
50dbus-user none 50dbus-user none
diff --git a/etc/profile-m-z/psi.profile b/etc/profile-m-z/psi.profile
index 450bb10c7..99a72adee 100644
--- a/etc/profile-m-z/psi.profile
+++ b/etc/profile-m-z/psi.profile
@@ -71,7 +71,7 @@ disable-mnt
71private-bin getopt,psi 71private-bin getopt,psi
72private-cache 72private-cache
73private-dev 73private-dev
74private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,drirc,fonts,gcrypt,group,hostname,hosts,ld.so.cache,ld.so.conf,machine-id,passwd,pki,pulse,resolv.conf,selinux,ssl,xdg 74private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,drirc,fonts,gcrypt,group,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.preload,machine-id,passwd,pki,pulse,resolv.conf,selinux,ssl,xdg
75private-tmp 75private-tmp
76 76
77dbus-user none 77dbus-user none
diff --git a/etc/profile-m-z/qgis.profile b/etc/profile-m-z/qgis.profile
index 3dc232b55..555e1e41b 100644
--- a/etc/profile-m-z/qgis.profile
+++ b/etc/profile-m-z/qgis.profile
@@ -52,7 +52,7 @@ tracelog
52disable-mnt 52disable-mnt
53private-cache 53private-cache
54private-dev 54private-dev
55private-etc alternatives,ca-certificates,crypto-policies,fonts,machine-id,pki,QGIS,QGIS.conf,resolv.conf,ssl,Trolltech.conf 55private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,machine-id,pki,QGIS,QGIS.conf,resolv.conf,ssl,Trolltech.conf
56private-tmp 56private-tmp
57 57
58dbus-user none 58dbus-user none
diff --git a/etc/profile-m-z/qnapi.profile b/etc/profile-m-z/qnapi.profile
index 4eee0df5f..4a3ce366e 100644
--- a/etc/profile-m-z/qnapi.profile
+++ b/etc/profile-m-z/qnapi.profile
@@ -47,7 +47,7 @@ tracelog
47private-bin 7z,qnapi 47private-bin 7z,qnapi
48private-cache 48private-cache
49private-dev 49private-dev
50private-etc alternatives,fonts 50private-etc alternatives,fonts,ld.so.cache,ld.so.preload
51private-opt none 51private-opt none
52private-tmp 52private-tmp
53 53
diff --git a/etc/profile-m-z/qrencode.profile b/etc/profile-m-z/qrencode.profile
index 7ef676068..dd3f24875 100644
--- a/etc/profile-m-z/qrencode.profile
+++ b/etc/profile-m-z/qrencode.profile
@@ -47,7 +47,7 @@ disable-mnt
47private-bin qrencode 47private-bin qrencode
48private-cache 48private-cache
49private-dev 49private-dev
50private-etc none 50private-etc alternatives,ld.so.cache,ld.so.preload
51private-lib libpcre* 51private-lib libpcre*
52private-tmp 52private-tmp
53 53
diff --git a/etc/profile-m-z/qtox.profile b/etc/profile-m-z/qtox.profile
index bae802cc6..60e1539fa 100644
--- a/etc/profile-m-z/qtox.profile
+++ b/etc/profile-m-z/qtox.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin qtox 43private-bin qtox
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,localtime,machine-id,pki,pulse,resolv.conf,ssl 46private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,localtime,machine-id,pki,pulse,resolv.conf,ssl
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-m-z/regextester.profile b/etc/profile-m-z/regextester.profile
index 1de59bc7c..f1ce313e7 100644
--- a/etc/profile-m-z/regextester.profile
+++ b/etc/profile-m-z/regextester.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin regextester 43private-bin regextester
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,fonts 46private-etc alternatives,fonts,ld.so.cache,ld.so.preload
47private-lib libgranite.so.* 47private-lib libgranite.so.*
48private-tmp 48private-tmp
49 49
diff --git a/etc/profile-m-z/retroarch.profile b/etc/profile-m-z/retroarch.profile
new file mode 100644
index 000000000..1887a9b72
--- /dev/null
+++ b/etc/profile-m-z/retroarch.profile
@@ -0,0 +1,54 @@
1# Firejail profile for retroarch
2# Description: retroarch is a frontend to libretro emulator cores.
3# This file is overwritten after every install/update
4# Persistent local customizations
5include retroarch.local
6# Persistent global definitions
7include globals.local
8
9blacklist /usr/libexec
10
11include disable-common.inc
12include disable-devel.inc
13include disable-exec.inc
14include disable-interpreters.inc
15include disable-programs.inc
16include disable-shell.inc
17include disable-xdg.inc
18
19mkdir ${HOME}/.config/retroarch
20whitelist ${HOME}/.config/retroarch
21whitelist /run/udev
22whitelist /usr/share/retroarch
23whitelist /usr/share/libretro
24include whitelist-common.inc
25include whitelist-run-common.inc
26include whitelist-runuser-common.inc
27include whitelist-usr-share-common.inc
28include whitelist-var-common.inc
29
30apparmor
31caps.drop all
32netfilter
33nodvd
34nogroups
35nonewprivs
36noroot
37notv
38nou2f
39# If you need access to cameras, add `ignore novideo` to retroarch.local
40novideo
41protocol unix,inet,inet6,netlink
42seccomp
43seccomp.block-secondary
44shell none
45tracelog
46
47disable-mnt
48private-bin retroarch
49private-cache
50private-dev
51private-tmp
52
53dbus-user none
54dbus-system none
diff --git a/etc/profile-m-z/rsync-download_only.profile b/etc/profile-m-z/rsync-download_only.profile
index 23a65f54a..e44e55a12 100644
--- a/etc/profile-m-z/rsync-download_only.profile
+++ b/etc/profile-m-z/rsync-download_only.profile
@@ -49,7 +49,7 @@ disable-mnt
49private-bin rsync 49private-bin rsync
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc alternatives,ca-certificates,crypto-policies,host.conf,hostname,hosts,nsswitch.conf,pki,protocols,resolv.conf,rpc,services,ssl 52private-etc alternatives,ca-certificates,crypto-policies,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,nsswitch.conf,pki,protocols,resolv.conf,rpc,services,ssl
53private-tmp 53private-tmp
54 54
55dbus-user none 55dbus-user none
diff --git a/etc/profile-m-z/scorchwentbonkers.profile b/etc/profile-m-z/scorchwentbonkers.profile
index 1069c34ea..70b5d844a 100644
--- a/etc/profile-m-z/scorchwentbonkers.profile
+++ b/etc/profile-m-z/scorchwentbonkers.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin scorchwentbonkers 43private-bin scorchwentbonkers
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alsa,asound.conf,machine-id,pulse 46private-etc alsa,alternatives,asound.conf,ld.so.cache,ld.so.preload,machine-id,pulse
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-m-z/seahorse-adventures.profile b/etc/profile-m-z/seahorse-adventures.profile
index af7d5eeac..72d6d5cf7 100644
--- a/etc/profile-m-z/seahorse-adventures.profile
+++ b/etc/profile-m-z/seahorse-adventures.profile
@@ -48,7 +48,7 @@ private
48private-bin bash,dash,python*,seahorse-adventures,sh 48private-bin bash,dash,python*,seahorse-adventures,sh
49private-cache 49private-cache
50private-dev 50private-dev
51private-etc machine-id 51private-etc alternatives,ld.so.cache,ld.so.preload,machine-id
52private-tmp 52private-tmp
53 53
54dbus-user none 54dbus-user none
diff --git a/etc/profile-m-z/seahorse-tool.profile b/etc/profile-m-z/seahorse-tool.profile
index 96ff74edf..9ef174606 100644
--- a/etc/profile-m-z/seahorse-tool.profile
+++ b/etc/profile-m-z/seahorse-tool.profile
@@ -8,7 +8,7 @@ include seahorse-tool.local
8#include globals.local 8#include globals.local
9 9
10# private-etc workaround for: #2877 10# private-etc workaround for: #2877
11private-etc firejail,login.defs,passwd 11private-etc alternatives,firejail,ld.so.cache,ld.so.preload,login.defs,passwd
12private-tmp 12private-tmp
13 13
14# Redirect 14# Redirect
diff --git a/etc/profile-m-z/seahorse.profile b/etc/profile-m-z/seahorse.profile
index 94a27da87..7382e4712 100644
--- a/etc/profile-m-z/seahorse.profile
+++ b/etc/profile-m-z/seahorse.profile
@@ -60,7 +60,7 @@ tracelog
60disable-mnt 60disable-mnt
61private-cache 61private-cache
62private-dev 62private-dev
63private-etc ca-certificates,crypto-policies,dconf,fonts,gconf,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.preload,nsswitch.conf,pango,pki,protocols,resolv.conf,rpc,services,ssh,ssl,X11 63private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gconf,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,nsswitch.conf,pango,pki,protocols,resolv.conf,rpc,services,ssh,ssl,X11
64writable-run-user 64writable-run-user
65 65
66dbus-user filter 66dbus-user filter
diff --git a/etc/profile-m-z/shotwell.profile b/etc/profile-m-z/shotwell.profile
index b6a828636..3b569eeaf 100644
--- a/etc/profile-m-z/shotwell.profile
+++ b/etc/profile-m-z/shotwell.profile
@@ -49,7 +49,7 @@ tracelog
49private-bin shotwell 49private-bin shotwell
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc alternatives,fonts,machine-id 52private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
53private-opt none 53private-opt none
54private-tmp 54private-tmp
55 55
diff --git a/etc/profile-m-z/slack.profile b/etc/profile-m-z/slack.profile
index 51f6c8b00..a511ebb1c 100644
--- a/etc/profile-m-z/slack.profile
+++ b/etc/profile-m-z/slack.profile
@@ -26,7 +26,7 @@ mkdir ${HOME}/.config/Slack
26whitelist ${HOME}/.config/Slack 26whitelist ${HOME}/.config/Slack
27 27
28private-bin electron,electron[0-9],electron[0-9][0-9],locale,sh,slack 28private-bin electron,electron[0-9],electron[0-9][0-9],locale,sh,slack
29private-etc alternatives,asound.conf,ca-certificates,crypto-policies,debian_version,fedora-release,fonts,group,ld.so.cache,ld.so.conf,localtime,machine-id,os-release,passwd,pki,pulse,redhat-release,resolv.conf,ssl,system-release,system-release-cpe 29private-etc alternatives,asound.conf,ca-certificates,crypto-policies,debian_version,fedora-release,fonts,group,ld.so.cache,ld.so.conf,ld.so.preload,localtime,machine-id,os-release,passwd,pki,pulse,redhat-release,resolv.conf,ssl,system-release,system-release-cpe
30 30
31# Redirect 31# Redirect
32include electron.profile 32include electron.profile
diff --git a/etc/profile-m-z/smuxi-frontend-gnome.profile b/etc/profile-m-z/smuxi-frontend-gnome.profile
index 31d14924c..0cdb5537e 100644
--- a/etc/profile-m-z/smuxi-frontend-gnome.profile
+++ b/etc/profile-m-z/smuxi-frontend-gnome.profile
@@ -48,7 +48,7 @@ disable-mnt
48private-bin bash,mono,mono-sgen,sh,smuxi-frontend-gnome 48private-bin bash,mono,mono-sgen,sh,smuxi-frontend-gnome
49private-cache 49private-cache
50private-dev 50private-dev
51private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,hostname,hosts,ld.so.cache,ld.so.conf,machine-id,mono,passwd,pki,pulse,resolv.conf,selinux,ssl,xdg 51private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.preload,machine-id,mono,passwd,pki,pulse,resolv.conf,selinux,ssl,xdg
52private-tmp 52private-tmp
53 53
54dbus-user none 54dbus-user none
diff --git a/etc/profile-m-z/softmaker-common.profile b/etc/profile-m-z/softmaker-common.profile
index ebdd5c1f8..099e6a2ad 100644
--- a/etc/profile-m-z/softmaker-common.profile
+++ b/etc/profile-m-z/softmaker-common.profile
@@ -6,9 +6,9 @@ include softmaker-common.local
6# added by caller profile 6# added by caller profile
7#include globals.local 7#include globals.local
8 8
9# The offical packages install the desktop file under /usr/local/share/applications 9# The official packages install the desktop file under /usr/local/share/applications
10# with an absolute Exec line. These files are NOT handelt by firecfg, 10# with an absolute Exec line. These files are NOT handled by firecfg,
11# therefore you must manualy copy them in you home and remove '/usr/bin/'. 11# therefore you must manually copy them in you home and remove '/usr/bin/'.
12 12
13noblacklist ${HOME}/SoftMaker 13noblacklist ${HOME}/SoftMaker
14 14
@@ -43,7 +43,7 @@ tracelog
43private-bin freeoffice-planmaker,freeoffice-presentations,freeoffice-textmaker,planmaker18,planmaker18free,presentations18,presentations18free,sh,textmaker18,textmaker18free 43private-bin freeoffice-planmaker,freeoffice-presentations,freeoffice-textmaker,planmaker18,planmaker18free,presentations18,presentations18free,sh,textmaker18,textmaker18free
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,machine-id,nsswitch.conf,pki,SoftMaker,ssl 46private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,machine-id,nsswitch.conf,pki,SoftMaker,ssl
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-m-z/spectacle.profile b/etc/profile-m-z/spectacle.profile
index d803fa5ce..fc4ae2b04 100644
--- a/etc/profile-m-z/spectacle.profile
+++ b/etc/profile-m-z/spectacle.profile
@@ -22,7 +22,7 @@ include disable-interpreters.inc
22include disable-programs.inc 22include disable-programs.inc
23include disable-xdg.inc 23include disable-xdg.inc
24 24
25mkfile ${HOME}/.config/spectaclerc 25mkfile ${HOME}/.config/spectaclerc
26whitelist ${HOME}/.config/spectaclerc 26whitelist ${HOME}/.config/spectaclerc
27whitelist ${PICTURES} 27whitelist ${PICTURES}
28whitelist /usr/share/kconf_update/spectacle_newConfig.upd 28whitelist /usr/share/kconf_update/spectacle_newConfig.upd
@@ -56,7 +56,7 @@ disable-mnt
56private-bin spectacle 56private-bin spectacle
57private-cache 57private-cache
58private-dev 58private-dev
59private-etc alternatives,fonts,ld.so.cache,ld.so.conf,ld.so.conf.d 59private-etc alternatives,fonts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload
60private-tmp 60private-tmp
61 61
62dbus-user filter 62dbus-user filter
diff --git a/etc/profile-m-z/spectral.profile b/etc/profile-m-z/spectral.profile
index 5f17b73dc..3f7f68009 100644
--- a/etc/profile-m-z/spectral.profile
+++ b/etc/profile-m-z/spectral.profile
@@ -49,10 +49,8 @@ private-dev
49private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,locale,locale.alias,locale.conf,mime.types,nsswitch.conf,pki,pulse,resolv.conf,selinux,ssl,X11,xdg 49private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.conf,ld.so.conf.d,ld.so.preload,locale,locale.alias,locale.conf,mime.types,nsswitch.conf,pki,pulse,resolv.conf,selinux,ssl,X11,xdg
50private-tmp 50private-tmp
51 51
52dbus-user none 52dbus-user filter
53# Add the next lines to your spectral.local to enable notification support. 53?ALLOW_TRAY: dbus-user.talk org.kde.StatusNotifierWatcher
54#ignore dbus-user none 54# Add the next line to your spectral.local to enable notification support.
55#dbus-user filter
56#dbus-user.talk org.freedesktop.Notifications 55#dbus-user.talk org.freedesktop.Notifications
57#dbus-user.talk org.kde.StatusNotifierWatcher
58dbus-system none 56dbus-system none
diff --git a/etc/profile-m-z/spotify.profile b/etc/profile-m-z/spotify.profile
index ffee76d23..0ce918161 100644
--- a/etc/profile-m-z/spotify.profile
+++ b/etc/profile-m-z/spotify.profile
@@ -44,7 +44,7 @@ disable-mnt
44private-bin bash,cat,dirname,find,grep,head,rm,sh,spotify,tclsh,touch,zenity 44private-bin bash,cat,dirname,find,grep,head,rm,sh,spotify,tclsh,touch,zenity
45private-dev 45private-dev
46# If you want to see album covers or want to use the radio, add 'ignore private-etc' to your spotify.local. 46# If you want to see album covers or want to use the radio, add 'ignore private-etc' to your spotify.local.
47private-etc alternatives,ca-certificates,crypto-policies,fonts,group,host.conf,hosts,ld.so.cache,machine-id,nsswitch.conf,pki,pulse,resolv.conf,ssl 47private-etc alternatives,ca-certificates,crypto-policies,fonts,group,host.conf,hosts,ld.so.cache,ld.so.preload,machine-id,nsswitch.conf,pki,pulse,resolv.conf,ssl
48private-opt spotify 48private-opt spotify
49private-srv none 49private-srv none
50private-tmp 50private-tmp
diff --git a/etc/profile-m-z/sqlitebrowser.profile b/etc/profile-m-z/sqlitebrowser.profile
index e35f74404..deaf37f52 100644
--- a/etc/profile-m-z/sqlitebrowser.profile
+++ b/etc/profile-m-z/sqlitebrowser.profile
@@ -42,7 +42,7 @@ shell none
42private-bin sqlitebrowser 42private-bin sqlitebrowser
43private-cache 43private-cache
44private-dev 44private-dev
45private-etc alternatives,ca-certificates,crypto-policies,fonts,group,machine-id,passwd,pki,ssl 45private-etc alternatives,ca-certificates,crypto-policies,fonts,group,ld.so.cache,ld.so.preload,machine-id,passwd,pki,ssl
46private-tmp 46private-tmp
47 47
48# breaks proxy creation 48# breaks proxy creation
diff --git a/etc/profile-m-z/ssh-agent.profile b/etc/profile-m-z/ssh-agent.profile
index 11723664f..9d3fe9637 100644
--- a/etc/profile-m-z/ssh-agent.profile
+++ b/etc/profile-m-z/ssh-agent.profile
@@ -11,6 +11,7 @@ include allow-ssh.inc
11 11
12blacklist /tmp/.X11-unix 12blacklist /tmp/.X11-unix
13blacklist ${RUNUSER}/wayland-* 13blacklist ${RUNUSER}/wayland-*
14noblacklist /usr/lib/openssh/ssh-keysign
14 15
15include disable-common.inc 16include disable-common.inc
16include disable-programs.inc 17include disable-programs.inc
diff --git a/etc/profile-m-z/ssh.profile b/etc/profile-m-z/ssh.profile
index 9295013e7..194b2082c 100644
--- a/etc/profile-m-z/ssh.profile
+++ b/etc/profile-m-z/ssh.profile
@@ -10,6 +10,7 @@ include globals.local
10# nc can be used as ProxyCommand, e.g. when using tor 10# nc can be used as ProxyCommand, e.g. when using tor
11noblacklist ${PATH}/nc 11noblacklist ${PATH}/nc
12noblacklist ${PATH}/ncat 12noblacklist ${PATH}/ncat
13noblacklist /usr/lib/openssh/ssh-keysign
13 14
14# Allow ssh (blacklisted by disable-common.inc) 15# Allow ssh (blacklisted by disable-common.inc)
15include allow-ssh.inc 16include allow-ssh.inc
diff --git a/etc/profile-m-z/standardnotes-desktop.profile b/etc/profile-m-z/standardnotes-desktop.profile
index d54ddacdd..7a59274bf 100644
--- a/etc/profile-m-z/standardnotes-desktop.profile
+++ b/etc/profile-m-z/standardnotes-desktop.profile
@@ -38,7 +38,7 @@ seccomp !chroot
38disable-mnt 38disable-mnt
39private-dev 39private-dev
40private-tmp 40private-tmp
41private-etc alternatives,ca-certificates,crypto-policies,fonts,host.conf,hostname,hosts,ld.so.cache,pki,resolv.conf,ssl,xdg 41private-etc alternatives,ca-certificates,crypto-policies,fonts,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl,xdg
42 42
43dbus-user none 43dbus-user none
44dbus-system none 44dbus-system none
diff --git a/etc/profile-m-z/straw-viewer.profile b/etc/profile-m-z/straw-viewer.profile
index d73927f2a..513abc21b 100644
--- a/etc/profile-m-z/straw-viewer.profile
+++ b/etc/profile-m-z/straw-viewer.profile
@@ -18,4 +18,4 @@ whitelist ${HOME}/.config/straw-viewer
18private-bin gtk-straw-viewer,straw-viewer 18private-bin gtk-straw-viewer,straw-viewer
19 19
20# Redirect 20# Redirect
21include youtube-viewers-common.profile \ No newline at end of file 21include youtube-viewers-common.profile
diff --git a/etc/profile-m-z/strawberry.profile b/etc/profile-m-z/strawberry.profile
index dfb0a3e3b..32e43f079 100644
--- a/etc/profile-m-z/strawberry.profile
+++ b/etc/profile-m-z/strawberry.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin strawberry,strawberry-tagreader 43private-bin strawberry,strawberry-tagreader
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc ca-certificates,crypto-policies,fonts,host.conf,hostname,hosts,nsswitch.conf,pki,resolv.conf,ssl 46private-etc alternatives,ca-certificates,crypto-policies,fonts,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,nsswitch.conf,pki,resolv.conf,ssl
47private-tmp 47private-tmp
48 48
49dbus-system none 49dbus-system none
diff --git a/etc/profile-m-z/subdownloader.profile b/etc/profile-m-z/subdownloader.profile
index 100ac9d14..a9f22085b 100644
--- a/etc/profile-m-z/subdownloader.profile
+++ b/etc/profile-m-z/subdownloader.profile
@@ -44,7 +44,7 @@ tracelog
44 44
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc alternatives,fonts 47private-etc alternatives,fonts,ld.so.cache,ld.so.preload
48private-tmp 48private-tmp
49 49
50dbus-user none 50dbus-user none
diff --git a/etc/profile-m-z/supertux2.profile b/etc/profile-m-z/supertux2.profile
index 0e9113821..464fa1b08 100644
--- a/etc/profile-m-z/supertux2.profile
+++ b/etc/profile-m-z/supertux2.profile
@@ -30,7 +30,6 @@ caps.drop all
30net none 30net none
31nodvd 31nodvd
32nogroups 32nogroups
33noinput
34nonewprivs 33nonewprivs
35noroot 34noroot
36notv 35notv
@@ -45,7 +44,7 @@ tracelog
45disable-mnt 44disable-mnt
46# private-bin supertux2 45# private-bin supertux2
47private-cache 46private-cache
48private-etc machine-id 47private-etc alternatives,ld.so.cache,ld.so.preload,machine-id
49private-dev 48private-dev
50private-tmp 49private-tmp
51 50
diff --git a/etc/profile-m-z/supertuxkart.profile b/etc/profile-m-z/supertuxkart.profile
index 7ba7e7023..473472251 100644
--- a/etc/profile-m-z/supertuxkart.profile
+++ b/etc/profile-m-z/supertuxkart.profile
@@ -54,7 +54,7 @@ private-bin supertuxkart
54private-cache 54private-cache
55# Add the next line to your supertuxkart.local if you do not need controller support. 55# Add the next line to your supertuxkart.local if you do not need controller support.
56#private-dev 56#private-dev
57private-etc alternatives,ca-certificates,crypto-policies,drirc,hosts,machine-id,openal,pki,resolv.conf,ssl 57private-etc alternatives,ca-certificates,crypto-policies,drirc,hosts,ld.so.cache,ld.so.preload,machine-id,openal,pki,resolv.conf,ssl
58private-tmp 58private-tmp
59private-opt none 59private-opt none
60private-srv none 60private-srv none
diff --git a/etc/profile-m-z/surf.profile b/etc/profile-m-z/surf.profile
index 7c092fccc..c04f00cab 100644
--- a/etc/profile-m-z/surf.profile
+++ b/etc/profile-m-z/surf.profile
@@ -34,6 +34,6 @@ tracelog
34disable-mnt 34disable-mnt
35private-bin bash,curl,dmenu,ls,printf,sed,sh,sleep,st,stterm,surf,xargs,xprop 35private-bin bash,curl,dmenu,ls,printf,sed,sh,sleep,st,stterm,surf,xargs,xprop
36private-dev 36private-dev
37private-etc alternatives,ca-certificates,crypto-policies,fonts,group,hosts,machine-id,passwd,pki,resolv.conf,ssl 37private-etc alternatives,ca-certificates,crypto-policies,fonts,group,hosts,ld.so.cache,ld.so.preload,machine-id,passwd,pki,resolv.conf,ssl
38private-tmp 38private-tmp
39 39
diff --git a/etc/profile-m-z/sway.profile b/etc/profile-m-z/sway.profile
index 4637419bf..046d1b4be 100644
--- a/etc/profile-m-z/sway.profile
+++ b/etc/profile-m-z/sway.profile
@@ -1,5 +1,5 @@
1# Firejail profile for Sway 1# Firejail profile for Sway
2# Description: i3-compatible Wayland compositor 2# Description: i3-compatible Wayland compositor
3# This file is overwritten after every install/update 3# This file is overwritten after every install/update
4# Persistent local customizations 4# Persistent local customizations
5include sway.local 5include sway.local
diff --git a/etc/profile-m-z/sysprof.profile b/etc/profile-m-z/sysprof.profile
index ac4a380bb..c7119ae0f 100644
--- a/etc/profile-m-z/sysprof.profile
+++ b/etc/profile-m-z/sysprof.profile
@@ -63,7 +63,7 @@ disable-mnt
63#private-bin sysprof - breaks help menu 63#private-bin sysprof - breaks help menu
64private-cache 64private-cache
65private-dev 65private-dev
66private-etc alternatives,fonts,ld.so.cache,machine-id,ssl 66private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id,ssl
67# private-lib - breaks help menu 67# private-lib - breaks help menu
68#private-lib gdk-pixbuf-2.*,gio,gtk3,gvfs/libgvfscommon.so,libgconf-2.so.*,librsvg-2.so.*,libsysprof-2.so,libsysprof-ui-2.so 68#private-lib gdk-pixbuf-2.*,gio,gtk3,gvfs/libgvfscommon.so,libgconf-2.so.*,librsvg-2.so.*,libsysprof-2.so,libsysprof-ui-2.so
69private-tmp 69private-tmp
diff --git a/etc/profile-m-z/tar.profile b/etc/profile-m-z/tar.profile
index 0d3a900e9..0817adda8 100644
--- a/etc/profile-m-z/tar.profile
+++ b/etc/profile-m-z/tar.profile
@@ -14,7 +14,7 @@ ignore include disable-shell.inc
14# all capabilities this is automatically read-only. 14# all capabilities this is automatically read-only.
15noblacklist /var/lib/pacman 15noblacklist /var/lib/pacman
16 16
17private-etc alternatives,group,localtime,login.defs,passwd 17private-etc alternatives,group,ld.so.cache,ld.so.preload,localtime,login.defs,passwd
18#private-lib libfakeroot,liblzma.so.*,libreadline.so.* 18#private-lib libfakeroot,liblzma.so.*,libreadline.so.*
19# Debian based distributions need this for 'dpkg --unpack' (incl. synaptic) 19# Debian based distributions need this for 'dpkg --unpack' (incl. synaptic)
20writable-var 20writable-var
diff --git a/etc/profile-m-z/teams-for-linux.profile b/etc/profile-m-z/teams-for-linux.profile
index c97921d92..ee19bcd00 100644
--- a/etc/profile-m-z/teams-for-linux.profile
+++ b/etc/profile-m-z/teams-for-linux.profile
@@ -20,7 +20,7 @@ mkdir ${HOME}/.config/teams-for-linux
20whitelist ${HOME}/.config/teams-for-linux 20whitelist ${HOME}/.config/teams-for-linux
21 21
22private-bin bash,cut,echo,egrep,electron,electron[0-9],electron[0-9][0-9],grep,head,sed,sh,teams-for-linux,tr,xdg-mime,xdg-open,zsh 22private-bin bash,cut,echo,egrep,electron,electron[0-9],electron[0-9][0-9],grep,head,sed,sh,teams-for-linux,tr,xdg-mime,xdg-open,zsh
23private-etc ca-certificates,crypto-policies,fonts,ld.so.cache,localtime,machine-id,pki,resolv.conf,ssl 23private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,localtime,machine-id,pki,resolv.conf,ssl
24 24
25# Redirect 25# Redirect
26include electron.profile 26include electron.profile
diff --git a/etc/profile-m-z/teeworlds.profile b/etc/profile-m-z/teeworlds.profile
index df54fb9ba..d0fb0d43e 100644
--- a/etc/profile-m-z/teeworlds.profile
+++ b/etc/profile-m-z/teeworlds.profile
@@ -26,7 +26,6 @@ ipc-namespace
26netfilter 26netfilter
27nodvd 27nodvd
28nogroups 28nogroups
29noinput
30nonewprivs 29nonewprivs
31noroot 30noroot
32notv 31notv
diff --git a/etc/profile-m-z/telegram.profile b/etc/profile-m-z/telegram.profile
index 115be54eb..dc1f77664 100644
--- a/etc/profile-m-z/telegram.profile
+++ b/etc/profile-m-z/telegram.profile
@@ -41,16 +41,16 @@ seccomp.block-secondary
41shell none 41shell none
42 42
43disable-mnt 43disable-mnt
44#private-bin telegram,Telegram,telegram-desktop 44private-bin telegram,Telegram,telegram-desktop
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc alsa,alternatives,ca-certificates,crypto-policies,fonts,group,ld.so.cache,localtime,machine-id,os-release,passwd,pki,pulse,resolv.conf,ssl,xdg 47private-etc alsa,alternatives,ca-certificates,crypto-policies,fonts,group,ld.so.cache,ld.so.preload,localtime,machine-id,os-release,passwd,pki,pulse,resolv.conf,ssl,xdg
48private-tmp 48private-tmp
49 49
50dbus-user filter 50dbus-user filter
51dbus-user.own org.telegram.desktop.* 51dbus-user.own org.telegram.desktop.*
52dbus-user.talk org.freedesktop.Notifications 52dbus-user.talk org.freedesktop.Notifications
53dbus-user.talk org.kde.StatusNotifierWatcher 53?ALLOW_TRAY: dbus-user.talk org.kde.StatusNotifierWatcher
54dbus-user.talk org.gnome.Mutter.IdleMonitor 54dbus-user.talk org.gnome.Mutter.IdleMonitor
55dbus-user.talk org.freedesktop.ScreenSaver 55dbus-user.talk org.freedesktop.ScreenSaver
56dbus-system none 56dbus-system none
diff --git a/etc/profile-m-z/tilp.profile b/etc/profile-m-z/tilp.profile
index 7c18aab50..d2db44b1c 100644
--- a/etc/profile-m-z/tilp.profile
+++ b/etc/profile-m-z/tilp.profile
@@ -30,6 +30,6 @@ tracelog
30disable-mnt 30disable-mnt
31private-bin tilp 31private-bin tilp
32private-cache 32private-cache
33private-etc alternatives,fonts 33private-etc alternatives,fonts,ld.so.cache,ld.so.preload
34private-tmp 34private-tmp
35 35
diff --git a/etc/profile-m-z/tin.profile b/etc/profile-m-z/tin.profile
index 039063c1e..1d4ee9370 100644
--- a/etc/profile-m-z/tin.profile
+++ b/etc/profile-m-z/tin.profile
@@ -58,7 +58,7 @@ disable-mnt
58private-bin rtin,tin 58private-bin rtin,tin
59private-cache 59private-cache
60private-dev 60private-dev
61private-etc passwd,resolv.conf,terminfo,tin 61private-etc alternatives,ld.so.cache,ld.so.preload,passwd,resolv.conf,terminfo,tin
62private-lib terminfo 62private-lib terminfo
63private-tmp 63private-tmp
64 64
diff --git a/etc/profile-m-z/tor.profile b/etc/profile-m-z/tor.profile
index 08e949309..d8cd8eb44 100644
--- a/etc/profile-m-z/tor.profile
+++ b/etc/profile-m-z/tor.profile
@@ -46,6 +46,6 @@ private
46private-bin bash,tor 46private-bin bash,tor
47private-cache 47private-cache
48private-dev 48private-dev
49private-etc alternatives,ca-certificates,crypto-policies,passwd,pki,ssl,tor 49private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,passwd,pki,ssl,tor
50private-tmp 50private-tmp
51writable-var 51writable-var
diff --git a/etc/profile-m-z/torbrowser.profile b/etc/profile-m-z/torbrowser.profile
new file mode 100644
index 000000000..fc579b973
--- /dev/null
+++ b/etc/profile-m-z/torbrowser.profile
@@ -0,0 +1,26 @@
1# Firejail profile for torbrowser
2# Description: This profile was tested with www-client/torbrowser::torbrowser
3# on Gentoo Linux.
4# This file is overwritten after every install/update
5# Persistent local customizations
6include torbrowser.local
7# Persistent global definitions
8include globals.local
9
10ignore dbus-user none
11
12noblacklist ${HOME}/.cache/mozilla
13noblacklist ${HOME}/.mozilla
14
15blacklist /usr/libexec
16
17mkdir ${HOME}/.cache/mozilla/torbrowser
18mkdir ${HOME}/.mozilla
19whitelist ${HOME}/.cache/mozilla/torbrowser
20whitelist ${HOME}/.mozilla
21include whitelist-usr-share-common.inc
22
23dbus-user filter
24dbus-user.own org.mozilla.torbrowser.*
25
26include firefox-common.profile
diff --git a/etc/profile-m-z/torcs.profile b/etc/profile-m-z/torcs.profile
index a7ebaf2af..19e586db4 100644
--- a/etc/profile-m-z/torcs.profile
+++ b/etc/profile-m-z/torcs.profile
@@ -28,7 +28,6 @@ ipc-namespace
28net none 28net none
29nodvd 29nodvd
30nogroups 30nogroups
31noinput
32nonewprivs 31nonewprivs
33noroot 32noroot
34notv 33notv
diff --git a/etc/profile-m-z/transgui.profile b/etc/profile-m-z/transgui.profile
index 2b63f6448..4acb8e7e8 100644
--- a/etc/profile-m-z/transgui.profile
+++ b/etc/profile-m-z/transgui.profile
@@ -45,7 +45,7 @@ tracelog
45private-bin geoiplookup,geoiplookup6,transgui 45private-bin geoiplookup,geoiplookup6,transgui
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alternatives,fonts 48private-etc alternatives,fonts,ld.so.cache,ld.so.preload
49private-lib libgdk_pixbuf-2.0.so.*,libGeoIP.so*,libgthread-2.0.so.*,libgtk-x11-2.0.so.*,libX11.so.* 49private-lib libgdk_pixbuf-2.0.so.*,libGeoIP.so*,libgthread-2.0.so.*,libgtk-x11-2.0.so.*,libX11.so.*
50private-tmp 50private-tmp
51 51
diff --git a/etc/profile-m-z/transmission-cli.profile b/etc/profile-m-z/transmission-cli.profile
index 486be5fe6..8a1711e97 100644
--- a/etc/profile-m-z/transmission-cli.profile
+++ b/etc/profile-m-z/transmission-cli.profile
@@ -8,7 +8,7 @@ include transmission-cli.local
8include globals.local 8include globals.local
9 9
10private-bin transmission-cli 10private-bin transmission-cli
11private-etc alternatives,ca-certificates,crypto-policies,nsswitch.conf,pki,resolv.conf,ssl 11private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,nsswitch.conf,pki,resolv.conf,ssl
12 12
13# Redirect 13# Redirect
14include transmission-common.profile 14include transmission-common.profile
diff --git a/etc/profile-m-z/transmission-daemon.profile b/etc/profile-m-z/transmission-daemon.profile
index 348d3cb80..5d28f2f10 100644
--- a/etc/profile-m-z/transmission-daemon.profile
+++ b/etc/profile-m-z/transmission-daemon.profile
@@ -17,7 +17,7 @@ caps.keep ipc_lock,net_bind_service,setgid,setuid,sys_chroot
17protocol packet 17protocol packet
18 18
19private-bin transmission-daemon 19private-bin transmission-daemon
20private-etc alternatives,ca-certificates,crypto-policies,nsswitch.conf,pki,resolv.conf,ssl 20private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,nsswitch.conf,pki,resolv.conf,ssl
21 21
22read-write /var/lib/transmission 22read-write /var/lib/transmission
23writable-var-log 23writable-var-log
diff --git a/etc/profile-m-z/transmission-remote-gtk.profile b/etc/profile-m-z/transmission-remote-gtk.profile
index a6400e2c0..6a0f1bde3 100644
--- a/etc/profile-m-z/transmission-remote-gtk.profile
+++ b/etc/profile-m-z/transmission-remote-gtk.profile
@@ -12,7 +12,7 @@ noblacklist ${HOME}/.config/transmission-remote-gtk
12mkdir ${HOME}/.config/transmission-remote-gtk 12mkdir ${HOME}/.config/transmission-remote-gtk
13whitelist ${HOME}/.config/transmission-remote-gtk 13whitelist ${HOME}/.config/transmission-remote-gtk
14 14
15private-etc fonts,hostname,hosts,resolv.conf 15private-etc alternatives,fonts,hostname,hosts,ld.so.cache,ld.so.preload,resolv.conf
16# Problems with private-lib (see issue #2889) 16# Problems with private-lib (see issue #2889)
17ignore private-lib 17ignore private-lib
18 18
diff --git a/etc/profile-m-z/transmission-remote.profile b/etc/profile-m-z/transmission-remote.profile
index fee4999e6..565433d99 100644
--- a/etc/profile-m-z/transmission-remote.profile
+++ b/etc/profile-m-z/transmission-remote.profile
@@ -8,7 +8,7 @@ include transmission-remote.local
8include globals.local 8include globals.local
9 9
10private-bin transmission-remote 10private-bin transmission-remote
11private-etc alternatives,hosts,nsswitch.conf 11private-etc alternatives,hosts,ld.so.cache,ld.so.preload,nsswitch.conf
12 12
13# Redirect 13# Redirect
14include transmission-common.profile 14include transmission-common.profile
diff --git a/etc/profile-m-z/transmission-show.profile b/etc/profile-m-z/transmission-show.profile
index 5a3c83f58..0a5826ec4 100644
--- a/etc/profile-m-z/transmission-show.profile
+++ b/etc/profile-m-z/transmission-show.profile
@@ -8,7 +8,7 @@ include transmission-show.local
8include globals.local 8include globals.local
9 9
10private-bin transmission-show 10private-bin transmission-show
11private-etc alternatives,hosts,nsswitch.conf 11private-etc alternatives,hosts,ld.so.cache,ld.so.preload,nsswitch.conf
12 12
13# Redirect 13# Redirect
14include transmission-common.profile 14include transmission-common.profile
diff --git a/etc/profile-m-z/tremulous.profile b/etc/profile-m-z/tremulous.profile
index 4e16df553..96541ae25 100644
--- a/etc/profile-m-z/tremulous.profile
+++ b/etc/profile-m-z/tremulous.profile
@@ -8,6 +8,9 @@ include globals.local
8 8
9noblacklist ${HOME}/.tremulous 9noblacklist ${HOME}/.tremulous
10 10
11# Allow /bin/sh (blacklisted by disable-shell.inc)
12include allow-bin-sh.inc
13
11include disable-common.inc 14include disable-common.inc
12include disable-devel.inc 15include disable-devel.inc
13include disable-exec.inc 16include disable-exec.inc
@@ -41,7 +44,7 @@ shell none
41tracelog 44tracelog
42 45
43disable-mnt 46disable-mnt
44private-bin tremded,tremulous,tremulous-wrapper 47private-bin env,sh,tremded,tremulous,tremulous-wrapper
45private-cache 48private-cache
46private-dev 49private-dev
47private-tmp 50private-tmp
diff --git a/etc/profile-m-z/trojita.profile b/etc/profile-m-z/trojita.profile
index 41426c606..60a192ac1 100644
--- a/etc/profile-m-z/trojita.profile
+++ b/etc/profile-m-z/trojita.profile
@@ -54,7 +54,7 @@ tracelog
54private-bin trojita 54private-bin trojita
55private-cache 55private-cache
56private-dev 56private-dev
57private-etc alternatives,ca-certificates,crypto-policies,fonts,hostname,hosts,pki,resolv.conf,selinux,ssl,xdg 57private-etc alternatives,ca-certificates,crypto-policies,fonts,hostname,hosts,ld.so.cache,ld.so.preload,pki,resolv.conf,selinux,ssl,xdg
58private-tmp 58private-tmp
59 59
60dbus-user filter 60dbus-user filter
diff --git a/etc/profile-m-z/twitch.profile b/etc/profile-m-z/twitch.profile
index d767b4c9d..987a2b719 100644
--- a/etc/profile-m-z/twitch.profile
+++ b/etc/profile-m-z/twitch.profile
@@ -18,7 +18,7 @@ mkdir ${HOME}/.config/Twitch
18whitelist ${HOME}/.config/Twitch 18whitelist ${HOME}/.config/Twitch
19 19
20private-bin electron,electron[0-9],electron[0-9][0-9],twitch 20private-bin electron,electron[0-9],electron[0-9][0-9],twitch
21private-etc alsa,alternatives,asound.conf,ati,bumblebee,ca-certificates,crypto-policies,drirc,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,mime.types,nsswitch.conf,nvidia,pki,pulse,resolv.conf,selinux,ssl,X11,xdg 21private-etc alsa,alternatives,asound.conf,ati,bumblebee,ca-certificates,crypto-policies,drirc,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,mime.types,nsswitch.conf,nvidia,pki,pulse,resolv.conf,selinux,ssl,X11,xdg
22private-opt Twitch 22private-opt Twitch
23 23
24# Redirect 24# Redirect
diff --git a/etc/profile-m-z/unf.profile b/etc/profile-m-z/unf.profile
index 212e6d181..1b82ad881 100644
--- a/etc/profile-m-z/unf.profile
+++ b/etc/profile-m-z/unf.profile
@@ -49,7 +49,7 @@ private-bin unf
49private-cache 49private-cache
50?HAS_APPIMAGE: ignore private-dev 50?HAS_APPIMAGE: ignore private-dev
51private-dev 51private-dev
52private-etc alternatives 52private-etc alternatives,ld.so.cache,ld.so.preload
53private-lib gcc/*/*/libgcc_s.so.* 53private-lib gcc/*/*/libgcc_s.so.*
54private-tmp 54private-tmp
55 55
diff --git a/etc/profile-m-z/unrar.profile b/etc/profile-m-z/unrar.profile
index 9d3d9b40e..443d1f415 100644
--- a/etc/profile-m-z/unrar.profile
+++ b/etc/profile-m-z/unrar.profile
@@ -8,7 +8,7 @@ include unrar.local
8include globals.local 8include globals.local
9 9
10private-bin unrar 10private-bin unrar
11private-etc alternatives,group,localtime,passwd 11private-etc alternatives,group,ld.so.cache,ld.so.preload,localtime,passwd
12private-tmp 12private-tmp
13 13
14# Redirect 14# Redirect
diff --git a/etc/profile-m-z/unzip.profile b/etc/profile-m-z/unzip.profile
index 0231e3dba..97df693ba 100644
--- a/etc/profile-m-z/unzip.profile
+++ b/etc/profile-m-z/unzip.profile
@@ -10,7 +10,7 @@ include globals.local
10# GNOME Shell integration (chrome-gnome-shell) 10# GNOME Shell integration (chrome-gnome-shell)
11noblacklist ${HOME}/.local/share/gnome-shell 11noblacklist ${HOME}/.local/share/gnome-shell
12 12
13private-etc alternatives,group,localtime,passwd 13private-etc alternatives,group,ld.so.cache,ld.so.preload,localtime,passwd
14 14
15# Redirect 15# Redirect
16include archiver-common.profile 16include archiver-common.profile
diff --git a/etc/profile-m-z/utox.profile b/etc/profile-m-z/utox.profile
index b164494fa..5a867a683 100644
--- a/etc/profile-m-z/utox.profile
+++ b/etc/profile-m-z/utox.profile
@@ -43,7 +43,7 @@ disable-mnt
43private-bin utox 43private-bin utox
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,localtime,machine-id,openal,pki,pulse,resolv.conf,ssl 46private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,localtime,machine-id,openal,pki,pulse,resolv.conf,ssl
47private-tmp 47private-tmp
48 48
49memory-deny-write-execute 49memory-deny-write-execute
diff --git a/etc/profile-m-z/uudeview.profile b/etc/profile-m-z/uudeview.profile
index 3b38f16e0..426766e17 100644
--- a/etc/profile-m-z/uudeview.profile
+++ b/etc/profile-m-z/uudeview.profile
@@ -41,7 +41,7 @@ x11 none
41private-bin uudeview 41private-bin uudeview
42private-cache 42private-cache
43private-dev 43private-dev
44private-etc alternatives,ld.so.preload 44private-etc alternatives,ld.so.cache,ld.so.preload
45 45
46dbus-user none 46dbus-user none
47dbus-system none 47dbus-system none
diff --git a/etc/profile-m-z/viewnior.profile b/etc/profile-m-z/viewnior.profile
index 469e65542..585a8eddb 100644
--- a/etc/profile-m-z/viewnior.profile
+++ b/etc/profile-m-z/viewnior.profile
@@ -43,7 +43,7 @@ tracelog
43private-bin viewnior 43private-bin viewnior
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,fonts,machine-id 46private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
47private-tmp 47private-tmp
48 48
49dbus-user none 49dbus-user none
diff --git a/etc/profile-m-z/virtualbox.profile b/etc/profile-m-z/virtualbox.profile
index 6ab9aa15b..227ad83cc 100644
--- a/etc/profile-m-z/virtualbox.profile
+++ b/etc/profile-m-z/virtualbox.profile
@@ -45,7 +45,7 @@ tracelog
45#disable-mnt 45#disable-mnt
46#private-bin awk,basename,bash,env,gawk,grep,ps,readlink,sh,virtualbox,VirtualBox,VBox*,vbox*,whoami 46#private-bin awk,basename,bash,env,gawk,grep,ps,readlink,sh,virtualbox,VirtualBox,VBox*,vbox*,whoami
47private-cache 47private-cache
48private-etc alsa,asound.conf,ca-certificates,conf.d,crypto-policies,dconf,fonts,hostname,hosts,ld.so.cache,localtime,machine-id,pki,pulse,resolv.conf,ssl 48private-etc alsa,alternatives,asound.conf,ca-certificates,conf.d,crypto-policies,dconf,fonts,hostname,hosts,ld.so.cache,ld.so.preload,localtime,machine-id,pki,pulse,resolv.conf,ssl
49private-tmp 49private-tmp
50 50
51dbus-user none 51dbus-user none
diff --git a/etc/profile-m-z/vmware.profile b/etc/profile-m-z/vmware.profile
index cb85836b7..1e3983f0e 100644
--- a/etc/profile-m-z/vmware.profile
+++ b/etc/profile-m-z/vmware.profile
@@ -38,6 +38,6 @@ tracelog
38#disable-mnt 38#disable-mnt
39# Add the next line to your vmware.local to enable private-bin. 39# Add the next line to your vmware.local to enable private-bin.
40#private-bin env,bash,sh,ovftool,vmafossexec,vmaf_*,vmnet-*,vmplayer,vmrest,vmrun,vmss2core,vmstat,vmware,vmware-* 40#private-bin env,bash,sh,ovftool,vmafossexec,vmaf_*,vmnet-*,vmplayer,vmrest,vmrun,vmss2core,vmstat,vmware,vmware-*
41private-etc alsa,asound.conf,ca-certificates,conf.d,crypto-policies,dconf,fonts,gtk-2.0,gtk-3.0,hostname,hosts,ld.so.cache,localtime,machine-id,passwd,pki,pulse,resolv.conf,ssl,vmware,vmware-installer,vmware-vix 41private-etc alsa,alternatives,asound.conf,ca-certificates,conf.d,crypto-policies,dconf,fonts,gtk-2.0,gtk-3.0,hostname,hosts,ld.so.cache,ld.so.preload,localtime,machine-id,passwd,pki,pulse,resolv.conf,ssl,vmware,vmware-installer,vmware-vix
42dbus-user none 42dbus-user none
43dbus-system none 43dbus-system none
diff --git a/etc/profile-m-z/vscodium.profile b/etc/profile-m-z/vscodium.profile
index a4a4fb7d8..9c0a887b2 100644
--- a/etc/profile-m-z/vscodium.profile
+++ b/etc/profile-m-z/vscodium.profile
@@ -1,4 +1,4 @@
1# Firejail profile alias for Visual Studio Code 1# Firejail profile alias for VSCodium
2# This file is overwritten after every install/update 2# This file is overwritten after every install/update
3# Persistent local customizations 3# Persistent local customizations
4include vscodium.local 4include vscodium.local
@@ -7,6 +7,8 @@ include vscodium.local
7#include globals.local 7#include globals.local
8 8
9noblacklist ${HOME}/.VSCodium 9noblacklist ${HOME}/.VSCodium
10noblacklist ${HOME}/.config/VSCodium
11noblacklist ${HOME}/.vscode-oss
10 12
11# Redirect 13# Redirect
12include code.profile 14include code.profile
diff --git a/etc/profile-m-z/w3m.profile b/etc/profile-m-z/w3m.profile
index 81c8a2f5c..c9e209142 100644
--- a/etc/profile-m-z/w3m.profile
+++ b/etc/profile-m-z/w3m.profile
@@ -62,7 +62,7 @@ disable-mnt
62private-bin perl,sh,w3m 62private-bin perl,sh,w3m
63private-cache 63private-cache
64private-dev 64private-dev
65private-etc alternatives,ca-certificates,crypto-policies,mailcap,nsswitch.conf,pki,resolv.conf,ssl 65private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,mailcap,nsswitch.conf,pki,resolv.conf,ssl
66private-tmp 66private-tmp
67 67
68dbus-user none 68dbus-user none
diff --git a/etc/profile-m-z/warmux.profile b/etc/profile-m-z/warmux.profile
index 92e0e7a83..0a6f19b1e 100644
--- a/etc/profile-m-z/warmux.profile
+++ b/etc/profile-m-z/warmux.profile
@@ -49,7 +49,7 @@ disable-mnt
49private-bin warmux 49private-bin warmux
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc ca-certificates,crypto-policies,host.conf,hostname,hosts,machine-id,nsswitch.conf,pki,protocols,resolv.conf,rpc,services,ssl 52private-etc alternatives,ca-certificates,crypto-policies,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,machine-id,nsswitch.conf,pki,protocols,resolv.conf,rpc,services,ssl
53private-tmp 53private-tmp
54 54
55dbus-user none 55dbus-user none
diff --git a/etc/profile-m-z/warsow.profile b/etc/profile-m-z/warsow.profile
index 5659ec69c..2f818b733 100644
--- a/etc/profile-m-z/warsow.profile
+++ b/etc/profile-m-z/warsow.profile
@@ -11,6 +11,9 @@ ignore noexec ${HOME}
11noblacklist ${HOME}/.cache/warsow-2.1 11noblacklist ${HOME}/.cache/warsow-2.1
12noblacklist ${HOME}/.local/share/warsow-2.1 12noblacklist ${HOME}/.local/share/warsow-2.1
13 13
14# Allow /bin/sh (blacklisted by disable-shell.inc)
15include allow-bin-sh.inc
16
14include disable-common.inc 17include disable-common.inc
15include disable-devel.inc 18include disable-devel.inc
16include disable-exec.inc 19include disable-exec.inc
@@ -34,19 +37,18 @@ ipc-namespace
34netfilter 37netfilter
35nodvd 38nodvd
36nogroups 39nogroups
37noinput
38nonewprivs 40nonewprivs
39noroot 41noroot
40notv 42notv
41nou2f 43nou2f
42novideo 44novideo
43protocol unix,inet,inet6 45protocol unix,inet,inet6,netlink
44seccomp 46seccomp
45shell none 47shell none
46tracelog 48tracelog
47 49
48disable-mnt 50disable-mnt
49private-bin warsow 51private-bin basename,bash,dirname,sed,sh,uname,warsow
50private-cache 52private-cache
51private-dev 53private-dev
52private-tmp 54private-tmp
diff --git a/etc/profile-m-z/whalebird.profile b/etc/profile-m-z/whalebird.profile
index 2f26bf14c..92ebebdae 100644
--- a/etc/profile-m-z/whalebird.profile
+++ b/etc/profile-m-z/whalebird.profile
@@ -21,7 +21,7 @@ whitelist ${HOME}/.config/Whalebird
21no3d 21no3d
22 22
23private-bin electron,electron[0-9],electron[0-9][0-9],whalebird 23private-bin electron,electron[0-9],electron[0-9][0-9],whalebird
24private-etc fonts,machine-id 24private-etc alternatives,fonts,ld.so.cache,ld.so.preload,machine-id
25 25
26# Redirect 26# Redirect
27include electron.profile 27include electron.profile
diff --git a/etc/profile-m-z/whois.profile b/etc/profile-m-z/whois.profile
index 755e62f60..afff6f587 100644
--- a/etc/profile-m-z/whois.profile
+++ b/etc/profile-m-z/whois.profile
@@ -47,7 +47,7 @@ private
47private-bin bash,sh,whois 47private-bin bash,sh,whois
48private-cache 48private-cache
49private-dev 49private-dev
50private-etc alternatives,hosts,jwhois.conf,resolv.conf,services,whois.conf 50private-etc alternatives,hosts,jwhois.conf,ld.so.cache,ld.so.preload,resolv.conf,services,whois.conf
51private-lib gconv 51private-lib gconv
52private-tmp 52private-tmp
53 53
diff --git a/etc/profile-m-z/wire-desktop.profile b/etc/profile-m-z/wire-desktop.profile
index 151cd2adb..d8742cd71 100644
--- a/etc/profile-m-z/wire-desktop.profile
+++ b/etc/profile-m-z/wire-desktop.profile
@@ -26,7 +26,7 @@ mkdir ${HOME}/.config/Wire
26whitelist ${HOME}/.config/Wire 26whitelist ${HOME}/.config/Wire
27 27
28private-bin bash,electron,electron[0-9],electron[0-9][0-9],env,sh,wire-desktop 28private-bin bash,electron,electron[0-9],electron[0-9][0-9],env,sh,wire-desktop
29private-etc alternatives,ca-certificates,crypto-policies,fonts,machine-id,pki,resolv.conf,ssl 29private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,machine-id,pki,resolv.conf,ssl
30 30
31# Redirect 31# Redirect
32include electron.profile 32include electron.profile
diff --git a/etc/profile-m-z/wordwarvi.profile b/etc/profile-m-z/wordwarvi.profile
index b2f3341ee..3147c2ac3 100644
--- a/etc/profile-m-z/wordwarvi.profile
+++ b/etc/profile-m-z/wordwarvi.profile
@@ -45,7 +45,7 @@ private
45private-bin wordwarvi 45private-bin wordwarvi
46private-cache 46private-cache
47private-dev 47private-dev
48private-etc alsa,asound.conf,machine-id,pulse 48private-etc alsa,alternatives,asound.conf,ld.so.cache,ld.so.preload,machine-id,pulse
49private-tmp 49private-tmp
50 50
51dbus-user none 51dbus-user none
diff --git a/etc/profile-m-z/xbill.profile b/etc/profile-m-z/xbill.profile
index c9e408ccd..bb119996c 100644
--- a/etc/profile-m-z/xbill.profile
+++ b/etc/profile-m-z/xbill.profile
@@ -44,7 +44,7 @@ private
44private-bin xbill 44private-bin xbill
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc none 47private-etc alternatives,ld.so.cache,ld.so.preload
48private-tmp 48private-tmp
49 49
50dbus-user none 50dbus-user none
diff --git a/etc/profile-m-z/xfce4-mixer.profile b/etc/profile-m-z/xfce4-mixer.profile
index 05c46dffb..386ef2bd6 100644
--- a/etc/profile-m-z/xfce4-mixer.profile
+++ b/etc/profile-m-z/xfce4-mixer.profile
@@ -46,7 +46,7 @@ disable-mnt
46private-bin xfce4-mixer,xfconf-query 46private-bin xfce4-mixer,xfconf-query
47private-cache 47private-cache
48private-dev 48private-dev
49private-etc alternatives,asound.conf,fonts,machine-id,pulse 49private-etc alternatives,asound.conf,fonts,ld.so.cache,ld.so.preload,machine-id,pulse
50private-tmp 50private-tmp
51 51
52dbus-user filter 52dbus-user filter
diff --git a/etc/profile-m-z/xfce4-screenshooter.profile b/etc/profile-m-z/xfce4-screenshooter.profile
index b869ae005..d74ed5754 100644
--- a/etc/profile-m-z/xfce4-screenshooter.profile
+++ b/etc/profile-m-z/xfce4-screenshooter.profile
@@ -42,7 +42,7 @@ tracelog
42disable-mnt 42disable-mnt
43private-bin xfce4-screenshooter,xfconf-query 43private-bin xfce4-screenshooter,xfconf-query
44private-dev 44private-dev
45private-etc ca-certificates,crypto-policies,dconf,fonts,gtk-3.0,pki,resolv.conf,ssl 45private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-3.0,ld.so.cache,ld.so.preload,pki,resolv.conf,ssl
46private-tmp 46private-tmp
47 47
48dbus-user none 48dbus-user none
diff --git a/etc/profile-m-z/xiphos.profile b/etc/profile-m-z/xiphos.profile
index 070e5e0f7..c7fd0799b 100644
--- a/etc/profile-m-z/xiphos.profile
+++ b/etc/profile-m-z/xiphos.profile
@@ -47,5 +47,5 @@ disable-mnt
47private-bin xiphos 47private-bin xiphos
48private-cache 48private-cache
49private-dev 49private-dev
50private-etc alternatives,ca-certificates,crypto-policies,fonts,pki,resolv.conf,ssli,sword,sword.conf 50private-etc alternatives,ca-certificates,crypto-policies,fonts,ld.so.cache,ld.so.preload,pki,resolv.conf,ssli,sword,sword.conf
51private-tmp 51private-tmp
diff --git a/etc/profile-m-z/xlinks.profile b/etc/profile-m-z/xlinks.profile
index d5e25cfe7..404baf607 100644
--- a/etc/profile-m-z/xlinks.profile
+++ b/etc/profile-m-z/xlinks.profile
@@ -14,7 +14,7 @@ include whitelist-common.inc
14# if you want to use user-configured programs add 'private-bin PROGRAM1,PROGRAM2' 14# if you want to use user-configured programs add 'private-bin PROGRAM1,PROGRAM2'
15# to your xlinks.local or append 'PROGRAM1,PROGRAM2' to this private-bin line 15# to your xlinks.local or append 'PROGRAM1,PROGRAM2' to this private-bin line
16private-bin xlinks 16private-bin xlinks
17private-etc fonts 17private-etc alternatives,fonts,ld.so.cache,ld.so.preload
18 18
19# Redirect 19# Redirect
20include links.profile 20include links.profile
diff --git a/etc/profile-m-z/xlinks2 b/etc/profile-m-z/xlinks2
index 1ae6a60ca..d7edd3543 100644
--- a/etc/profile-m-z/xlinks2
+++ b/etc/profile-m-z/xlinks2
@@ -14,7 +14,7 @@ include whitelist-common.inc
14# if you want to use user-configured programs add 'private-bin PROGRAM1,PROGRAM2' 14# if you want to use user-configured programs add 'private-bin PROGRAM1,PROGRAM2'
15# to your xlinks.local or append 'PROGRAM1,PROGRAM2' to this private-bin line 15# to your xlinks.local or append 'PROGRAM1,PROGRAM2' to this private-bin line
16private-bin xlinks2 16private-bin xlinks2
17private-etc fonts 17private-etc alternatives,fonts,ld.so.cache,ld.so.preload
18 18
19# Redirect 19# Redirect
20include links2.profile 20include links2.profile
diff --git a/etc/profile-m-z/xmr-stak.profile b/etc/profile-m-z/xmr-stak.profile
index 8179e8d76..e541436a4 100644
--- a/etc/profile-m-z/xmr-stak.profile
+++ b/etc/profile-m-z/xmr-stak.profile
@@ -38,7 +38,7 @@ disable-mnt
38private ${HOME}/.xmr-stak 38private ${HOME}/.xmr-stak
39private-bin xmr-stak 39private-bin xmr-stak
40private-dev 40private-dev
41private-etc alternatives,ca-certificates,crypto-policies,nsswitch.conf,pki,resolv.conf,ssl 41private-etc alternatives,ca-certificates,crypto-policies,ld.so.cache,ld.so.preload,nsswitch.conf,pki,resolv.conf,ssl
42#private-lib libxmrstak_opencl_backend,libxmrstak_cuda_backend 42#private-lib libxmrstak_opencl_backend,libxmrstak_cuda_backend
43private-opt cuda 43private-opt cuda
44private-tmp 44private-tmp
diff --git a/etc/profile-m-z/xonotic.profile b/etc/profile-m-z/xonotic.profile
index 6ffe9ece9..7c2b38d1d 100644
--- a/etc/profile-m-z/xonotic.profile
+++ b/etc/profile-m-z/xonotic.profile
@@ -32,7 +32,6 @@ caps.drop all
32netfilter 32netfilter
33nodvd 33nodvd
34nogroups 34nogroups
35noinput
36nonewprivs 35nonewprivs
37noroot 36noroot
38notv 37notv
diff --git a/etc/profile-m-z/xournal.profile b/etc/profile-m-z/xournal.profile
index e4282a125..a0e77b4e7 100644
--- a/etc/profile-m-z/xournal.profile
+++ b/etc/profile-m-z/xournal.profile
@@ -43,7 +43,7 @@ tracelog
43private-bin xournal 43private-bin xournal
44private-cache 44private-cache
45private-dev 45private-dev
46private-etc alternatives,fonts,group,machine-id,passwd 46private-etc alternatives,fonts,group,ld.so.cache,ld.so.preload,machine-id,passwd
47# TODO should use private-lib 47# TODO should use private-lib
48private-tmp 48private-tmp
49 49
diff --git a/etc/profile-m-z/xreader.profile b/etc/profile-m-z/xreader.profile
index f59adc6e2..8b880426f 100644
--- a/etc/profile-m-z/xreader.profile
+++ b/etc/profile-m-z/xreader.profile
@@ -39,7 +39,7 @@ tracelog
39 39
40private-bin xreader,xreader-previewer,xreader-thumbnailer 40private-bin xreader,xreader-previewer,xreader-thumbnailer
41private-dev 41private-dev
42private-etc alternatives,fonts,ld.so.cache 42private-etc alternatives,fonts,ld.so.cache,ld.so.preload
43private-tmp 43private-tmp
44 44
45memory-deny-write-execute 45memory-deny-write-execute
diff --git a/etc/profile-m-z/yelp.profile b/etc/profile-m-z/yelp.profile
index 2a6dbe1bf..31a51b2c4 100644
--- a/etc/profile-m-z/yelp.profile
+++ b/etc/profile-m-z/yelp.profile
@@ -56,7 +56,7 @@ disable-mnt
56private-bin groff,man,tbl,troff,yelp 56private-bin groff,man,tbl,troff,yelp
57private-cache 57private-cache
58private-dev 58private-dev
59private-etc alsa,alternatives,asound.conf,crypto-policies,cups,dconf,drirc,fonts,gcrypt,groff,gtk-3.0,machine-id,man_db.conf,openal,os-release,pulse,sgml,xml 59private-etc alsa,alternatives,asound.conf,crypto-policies,cups,dconf,drirc,fonts,gcrypt,groff,gtk-3.0,ld.so.cache,ld.so.preload,machine-id,man_db.conf,openal,os-release,pulse,sgml,xml
60private-tmp 60private-tmp
61 61
62dbus-user filter 62dbus-user filter
diff --git a/etc/profile-m-z/youtube-dl-gui.profile b/etc/profile-m-z/youtube-dl-gui.profile
index 5d6fb47c1..94f37a92b 100644
--- a/etc/profile-m-z/youtube-dl-gui.profile
+++ b/etc/profile-m-z/youtube-dl-gui.profile
@@ -49,7 +49,7 @@ disable-mnt
49private-bin atomicparsley,ffmpeg,ffprobe,python*,youtube-dl-gui 49private-bin atomicparsley,ffmpeg,ffprobe,python*,youtube-dl-gui
50private-cache 50private-cache
51private-dev 51private-dev
52private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-2.0,gtk-3.0,hostname,hosts,ld.so.cache,locale,locale.conf,passwd,pki,resolv.conf,ssl 52private-etc alternatives,ca-certificates,crypto-policies,dconf,fonts,gtk-2.0,gtk-3.0,hostname,hosts,ld.so.cache,ld.so.preload,locale,locale.conf,passwd,pki,resolv.conf,ssl
53private-tmp 53private-tmp
54 54
55dbus-user none 55dbus-user none
diff --git a/etc/profile-m-z/youtube-dl.profile b/etc/profile-m-z/youtube-dl.profile
index 145e565fd..71e50ab11 100644
--- a/etc/profile-m-z/youtube-dl.profile
+++ b/etc/profile-m-z/youtube-dl.profile
@@ -58,7 +58,7 @@ tracelog
58private-bin env,ffmpeg,python*,youtube-dl 58private-bin env,ffmpeg,python*,youtube-dl
59private-cache 59private-cache
60private-dev 60private-dev
61private-etc alternatives,ca-certificates,crypto-policies,hostname,hosts,ld.so.cache,mime.types,pki,resolv.conf,ssl,youtube-dl.conf 61private-etc alternatives,ca-certificates,crypto-policies,hostname,hosts,ld.so.cache,ld.so.preload,mime.types,pki,resolv.conf,ssl,youtube-dl.conf
62private-tmp 62private-tmp
63 63
64dbus-user none 64dbus-user none
diff --git a/etc/profile-m-z/youtube-viewer.profile b/etc/profile-m-z/youtube-viewer.profile
index b54dd37ad..825599fcc 100644
--- a/etc/profile-m-z/youtube-viewer.profile
+++ b/etc/profile-m-z/youtube-viewer.profile
@@ -18,4 +18,4 @@ whitelist ${HOME}/.config/youtube-viewer
18private-bin gtk-youtube-viewer,gtk2-youtube-viewer,gtk3-youtube-viewer,youtube-viewer 18private-bin gtk-youtube-viewer,gtk2-youtube-viewer,gtk3-youtube-viewer,youtube-viewer
19 19
20# Redirect 20# Redirect
21include youtube-viewers-common.profile \ No newline at end of file 21include youtube-viewers-common.profile
diff --git a/etc/profile-m-z/youtube-viewers-common.profile b/etc/profile-m-z/youtube-viewers-common.profile
index a05f05c51..80d551038 100644
--- a/etc/profile-m-z/youtube-viewers-common.profile
+++ b/etc/profile-m-z/youtube-viewers-common.profile
@@ -53,7 +53,7 @@ disable-mnt
53private-bin bash,ffmpeg,ffprobe,firefox,mpv,perl,python*,sh,smplayer,stty,wget,which,xterm,youtube-dl,yt-dlp 53private-bin bash,ffmpeg,ffprobe,firefox,mpv,perl,python*,sh,smplayer,stty,wget,which,xterm,youtube-dl,yt-dlp
54private-cache 54private-cache
55private-dev 55private-dev
56private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,machine-id,mime.types,nsswitch.conf,passwd,pki,pulse,resolv.conf,ssl,X11,xdg 56private-etc alsa,alternatives,asound.conf,ca-certificates,crypto-policies,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,machine-id,mime.types,nsswitch.conf,passwd,pki,pulse,resolv.conf,ssl,X11,xdg
57private-tmp 57private-tmp
58 58
59dbus-user none 59dbus-user none
diff --git a/etc/profile-m-z/youtube.profile b/etc/profile-m-z/youtube.profile
index efb001ee6..5c4d697da 100644
--- a/etc/profile-m-z/youtube.profile
+++ b/etc/profile-m-z/youtube.profile
@@ -17,7 +17,7 @@ mkdir ${HOME}/.config/Youtube
17whitelist ${HOME}/.config/Youtube 17whitelist ${HOME}/.config/Youtube
18 18
19private-bin electron,electron[0-9],electron[0-9][0-9],youtube 19private-bin electron,electron[0-9],electron[0-9][0-9],youtube
20private-etc alsa,alternatives,asound.conf,ati,bumblebee,ca-certificates,crypto-policies,drirc,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,mime.types,nsswitch.conf,nvidia,pki,pulse,resolv.conf,selinux,ssl,X11,xdg 20private-etc alsa,alternatives,asound.conf,ati,bumblebee,ca-certificates,crypto-policies,drirc,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,mime.types,nsswitch.conf,nvidia,pki,pulse,resolv.conf,selinux,ssl,X11,xdg
21private-opt Youtube 21private-opt Youtube
22 22
23# Redirect 23# Redirect
diff --git a/etc/profile-m-z/youtubemusic-nativefier.profile b/etc/profile-m-z/youtubemusic-nativefier.profile
index ce7161a70..2b5ffeaaf 100644
--- a/etc/profile-m-z/youtubemusic-nativefier.profile
+++ b/etc/profile-m-z/youtubemusic-nativefier.profile
@@ -14,7 +14,7 @@ mkdir ${HOME}/.config/youtubemusic-nativefier-040164
14whitelist ${HOME}/.config/youtubemusic-nativefier-040164 14whitelist ${HOME}/.config/youtubemusic-nativefier-040164
15 15
16private-bin electron,electron[0-9],electron[0-9][0-9],youtubemusic-nativefier 16private-bin electron,electron[0-9],electron[0-9][0-9],youtubemusic-nativefier
17private-etc alsa,alternatives,asound.conf,ati,bumblebee,ca-certificates,crypto-policies,drirc,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,mime.types,nsswitch.conf,nvidia,pki,pulse,resolv.conf,selinux,ssl,X11,xdg 17private-etc alsa,alternatives,asound.conf,ati,bumblebee,ca-certificates,crypto-policies,drirc,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,mime.types,nsswitch.conf,nvidia,pki,pulse,resolv.conf,selinux,ssl,X11,xdg
18private-opt youtubemusic-nativefier 18private-opt youtubemusic-nativefier
19 19
20# Redirect 20# Redirect
diff --git a/etc/profile-m-z/yt-dlp.profile b/etc/profile-m-z/yt-dlp.profile
index 1c3382a08..88e7a0949 100644
--- a/etc/profile-m-z/yt-dlp.profile
+++ b/etc/profile-m-z/yt-dlp.profile
@@ -13,7 +13,7 @@ noblacklist ${HOME}/.config/yt-dlp
13noblacklist ${HOME}/yt-dlp.conf 13noblacklist ${HOME}/yt-dlp.conf
14 14
15private-bin yt-dlp 15private-bin yt-dlp
16private-etc yt-dlp.conf 16private-etc alternatives,ld.so.cache,ld.so.preload,yt-dlp.conf
17 17
18# Redirect 18# Redirect
19include youtube-dl.profile 19include youtube-dl.profile
diff --git a/etc/profile-m-z/ytmdesktop.profile b/etc/profile-m-z/ytmdesktop.profile
index ab46fccc2..59b6e2543 100644
--- a/etc/profile-m-z/ytmdesktop.profile
+++ b/etc/profile-m-z/ytmdesktop.profile
@@ -14,7 +14,7 @@ mkdir ${HOME}/.config/youtube-music-desktop-app
14whitelist ${HOME}/.config/youtube-music-desktop-app 14whitelist ${HOME}/.config/youtube-music-desktop-app
15 15
16# private-bin env,ytmdesktop 16# private-bin env,ytmdesktop
17private-etc alsa,alternatives,asound.conf,ati,bumblebee,ca-certificates,crypto-policies,drirc,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,mime.types,nsswitch.conf,nvidia,pki,pulse,resolv.conf,selinux,ssl,X11,xdg 17private-etc alsa,alternatives,asound.conf,ati,bumblebee,ca-certificates,crypto-policies,drirc,fonts,gtk-2.0,gtk-3.0,host.conf,hostname,hosts,ld.so.cache,ld.so.preload,mime.types,nsswitch.conf,nvidia,pki,pulse,resolv.conf,selinux,ssl,X11,xdg
18# private-opt 18# private-opt
19 19
20# Redirect 20# Redirect
diff --git a/etc/profile-m-z/zulip.profile b/etc/profile-m-z/zulip.profile
index 604da4c8e..8acfdd651 100644
--- a/etc/profile-m-z/zulip.profile
+++ b/etc/profile-m-z/zulip.profile
@@ -44,5 +44,5 @@ disable-mnt
44private-bin locale,zulip 44private-bin locale,zulip
45private-cache 45private-cache
46private-dev 46private-dev
47private-etc asound.conf,fonts,machine-id 47private-etc alternatives,asound.conf,fonts,ld.so.cache,ld.so.preload,machine-id
48private-tmp 48private-tmp
diff --git a/etc/templates/profile.template b/etc/templates/profile.template
index e580a0c0c..44197b547 100644
--- a/etc/templates/profile.template
+++ b/etc/templates/profile.template
@@ -116,6 +116,7 @@ include globals.local
116#include disable-devel.inc 116#include disable-devel.inc
117#include disable-exec.inc 117#include disable-exec.inc
118#include disable-interpreters.inc 118#include disable-interpreters.inc
119#include disable-proc.inc
119#include disable-programs.inc 120#include disable-programs.inc
120#include disable-shell.inc 121#include disable-shell.inc
121#include disable-write-mnt.inc 122#include disable-write-mnt.inc
@@ -204,7 +205,7 @@ include globals.local
204 205
205# Since 0.9.63 also a more granular control of dbus is supported. 206# Since 0.9.63 also a more granular control of dbus is supported.
206# To get the dbus-addresses an application needs access to you can 207# To get the dbus-addresses an application needs access to you can
207# check with flatpak (when the application is distriputed that way): 208# check with flatpak (when the application is distributed that way):
208# flatpak remote-info --show-metadata flathub <APP-ID> 209# flatpak remote-info --show-metadata flathub <APP-ID>
209# Notes: 210# Notes:
210# - flatpak implicitly allows an app to own <APP-ID> on the session bus 211# - flatpak implicitly allows an app to own <APP-ID> on the session bus
diff --git a/gcov.sh b/gcov.sh
index a9d30b676..61f4b2483 100755
--- a/gcov.sh
+++ b/gcov.sh
@@ -24,8 +24,8 @@ gcov_init() {
24} 24}
25 25
26generate() { 26generate() {
27 lcov -q --capture -d src/firejail -d src/firemon -d src/faudit -d src/fbuilder -d src/fcopy -d src/fnetfilter -d src/fsec-print -d src/fsec-optimize -d src/fseccomp -d src/fnet -d src/ftee -d src/lib -d src/firecfg -d src/fldd --output-file gcov-file-new 27 lcov -q --capture -d src/firejail -d src/firemon -d src/faudit -d src/fbuilder -d src/fcopy -d src/fnetfilter -d src/fsec-print -d src/fsec-optimize -d src/fseccomp -d src/fnet -d src/ftee -d src/lib -d src/firecfg -d src/fldd --output-file gcov-file-new
28 lcov --add-tracefile gcov-file-old --add-tracefile gcov-file-new --output-file gcov-file 28 lcov --add-tracefile gcov-file-old --add-tracefile gcov-file-new --output-file gcov-file
29 rm -fr gcov-dir 29 rm -fr gcov-dir
30 genhtml -q gcov-file --output-directory gcov-dir 30 genhtml -q gcov-file --output-directory gcov-dir
31 find . -name '*.gcda' -exec sudo rm '{}' + 31 find . -name '*.gcda' -exec sudo rm '{}' +
@@ -35,7 +35,7 @@ generate() {
35 35
36 36
37gcov_init 37gcov_init
38lcov -q --capture -d src/firejail -d src/firemon -d src/faudit -d src/fbuilder -d src/fcopy -d src/fnetfilter -d src/fsec-print -d src/fsec-optimize -d src/fseccomp -d src/fnet -d src/ftee -d src/lib -d src/firecfg -d src/fldd --output-file gcov-file-old 38lcov -q --capture -d src/firejail -d src/firemon -d src/faudit -d src/fbuilder -d src/fcopy -d src/fnetfilter -d src/fsec-print -d src/fsec-optimize -d src/fseccomp -d src/fnet -d src/ftee -d src/lib -d src/firecfg -d src/fldd --output-file gcov-file-old
39 39
40#make test-utils 40#make test-utils
41#generate 41#generate
diff --git a/linecnt.sh b/linecnt.sh
index 37b4f2a65..c30e175ba 100755
--- a/linecnt.sh
+++ b/linecnt.sh
@@ -26,6 +26,6 @@ gcov_init() {
26rm -fr gcov-dir 26rm -fr gcov-dir
27gcov_init 27gcov_init
28lcov -q --capture -d src/firejail -d src/firemon -d src/faudit -d src/fbuilder \ 28lcov -q --capture -d src/firejail -d src/firemon -d src/faudit -d src/fbuilder \
29 -d src/fcopy -d src/fnetfilter -d src/fsec-print -d src/fsec-optimize -d src/fseccomp \ 29 -d src/fcopy -d src/fnetfilter -d src/fsec-print -d src/fsec-optimize -d src/fseccomp \
30 -d src/fnet -d src/ftee -d src/lib -d src/firecfg -d src/fldd --output-file gcov-file 30 -d src/fnet -d src/ftee -d src/lib -d src/firecfg -d src/fldd --output-file gcov-file
31genhtml -q gcov-file --output-directory gcov-dir 31genhtml -q gcov-file --output-directory gcov-dir
diff --git a/src/bash_completion/firejail.bash_completion.in b/src/bash_completion/firejail.bash_completion.in
index f68edf380..ff411c807 100644
--- a/src/bash_completion/firejail.bash_completion.in
+++ b/src/bash_completion/firejail.bash_completion.in
@@ -5,7 +5,7 @@
5# http://bash-completion.alioth.debian.org 5# http://bash-completion.alioth.debian.org
6#******************************************************************* 6#*******************************************************************
7 7
8__interfaces(){ 8__interfaces() {
9 cut -f 1 -d ':' /proc/net/dev | tail -n +3 | grep -v lo | xargs 9 cut -f 1 -d ':' /proc/net/dev | tail -n +3 | grep -v lo | xargs
10} 10}
11 11
@@ -90,11 +90,11 @@ _firejail()
90 _filedir 90 _filedir
91 return 0 91 return 0
92 ;; 92 ;;
93 --net) 93 --net)
94 comps=$(__interfaces) 94 comps=$(__interfaces)
95 COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) 95 COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
96 return 0 96 return 0
97 ;; 97 ;;
98 esac 98 esac
99 99
100 $split && return 0 100 $split && return 0
diff --git a/src/fbuilder/build_fs.c b/src/fbuilder/build_fs.c
index 019c3ac5a..a1847284c 100644
--- a/src/fbuilder/build_fs.c
+++ b/src/fbuilder/build_fs.c
@@ -182,12 +182,12 @@ static void var_callback(char *ptr) {
182void build_var(const char *fname, FILE *fp) { 182void build_var(const char *fname, FILE *fp) {
183 assert(fname); 183 assert(fname);
184 184
185 var_skip = filedb_load_whitelist(var_skip, "whitelist-var-common.inc", "allow /var/"); 185 var_skip = filedb_load_whitelist(var_skip, "whitelist-var-common.inc", "whitelist /var/");
186 process_files(fname, "/var", var_callback); 186 process_files(fname, "/var", var_callback);
187 187
188 // always whitelist /var 188 // always whitelist /var
189 if (var_out) 189 if (var_out)
190 filedb_print(var_out, "allow /var/", fp); 190 filedb_print(var_out, "whitelist /var/", fp);
191 fprintf(fp, "include whitelist-var-common.inc\n"); 191 fprintf(fp, "include whitelist-var-common.inc\n");
192} 192}
193 193
@@ -222,12 +222,12 @@ static void share_callback(char *ptr) {
222void build_share(const char *fname, FILE *fp) { 222void build_share(const char *fname, FILE *fp) {
223 assert(fname); 223 assert(fname);
224 224
225 share_skip = filedb_load_whitelist(share_skip, "whitelist-usr-share-common.inc", "allow /usr/share/"); 225 share_skip = filedb_load_whitelist(share_skip, "whitelist-usr-share-common.inc", "whitelist /usr/share/");
226 process_files(fname, "/usr/share", share_callback); 226 process_files(fname, "/usr/share", share_callback);
227 227
228 // always whitelist /usr/share 228 // always whitelist /usr/share
229 if (share_out) 229 if (share_out)
230 filedb_print(share_out, "allow /usr/share/", fp); 230 filedb_print(share_out, "whitelist /usr/share/", fp);
231 fprintf(fp, "include whitelist-usr-share-common.inc\n"); 231 fprintf(fp, "include whitelist-usr-share-common.inc\n");
232} 232}
233 233
@@ -236,9 +236,6 @@ void build_share(const char *fname, FILE *fp) {
236//******************************************* 236//*******************************************
237static FileDB *tmp_out = NULL; 237static FileDB *tmp_out = NULL;
238static void tmp_callback(char *ptr) { 238static void tmp_callback(char *ptr) {
239 // skip strace file
240 if (strncmp(ptr, "/tmp/firejail-strace", 20) == 0)
241 return;
242 if (strncmp(ptr, "/tmp/runtime-", 13) == 0) 239 if (strncmp(ptr, "/tmp/runtime-", 13) == 0)
243 return; 240 return;
244 if (strcmp(ptr, "/tmp") == 0) 241 if (strcmp(ptr, "/tmp") == 0)
diff --git a/src/fbuilder/build_home.c b/src/fbuilder/build_home.c
index c85474779..0fe0ffef6 100644
--- a/src/fbuilder/build_home.c
+++ b/src/fbuilder/build_home.c
@@ -140,7 +140,7 @@ void build_home(const char *fname, FILE *fp) {
140 assert(fname); 140 assert(fname);
141 141
142 // load whitelist common 142 // load whitelist common
143 db_skip = filedb_load_whitelist(db_skip, "whitelist-common.inc", "allow ${HOME}/"); 143 db_skip = filedb_load_whitelist(db_skip, "whitelist-common.inc", "whitelist ${HOME}/");
144 144
145 // find user home directory 145 // find user home directory
146 struct passwd *pw = getpwuid(getuid()); 146 struct passwd *pw = getpwuid(getuid());
@@ -168,7 +168,7 @@ void build_home(const char *fname, FILE *fp) {
168 168
169 // print the out list if any 169 // print the out list if any
170 if (db_out) { 170 if (db_out) {
171 filedb_print(db_out, "allow ${HOME}/", fp); 171 filedb_print(db_out, "whitelist ${HOME}/", fp);
172 fprintf(fp, "include whitelist-common.inc\n"); 172 fprintf(fp, "include whitelist-common.inc\n");
173 } 173 }
174 else 174 else
diff --git a/src/fbuilder/build_profile.c b/src/fbuilder/build_profile.c
index 0b9a99739..c945d7253 100644
--- a/src/fbuilder/build_profile.c
+++ b/src/fbuilder/build_profile.c
@@ -92,7 +92,7 @@ void build_profile(int argc, char **argv, int index, FILE *fp) {
92 92
93 if (WIFEXITED(status) && WEXITSTATUS(status) == 0) { 93 if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
94 if (fp == stdout) 94 if (fp == stdout)
95 printf("--- Built profile beings after this line ---\n"); 95 printf("--- Built profile begins after this line ---\n");
96 fprintf(fp, "# Save this file as \"application.profile\" (change \"application\" with the\n"); 96 fprintf(fp, "# Save this file as \"application.profile\" (change \"application\" with the\n");
97 fprintf(fp, "# program name) in ~/.config/firejail directory. Firejail will find it\n"); 97 fprintf(fp, "# program name) in ~/.config/firejail directory. Firejail will find it\n");
98 fprintf(fp, "# automatically every time you sandbox your application.\n#\n"); 98 fprintf(fp, "# automatically every time you sandbox your application.\n#\n");
diff --git a/src/fcopy/main.c b/src/fcopy/main.c
index 31810de9a..f279af89f 100644
--- a/src/fcopy/main.c
+++ b/src/fcopy/main.c
@@ -88,7 +88,8 @@ static void selinux_relabel_path(const char *path, const char *inside_path) {
88 if (arg_debug) 88 if (arg_debug)
89 printf("Relabeling %s as %s (%s)\n", path, inside_path, fcon); 89 printf("Relabeling %s as %s (%s)\n", path, inside_path, fcon);
90 90
91 setfilecon_raw(procfs_path, fcon); 91 if (setfilecon_raw(procfs_path, fcon) != 0 && arg_debug)
92 printf("Cannot relabel %s: %s\n", path, strerror(errno));
92 } 93 }
93 freecon(fcon); 94 freecon(fcon);
94 close: 95 close:
diff --git a/src/fids/fids.h b/src/fids/fids.h
index a2e2886fe..eaf2bbd29 100644
--- a/src/fids/fids.h
+++ b/src/fids/fids.h
@@ -48,4 +48,4 @@ int db_exclude_check(const char *fname);
48//#define KEY_SIZE 512 48//#define KEY_SIZE 512
49int blake2b(void *out, size_t outlen, const void *in, size_t inlen); 49int blake2b(void *out, size_t outlen, const void *in, size_t inlen);
50 50
51#endif \ No newline at end of file 51#endif
diff --git a/src/firecfg/firecfg.config b/src/firecfg/firecfg.config
index 698630180..0f4c1b18b 100644
--- a/src/firecfg/firecfg.config
+++ b/src/firecfg/firecfg.config
@@ -1,7 +1,6 @@
1# /usr/lib/firejail/firecfg.config - firecfg utility configuration file 1# /usr/lib/firejail/firecfg.config - firecfg utility configuration file
2# This is the list of programs in alphabetical order handled by firecfg utility 2# This is the list of programs in alphabetical order handled by firecfg utility
3# 3#
4#qemu-system-x86_64
50ad 40ad
62048-qt 52048-qt
7Books 6Books
@@ -139,8 +138,8 @@ clamdscan
139clamdtop 138clamdtop
140clamscan 139clamscan
141clamtk 140clamtk
142claws-mail
143clawsker 141clawsker
142claws-mail
144clementine 143clementine
145clion 144clion
146clion-eap 145clion-eap
@@ -151,6 +150,7 @@ clocks
151cmus 150cmus
152code 151code
153code-oss 152code-oss
153codium
154cola 154cola
155colorful 155colorful
156com.github.bleakgrey.tootle 156com.github.bleakgrey.tootle
@@ -169,7 +169,6 @@ crow
169cryptocat 169cryptocat
170cvlc 170cvlc
171cyberfox 171cyberfox
172d-feet
173darktable 172darktable
174dconf-editor 173dconf-editor
175ddgr 174ddgr
@@ -179,6 +178,7 @@ deluge
179desktopeditors 178desktopeditors
180devhelp 179devhelp
181dex2jar 180dex2jar
181d-feet
182dia 182dia
183dig 183dig
184digikam 184digikam
@@ -255,8 +255,8 @@ flacsplt
255flameshot 255flameshot
256flashpeak-slimjet 256flashpeak-slimjet
257flowblade 257flowblade
258font-manager
259fontforge 258fontforge
259font-manager
260fossamail 260fossamail
261four-in-a-row 261four-in-a-row
262fractal 262fractal
@@ -348,6 +348,7 @@ gnome-weather
348gnote 348gnote
349gnubik 349gnubik
350godot 350godot
351goldendict
351goobox 352goobox
352google-chrome 353google-chrome
353google-chrome-beta 354google-chrome-beta
@@ -364,11 +365,11 @@ gradio
364gramps 365gramps
365gravity-beams-and-evaporating-stars 366gravity-beams-and-evaporating-stars
366gthumb 367gthumb
368gtk2-youtube-viewer
369gtk3-youtube-viewer
367gtk-pipe-viewer 370gtk-pipe-viewer
368gtk-straw-viewer 371gtk-straw-viewer
369gtk-youtube-viewer 372gtk-youtube-viewer
370gtk2-youtube-viewer
371gtk3-youtube-viewer
372guayadeque 373guayadeque
373gucharmap 374gucharmap
374gummi 375gummi
@@ -389,11 +390,12 @@ icecat
389icedove 390icedove
390iceweasel 391iceweasel
391idea 392idea
392idea.sh
393ideaIC 393ideaIC
394idea.sh
394imagej 395imagej
395img2txt 396img2txt
396impressive 397impressive
398imv
397inkscape 399inkscape
398inkview 400inkview
399inox 401inox
@@ -530,6 +532,7 @@ mp3wrap
530mpDris2 532mpDris2
531mpg123 533mpg123
532mpg123-alsa 534mpg123-alsa
535mpg123.bin
533mpg123-id3dump 536mpg123-id3dump
534mpg123-jack 537mpg123-jack
535mpg123-nas 538mpg123-nas
@@ -538,7 +541,6 @@ mpg123-oss
538mpg123-portaudio 541mpg123-portaudio
539mpg123-pulse 542mpg123-pulse
540mpg123-strip 543mpg123-strip
541mpg123.bin
542mplayer 544mplayer
543mpsyt 545mpsyt
544mpv 546mpv
@@ -603,11 +605,11 @@ onboard
603onionshare-gui 605onionshare-gui
604ooffice 606ooffice
605ooviewdoc 607ooviewdoc
606open-invaders
607openarena 608openarena
608openarena_ded 609openarena_ded
609opencity 610opencity
610openclonk 611openclonk
612open-invaders
611openmw 613openmw
612openmw-launcher 614openmw-launcher
613openoffice.org 615openoffice.org
@@ -666,6 +668,7 @@ pybitmessage
666qbittorrent 668qbittorrent
667qcomicbook 669qcomicbook
668qemu-launcher 670qemu-launcher
671#qemu-system-x86_64
669qgis 672qgis
670qlipper 673qlipper
671qmmp 674qmmp
@@ -685,6 +688,7 @@ rednotebook
685redshift 688redshift
686regextester 689regextester
687remmina 690remmina
691retroarch
688rhythmbox 692rhythmbox
689rhythmbox-client 693rhythmbox-client
690ricochet 694ricochet
@@ -728,8 +732,8 @@ smuxi-frontend-gnome
728snox 732snox
729soffice 733soffice
730sol 734sol
731sound-juicer
732soundconverter 735soundconverter
736sound-juicer
733spectacle 737spectacle
734spectral 738spectral
735spotify 739spotify
@@ -742,8 +746,8 @@ steam
742steam-native 746steam-native
743steam-runtime 747steam-runtime
744stellarium 748stellarium
745straw-viewer
746strawberry 749strawberry
750straw-viewer
747strings 751strings
748studio.sh 752studio.sh
749subdownloader 753subdownloader
@@ -771,6 +775,7 @@ thunderbird-beta
771thunderbird-wayland 775thunderbird-wayland
772tilp 776tilp
773tor-browser 777tor-browser
778torbrowser
774tor-browser-ar 779tor-browser-ar
775tor-browser-ca 780tor-browser-ca
776tor-browser-cs 781tor-browser-cs
@@ -792,6 +797,7 @@ tor-browser-it
792tor-browser-ja 797tor-browser-ja
793tor-browser-ka 798tor-browser-ka
794tor-browser-ko 799tor-browser-ko
800torbrowser-launcher
795tor-browser-nb 801tor-browser-nb
796tor-browser-nl 802tor-browser-nl
797tor-browser-pl 803tor-browser-pl
@@ -802,7 +808,6 @@ tor-browser-tr
802tor-browser-vi 808tor-browser-vi
803tor-browser-zh-cn 809tor-browser-zh-cn
804tor-browser-zh-tw 810tor-browser-zh-tw
805torbrowser-launcher
806torcs 811torcs
807totem 812totem
808tracker 813tracker
@@ -908,8 +913,8 @@ yelp
908youtube 913youtube
909youtube-dl 914youtube-dl
910youtube-dl-gui 915youtube-dl-gui
911youtube-viewer
912youtubemusic-nativefier 916youtubemusic-nativefier
917youtube-viewer
913yt-dlp 918yt-dlp
914ytmdesktop 919ytmdesktop
915zaproxy 920zaproxy
diff --git a/src/firejail/cgroup.c b/src/firejail/cgroup.c
index e7ffbca36..38b3c32d3 100644
--- a/src/firejail/cgroup.c
+++ b/src/firejail/cgroup.c
@@ -18,7 +18,8 @@
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*/ 19*/
20#include "firejail.h" 20#include "firejail.h"
21#include <sys/stat.h> 21#include <sys/wait.h>
22#include <errno.h>
22 23
23#define MAXBUF 4096 24#define MAXBUF 4096
24 25
@@ -68,52 +69,60 @@ errout:
68 fclose(fp); 69 fclose(fp);
69} 70}
70 71
72static int is_cgroup_path(const char *fname) {
73 // path starts with /sys/fs/cgroup
74 if (strncmp(fname, "/sys/fs/cgroup", 14) != 0)
75 return 0;
71 76
72void set_cgroup(const char *path) { 77 // no .. traversal
73 EUID_ASSERT(); 78 char *ptr = strstr(fname, "..");
79 if (ptr)
80 return 0;
74 81
75 invalid_filename(path, 0); // no globbing 82 return 1;
83}
76 84
77 // path starts with /sys/fs/cgroup 85void check_cgroup_file(const char *fname) {
78 if (strncmp(path, "/sys/fs/cgroup", 14) != 0) 86 assert(fname);
79 goto errout; 87 invalid_filename(fname, 0); // no globbing
80 88
81 // path ends in tasks 89 if (!is_cgroup_path(fname))
82 char *ptr = strstr(path, "tasks");
83 if (!ptr)
84 goto errout;
85 if (*(ptr + 5) != '\0')
86 goto errout; 90 goto errout;
87 91
88 // no .. traversal 92 const char *base = gnu_basename(fname);
89 ptr = strstr(path, ".."); 93 if (strcmp(base, "tasks") != 0 && // cgroup v1
90 if (ptr) 94 strcmp(base, "cgroup.procs") != 0)
91 goto errout; 95 goto errout;
92 96
93 // tasks file exists 97 if (access(fname, W_OK) == 0)
94 FILE *fp = fopen(path, "ae"); 98 return;
95 if (!fp)
96 goto errout;
97 // task file belongs to the user running the sandbox
98 int fd = fileno(fp);
99 if (fd == -1)
100 errExit("fileno");
101 struct stat s;
102 if (fstat(fd, &s) == -1)
103 errExit("fstat");
104 if (s.st_uid != getuid() && s.st_gid != getgid())
105 goto errout2;
106 // add the task to cgroup
107 pid_t pid = getpid();
108 int rv = fprintf(fp, "%d\n", pid);
109 (void) rv;
110 fclose(fp);
111 return;
112 99
113errout: 100errout:
114 fprintf(stderr, "Error: invalid cgroup\n"); 101 fprintf(stderr, "Error: invalid cgroup\n");
115 exit(1); 102 exit(1);
116errout2: 103}
117 fprintf(stderr, "Error: you don't have permissions to use this control group\n"); 104
118 exit(1); 105static void do_set_cgroup(const char *fname, pid_t pid) {
106 FILE *fp = fopen(fname, "ae");
107 if (!fp) {
108 fwarning("cannot open %s for writing: %s\n", fname, strerror(errno));
109 return;
110 }
111
112 int rv = fprintf(fp, "%d\n", pid);
113 (void) rv;
114 fclose(fp);
115}
116
117void set_cgroup(const char *fname, pid_t pid) {
118 pid_t child = fork();
119 if (child < 0)
120 errExit("fork");
121 if (child == 0) {
122 drop_privs(0);
123
124 do_set_cgroup(fname, pid);
125 _exit(0);
126 }
127 waitpid(child, NULL, 0);
119} 128}
diff --git a/src/firejail/checkcfg.c b/src/firejail/checkcfg.c
index 06e6f0ccb..e5d837bbb 100644
--- a/src/firejail/checkcfg.c
+++ b/src/firejail/checkcfg.c
@@ -58,6 +58,7 @@ int checkcfg(int val) {
58 cfg_val[CFG_XPRA_ATTACH] = 0; 58 cfg_val[CFG_XPRA_ATTACH] = 0;
59 cfg_val[CFG_SECCOMP_ERROR_ACTION] = -1; 59 cfg_val[CFG_SECCOMP_ERROR_ACTION] = -1;
60 cfg_val[CFG_BROWSER_ALLOW_DRM] = 0; 60 cfg_val[CFG_BROWSER_ALLOW_DRM] = 0;
61 cfg_val[CFG_ALLOW_TRAY] = 0;
61 62
62 // open configuration file 63 // open configuration file
63 const char *fname = SYSCONFDIR "/firejail.config"; 64 const char *fname = SYSCONFDIR "/firejail.config";
@@ -122,6 +123,7 @@ int checkcfg(int val) {
122 PARSE_YESNO(CFG_XPRA_ATTACH, "xpra-attach") 123 PARSE_YESNO(CFG_XPRA_ATTACH, "xpra-attach")
123 PARSE_YESNO(CFG_BROWSER_DISABLE_U2F, "browser-disable-u2f") 124 PARSE_YESNO(CFG_BROWSER_DISABLE_U2F, "browser-disable-u2f")
124 PARSE_YESNO(CFG_BROWSER_ALLOW_DRM, "browser-allow-drm") 125 PARSE_YESNO(CFG_BROWSER_ALLOW_DRM, "browser-allow-drm")
126 PARSE_YESNO(CFG_ALLOW_TRAY, "allow-tray")
125#undef PARSE_YESNO 127#undef PARSE_YESNO
126 128
127 // netfilter 129 // netfilter
diff --git a/src/firejail/chroot.c b/src/firejail/chroot.c
index 37ec22117..9425638ea 100644
--- a/src/firejail/chroot.c
+++ b/src/firejail/chroot.c
@@ -86,7 +86,7 @@ static void update_file(int parentfd, const char *relpath) {
86 if (arg_debug) 86 if (arg_debug)
87 printf("Updating chroot /%s\n", relpath); 87 printf("Updating chroot /%s\n", relpath);
88 unlinkat(parentfd, relpath, 0); 88 unlinkat(parentfd, relpath, 0);
89 int out = openat(parentfd, relpath, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, S_IRUSR | S_IWRITE | S_IRGRP | S_IROTH); 89 int out = openat(parentfd, relpath, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
90 if (out == -1) { 90 if (out == -1) {
91 close(in); 91 close(in);
92 goto errout; 92 goto errout;
diff --git a/src/firejail/env.c b/src/firejail/env.c
index f5e9dd980..4c0d729a1 100644
--- a/src/firejail/env.c
+++ b/src/firejail/env.c
@@ -22,6 +22,7 @@
22#include <sys/stat.h> 22#include <sys/stat.h>
23#include <unistd.h> 23#include <unistd.h>
24#include <dirent.h> 24#include <dirent.h>
25#include <limits.h>
25 26
26typedef struct env_t { 27typedef struct env_t {
27 struct env_t *next; 28 struct env_t *next;
@@ -262,7 +263,7 @@ static const char * const env_whitelist[] = {
262 "LANG", 263 "LANG",
263 "LANGUAGE", 264 "LANGUAGE",
264 "LC_MESSAGES", 265 "LC_MESSAGES",
265 "PATH", 266 // "PATH",
266 "DISPLAY" // required by X11 267 "DISPLAY" // required by X11
267}; 268};
268 269
@@ -311,6 +312,10 @@ void env_apply_whitelist(void) {
311 errExit("clearenv"); 312 errExit("clearenv");
312 313
313 env_apply_list(env_whitelist, ARRAY_SIZE(env_whitelist)); 314 env_apply_list(env_whitelist, ARRAY_SIZE(env_whitelist));
315
316 // hardcoding PATH
317 if (setenv("PATH", "/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin", 1) < 0)
318 errExit("setenv");
314} 319}
315 320
316// Filter env variables for a sbox app 321// Filter env variables for a sbox app
diff --git a/src/firejail/firejail.h b/src/firejail/firejail.h
index 2a7d88575..ec789cd63 100644
--- a/src/firejail/firejail.h
+++ b/src/firejail/firejail.h
@@ -22,6 +22,7 @@
22#include "../include/common.h" 22#include "../include/common.h"
23#include "../include/euid_common.h" 23#include "../include/euid_common.h"
24#include "../include/rundefs.h" 24#include "../include/rundefs.h"
25#include <linux/limits.h> // Note: Plain limits.h may break ARG_MAX (see #4583)
25#include <stdarg.h> 26#include <stdarg.h>
26#include <sys/stat.h> 27#include <sys/stat.h>
27 28
@@ -433,13 +434,15 @@ void fs_proc_sys_dev_boot(void);
433void disable_config(void); 434void disable_config(void);
434// build a basic read-only filesystem 435// build a basic read-only filesystem
435void fs_basic_fs(void); 436void fs_basic_fs(void);
436// mount overlayfs on top of / directory
437char *fs_check_overlay_dir(const char *subdirname, int allow_reuse);
438void fs_overlayfs(void);
439void fs_private_tmp(void); 437void fs_private_tmp(void);
440void fs_private_cache(void); 438void fs_private_cache(void);
441void fs_mnt(const int enforce); 439void fs_mnt(const int enforce);
442 440
441// fs_overlayfs.c
442char *fs_check_overlay_dir(const char *subdirname, int allow_reuse);
443void fs_overlayfs(void);
444int remove_overlay_directory(void);
445
443// chroot.c 446// chroot.c
444// chroot into an existing directory; mount existing /dev and update /etc/resolv.conf 447// chroot into an existing directory; mount existing /dev and update /etc/resolv.conf
445void fs_check_chroot_dir(void); 448void fs_check_chroot_dir(void);
@@ -516,6 +519,7 @@ void touch_file_as_user(const char *fname, mode_t mode);
516int is_dir(const char *fname); 519int is_dir(const char *fname);
517int is_link(const char *fname); 520int is_link(const char *fname);
518char *realpath_as_user(const char *fname); 521char *realpath_as_user(const char *fname);
522ssize_t readlink_as_user(const char *fname, char *buf, size_t sz);
519int stat_as_user(const char *fname, struct stat *s); 523int stat_as_user(const char *fname, struct stat *s);
520int lstat_as_user(const char *fname, struct stat *s); 524int lstat_as_user(const char *fname, struct stat *s);
521void trim_trailing_slash_or_dot(char *path); 525void trim_trailing_slash_or_dot(char *path);
@@ -529,8 +533,7 @@ void update_map(char *mapping, char *map_file);
529void wait_for_other(int fd); 533void wait_for_other(int fd);
530void notify_other(int fd); 534void notify_other(int fd);
531uid_t pid_get_uid(pid_t pid); 535uid_t pid_get_uid(pid_t pid);
532uid_t get_group_id(const char *group); 536gid_t get_group_id(const char *groupname);
533int remove_overlay_directory(void);
534void flush_stdin(void); 537void flush_stdin(void);
535int create_empty_dir_as_user(const char *dir, mode_t mode); 538int create_empty_dir_as_user(const char *dir, mode_t mode);
536void create_empty_dir_as_root(const char *dir, mode_t mode); 539void create_empty_dir_as_root(const char *dir, mode_t mode);
@@ -563,8 +566,8 @@ typedef struct {
563 566
564// mountinfo.c 567// mountinfo.c
565MountData *get_last_mount(void); 568MountData *get_last_mount(void);
566int get_mount_id(const char *path); 569int get_mount_id(int fd);
567char **build_mount_array(const int mount_id, const char *path); 570char **build_mount_array(const int mountid, const char *path);
568 571
569// fs_var.c 572// fs_var.c
570void fs_var_log(void); // mounting /var/log 573void fs_var_log(void); // mounting /var/log
@@ -621,7 +624,8 @@ void caps_print_filter(pid_t pid) __attribute__((noreturn));
621void caps_drop_dac_override(void); 624void caps_drop_dac_override(void);
622 625
623// fs_trace.c 626// fs_trace.c
624void fs_trace_preload(void); 627void fs_trace_touch_preload(void);
628void fs_trace_touch_or_store_preload(void);
625void fs_tracefile(void); 629void fs_tracefile(void);
626void fs_trace(void); 630void fs_trace(void);
627 631
@@ -644,7 +648,8 @@ void cpu_print_filter(pid_t pid) __attribute__((noreturn));
644// cgroup.c 648// cgroup.c
645void save_cgroup(void); 649void save_cgroup(void);
646void load_cgroup(const char *fname); 650void load_cgroup(const char *fname);
647void set_cgroup(const char *path); 651void check_cgroup_file(const char *fname);
652void set_cgroup(const char *fname, pid_t pid);
648 653
649// output.c 654// output.c
650void check_output(int argc, char **argv); 655void check_output(int argc, char **argv);
@@ -704,6 +709,8 @@ void pulseaudio_disable(void);
704void fs_private_bin_list(void); 709void fs_private_bin_list(void);
705 710
706// fs_lib.c 711// fs_lib.c
712int is_firejail_link(const char *fname);
713char *find_in_path(const char *program);
707void fs_private_lib(void); 714void fs_private_lib(void);
708 715
709// protocol.c 716// protocol.c
@@ -801,6 +808,7 @@ enum {
801 CFG_NAME_CHANGE, 808 CFG_NAME_CHANGE,
802 CFG_SECCOMP_ERROR_ACTION, 809 CFG_SECCOMP_ERROR_ACTION,
803 // CFG_FILE_COPY_LIMIT - file copy limit handled using setenv/getenv 810 // CFG_FILE_COPY_LIMIT - file copy limit handled using setenv/getenv
811 CFG_ALLOW_TRAY,
804 CFG_MAX // this should always be the last entry 812 CFG_MAX // this should always be the last entry
805}; 813};
806extern char *xephyr_screen; 814extern char *xephyr_screen;
diff --git a/src/firejail/fs.c b/src/firejail/fs.c
index 5ac2da164..9c1b889ed 100644
--- a/src/firejail/fs.c
+++ b/src/firejail/fs.c
@@ -20,10 +20,7 @@
20#include "firejail.h" 20#include "firejail.h"
21#include "../include/gcov_wrapper.h" 21#include "../include/gcov_wrapper.h"
22#include <sys/mount.h> 22#include <sys/mount.h>
23#include <sys/stat.h>
24#include <sys/statvfs.h> 23#include <sys/statvfs.h>
25#include <sys/wait.h>
26#include <linux/limits.h>
27#include <fnmatch.h> 24#include <fnmatch.h>
28#include <glob.h> 25#include <glob.h>
29#include <dirent.h> 26#include <dirent.h>
@@ -35,7 +32,7 @@
35#endif 32#endif
36 33
37#define MAX_BUF 4096 34#define MAX_BUF 4096
38#define EMPTY_STRING ("") 35
39// check noblacklist statements not matched by a proper blacklist in disable-*.inc files 36// check noblacklist statements not matched by a proper blacklist in disable-*.inc files
40//#define TEST_NO_BLACKLIST_MATCHING 37//#define TEST_NO_BLACKLIST_MATCHING
41 38
@@ -108,7 +105,7 @@ static void disable_file(OPERATION op, const char *filename) {
108 } 105 }
109 106
110 // check for firejail executable 107 // check for firejail executable
111 // we migth have a file found in ${PATH} pointing to /usr/bin/firejail 108 // we might have a file found in ${PATH} pointing to /usr/bin/firejail
112 // blacklisting it here will end up breaking situations like user clicks on a link in Thunderbird 109 // blacklisting it here will end up breaking situations like user clicks on a link in Thunderbird
113 // and expects Firefox to open in the same sandbox 110 // and expects Firefox to open in the same sandbox
114 if (strcmp(BINDIR "/firejail", fname) == 0) { 111 if (strcmp(BINDIR "/firejail", fname) == 0) {
@@ -200,8 +197,6 @@ static void disable_file(OPERATION op, const char *filename) {
200 } 197 }
201 198
202 fs_tmpfs(fname, uid); 199 fs_tmpfs(fname, uid);
203 EUID_USER(); // fs_tmpfs returns with EUID 0
204
205 selinux_relabel_path(fname, fname); 200 selinux_relabel_path(fname, fname);
206 } 201 }
207 else 202 else
@@ -282,6 +277,8 @@ static void globbing(OPERATION op, const char *pattern, const char *noblacklist[
282 277
283// blacklist files or directories by mounting empty files on top of them 278// blacklist files or directories by mounting empty files on top of them
284void fs_blacklist(void) { 279void fs_blacklist(void) {
280 EUID_ASSERT();
281
285 ProfileEntry *entry = cfg.profile; 282 ProfileEntry *entry = cfg.profile;
286 if (!entry) 283 if (!entry)
287 return; 284 return;
@@ -293,7 +290,6 @@ void fs_blacklist(void) {
293 if (noblacklist == NULL) 290 if (noblacklist == NULL)
294 errExit("failed allocating memory for noblacklist entries"); 291 errExit("failed allocating memory for noblacklist entries");
295 292
296 EUID_USER();
297 while (entry) { 293 while (entry) {
298 OPERATION op = OPERATION_MAX; 294 OPERATION op = OPERATION_MAX;
299 char *ptr; 295 char *ptr;
@@ -469,8 +465,6 @@ void fs_blacklist(void) {
469 for (i = 0; i < noblacklist_c; i++) 465 for (i = 0; i < noblacklist_c; i++)
470 free(noblacklist[i]); 466 free(noblacklist[i]);
471 free(noblacklist); 467 free(noblacklist);
472
473 EUID_ROOT();
474} 468}
475 469
476//*********************************************** 470//***********************************************
@@ -479,7 +473,7 @@ void fs_blacklist(void) {
479 473
480// mount a writable tmpfs on directory; requires a resolved path 474// mount a writable tmpfs on directory; requires a resolved path
481void fs_tmpfs(const char *dir, unsigned check_owner) { 475void fs_tmpfs(const char *dir, unsigned check_owner) {
482 EUID_USER(); 476 EUID_ASSERT();
483 assert(dir); 477 assert(dir);
484 if (arg_debug) 478 if (arg_debug)
485 printf("Mounting tmpfs on %s, check owner: %s\n", dir, (check_owner)? "yes": "no"); 479 printf("Mounting tmpfs on %s, check owner: %s\n", dir, (check_owner)? "yes": "no");
@@ -504,12 +498,13 @@ void fs_tmpfs(const char *dir, unsigned check_owner) {
504 errExit("fstatvfs"); 498 errExit("fstatvfs");
505 unsigned long flags = buf.f_flag & ~(MS_RDONLY|MS_BIND|MS_REMOUNT); 499 unsigned long flags = buf.f_flag & ~(MS_RDONLY|MS_BIND|MS_REMOUNT);
506 // mount via the symbolic link in /proc/self/fd 500 // mount via the symbolic link in /proc/self/fd
507 EUID_ROOT();
508 char *proc; 501 char *proc;
509 if (asprintf(&proc, "/proc/self/fd/%d", fd) == -1) 502 if (asprintf(&proc, "/proc/self/fd/%d", fd) == -1)
510 errExit("asprintf"); 503 errExit("asprintf");
504 EUID_ROOT();
511 if (mount("tmpfs", proc, "tmpfs", flags|MS_NOSUID|MS_NODEV, options) < 0) 505 if (mount("tmpfs", proc, "tmpfs", flags|MS_NOSUID|MS_NODEV, options) < 0)
512 errExit("mounting tmpfs"); 506 errExit("mounting tmpfs");
507 EUID_USER();
513 // check the last mount operation 508 // check the last mount operation
514 MountData *mdata = get_last_mount(); 509 MountData *mdata = get_last_mount();
515 if (strcmp(mdata->fstype, "tmpfs") != 0 || strcmp(mdata->dir, dir) != 0) 510 if (strcmp(mdata->fstype, "tmpfs") != 0 || strcmp(mdata->dir, dir) != 0)
@@ -635,40 +630,37 @@ out:
635} 630}
636 631
637// remount recursively; requires a resolved path 632// remount recursively; requires a resolved path
638static void fs_remount_rec(const char *dir, OPERATION op) { 633static void fs_remount_rec(const char *path, OPERATION op) {
639 EUID_ASSERT(); 634 EUID_ASSERT();
640 assert(dir); 635 assert(op < OPERATION_MAX);
636 assert(path);
641 637
642 struct stat s; 638 // no need to search /proc/self/mountinfo for submounts if not a directory
643 if (stat(dir, &s) != 0) 639 int fd = open(path, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
644 return; 640 if (fd < 0) {
645 if (!S_ISDIR(s.st_mode)) { 641 fs_remount_simple(path, op);
646 // no need to search in /proc/self/mountinfo for submounts if not a directory
647 fs_remount_simple(dir, op);
648 return; 642 return;
649 } 643 }
650 // get mount point of the directory 644
651 int mountid = get_mount_id(dir); 645 // get mount id of the directory
652 if (mountid == -1) 646 int mountid = get_mount_id(fd);
653 return; 647 close(fd);
654 if (mountid == -2) { 648 if (mountid < 0) {
655 // falling back to a simple remount on old kernels 649 // falling back to a simple remount
656 static int mount_warning = 0; 650 fwarning("%s %s not applied recursively\n", opstr[op], path);
657 if (!mount_warning) { 651 fs_remount_simple(path, op);
658 fwarning("read-only, read-write and noexec options are not applied recursively\n");
659 mount_warning = 1;
660 }
661 fs_remount_simple(dir, op);
662 return; 652 return;
663 } 653 }
654
664 // build array with all mount points that need to get remounted 655 // build array with all mount points that need to get remounted
665 char **arr = build_mount_array(mountid, dir); 656 char **arr = build_mount_array(mountid, path);
666 assert(arr); 657 if (!arr)
658 return;
667 // remount 659 // remount
668 char **tmp = arr; 660 int i;
669 while (*tmp) { 661 for (i = 0; arr[i]; i++) {
670 fs_remount_simple(*tmp, op); 662 fs_remount_simple(arr[i], op);
671 free(*tmp++); 663 free(arr[i]);
672 } 664 }
673 free(arr); 665 free(arr);
674} 666}
@@ -903,367 +895,6 @@ void fs_basic_fs(void) {
903} 895}
904 896
905 897
906
907#ifdef HAVE_OVERLAYFS
908char *fs_check_overlay_dir(const char *subdirname, int allow_reuse) {
909 assert(subdirname);
910 EUID_ASSERT();
911 struct stat s;
912 char *dirname;
913
914 if (asprintf(&dirname, "%s/.firejail", cfg.homedir) == -1)
915 errExit("asprintf");
916 // check if ~/.firejail already exists
917 if (lstat(dirname, &s) == 0) {
918 if (!S_ISDIR(s.st_mode)) {
919 if (S_ISLNK(s.st_mode))
920 fprintf(stderr, "Error: %s is a symbolic link\n", dirname);
921 else
922 fprintf(stderr, "Error: %s is not a directory\n", dirname);
923 exit(1);
924 }
925 if (s.st_uid != getuid()) {
926 fprintf(stderr, "Error: %s is not owned by the current user\n", dirname);
927 exit(1);
928 }
929 }
930 else {
931 // create ~/.firejail directory
932 create_empty_dir_as_user(dirname, 0700);
933 if (stat(dirname, &s) == -1) {
934 fprintf(stderr, "Error: cannot create directory %s\n", dirname);
935 exit(1);
936 }
937 }
938 free(dirname);
939
940 // check overlay directory
941 if (asprintf(&dirname, "%s/.firejail/%s", cfg.homedir, subdirname) == -1)
942 errExit("asprintf");
943 if (lstat(dirname, &s) == 0) {
944 if (!S_ISDIR(s.st_mode)) {
945 if (S_ISLNK(s.st_mode))
946 fprintf(stderr, "Error: %s is a symbolic link\n", dirname);
947 else
948 fprintf(stderr, "Error: %s is not a directory\n", dirname);
949 exit(1);
950 }
951 if (s.st_uid != 0) {
952 fprintf(stderr, "Error: overlay directory %s is not owned by the root user\n", dirname);
953 exit(1);
954 }
955 if (allow_reuse == 0) {
956 fprintf(stderr, "Error: overlay directory exists, but reuse is not allowed\n");
957 exit(1);
958 }
959 }
960
961 return dirname;
962}
963
964
965
966// mount overlayfs on top of / directory
967// mounting an overlay and chrooting into it:
968//
969// Old Ubuntu kernel
970// # cd ~
971// # mkdir -p overlay/root
972// # mkdir -p overlay/diff
973// # mount -t overlayfs -o lowerdir=/,upperdir=/root/overlay/diff overlayfs /root/overlay/root
974// # chroot /root/overlay/root
975// to shutdown, first exit the chroot and then unmount the overlay
976// # exit
977// # umount /root/overlay/root
978//
979// Kernels 3.18+
980// # cd ~
981// # mkdir -p overlay/root
982// # mkdir -p overlay/diff
983// # mkdir -p overlay/work
984// # mount -t overlay -o lowerdir=/,upperdir=/root/overlay/diff,workdir=/root/overlay/work overlay /root/overlay/root
985// # cat /etc/mtab | grep overlay
986// /root/overlay /root/overlay/root overlay rw,relatime,lowerdir=/,upperdir=/root/overlay/diff,workdir=/root/overlay/work 0 0
987// # chroot /root/overlay/root
988// to shutdown, first exit the chroot and then unmount the overlay
989// # exit
990// # umount /root/overlay/root
991
992
993// to do: fix the code below; also, it might work without /dev, but consider keeping /dev/shm; add locking mechanism for overlay-clean
994#include <sys/utsname.h>
995void fs_overlayfs(void) {
996 struct stat s;
997
998 // check kernel version
999 struct utsname u;
1000 int rv = uname(&u);
1001 if (rv != 0)
1002 errExit("uname");
1003 int major;
1004 int minor;
1005 if (2 != sscanf(u.release, "%d.%d", &major, &minor)) {
1006 fprintf(stderr, "Error: cannot extract Linux kernel version: %s\n", u.version);
1007 exit(1);
1008 }
1009
1010 if (arg_debug)
1011 printf("Linux kernel version %d.%d\n", major, minor);
1012 int oldkernel = 0;
1013 if (major < 3) {
1014 fprintf(stderr, "Error: minimum kernel version required 3.x\n");
1015 exit(1);
1016 }
1017 if (major == 3 && minor < 18)
1018 oldkernel = 1;
1019
1020 // mounting an overlayfs on top of / seems to be broken for kernels > 4.19
1021 // we disable overlayfs for now, pending fixing
1022 if (major >= 4 &&minor >= 19) {
1023 fprintf(stderr, "Error: OverlayFS disabled for Linux kernels 4.19 and newer, pending fixing.\n");
1024 exit(1);
1025 }
1026
1027 char *oroot = RUN_OVERLAY_ROOT;
1028 mkdir_attr(oroot, 0755, 0, 0);
1029
1030 // set base for working and diff directories
1031 char *basedir = RUN_MNT_DIR;
1032 int basefd = -1;
1033
1034 if (arg_overlay_keep) {
1035 basedir = cfg.overlay_dir;
1036 assert(basedir);
1037 // get a file descriptor for ~/.firejail, fails if there is any symlink
1038 char *firejail;
1039 if (asprintf(&firejail, "%s/.firejail", cfg.homedir) == -1)
1040 errExit("asprintf");
1041 int fd = safer_openat(-1, firejail, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
1042 if (fd == -1)
1043 errExit("safer_openat");
1044 free(firejail);
1045 // create basedir if it doesn't exist
1046 // the new directory will be owned by root
1047 const char *dirname = gnu_basename(basedir);
1048 if (mkdirat(fd, dirname, 0755) == -1 && errno != EEXIST) {
1049 perror("mkdir");
1050 fprintf(stderr, "Error: cannot create overlay directory %s\n", basedir);
1051 exit(1);
1052 }
1053 // open basedir
1054 basefd = openat(fd, dirname, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
1055 close(fd);
1056 }
1057 else {
1058 basefd = open(basedir, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
1059 }
1060 if (basefd == -1) {
1061 perror("open");
1062 fprintf(stderr, "Error: cannot open overlay directory %s\n", basedir);
1063 exit(1);
1064 }
1065
1066 // confirm once more base is owned by root
1067 if (fstat(basefd, &s) == -1)
1068 errExit("fstat");
1069 if (s.st_uid != 0) {
1070 fprintf(stderr, "Error: overlay directory %s is not owned by the root user\n", basedir);
1071 exit(1);
1072 }
1073 // confirm permissions of base are 0755
1074 if (((S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) & s.st_mode) != (S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)) {
1075 fprintf(stderr, "Error: invalid permissions on overlay directory %s\n", basedir);
1076 exit(1);
1077 }
1078
1079 // create diff and work directories inside base
1080 // no need to check arg_overlay_reuse
1081 char *odiff;
1082 if (asprintf(&odiff, "%s/odiff", basedir) == -1)
1083 errExit("asprintf");
1084 // the new directory will be owned by root
1085 if (mkdirat(basefd, "odiff", 0755) == -1 && errno != EEXIST) {
1086 perror("mkdir");
1087 fprintf(stderr, "Error: cannot create overlay directory %s\n", odiff);
1088 exit(1);
1089 }
1090 ASSERT_PERMS(odiff, 0, 0, 0755);
1091
1092 char *owork;
1093 if (asprintf(&owork, "%s/owork", basedir) == -1)
1094 errExit("asprintf");
1095 // the new directory will be owned by root
1096 if (mkdirat(basefd, "owork", 0755) == -1 && errno != EEXIST) {
1097 perror("mkdir");
1098 fprintf(stderr, "Error: cannot create overlay directory %s\n", owork);
1099 exit(1);
1100 }
1101 ASSERT_PERMS(owork, 0, 0, 0755);
1102
1103 // mount overlayfs
1104 if (arg_debug)
1105 printf("Mounting OverlayFS\n");
1106 char *option;
1107 if (oldkernel) { // old Ubuntu/OpenSUSE kernels
1108 if (arg_overlay_keep) {
1109 fprintf(stderr, "Error: option --overlay= not available for kernels older than 3.18\n");
1110 exit(1);
1111 }
1112 if (asprintf(&option, "lowerdir=/,upperdir=%s", odiff) == -1)
1113 errExit("asprintf");
1114 if (mount("overlayfs", oroot, "overlayfs", MS_MGC_VAL, option) < 0)
1115 errExit("mounting overlayfs");
1116 }
1117 else { // kernel 3.18 or newer
1118 if (asprintf(&option, "lowerdir=/,upperdir=%s,workdir=%s", odiff, owork) == -1)
1119 errExit("asprintf");
1120 if (mount("overlay", oroot, "overlay", MS_MGC_VAL, option) < 0) {
1121 fprintf(stderr, "Debug: running on kernel version %d.%d\n", major, minor);
1122 errExit("mounting overlayfs");
1123 }
1124
1125 //***************************
1126 // issue #263 start code
1127 // My setup has a separate mount point for /home. When the overlay is mounted,
1128 // the overlay does not contain the original /home contents.
1129 // I added code to create a second overlay for /home if the overlay home dir is empty and this seems to work
1130 // @dshmgh, Jan 2016
1131 {
1132 char *overlayhome;
1133 struct stat s;
1134 char *hroot;
1135 char *hdiff;
1136 char *hwork;
1137
1138 // dons add debug
1139 if (arg_debug) printf ("DEBUG: chroot dirs are oroot %s odiff %s owork %s\n",oroot,odiff,owork);
1140
1141 // BEFORE NEXT, WE NEED TO TEST IF /home has any contents or do we need to mount it?
1142 // must create var for oroot/cfg.homedir
1143 if (asprintf(&overlayhome, "%s%s", oroot, cfg.homedir) == -1)
1144 errExit("asprintf");
1145 if (arg_debug) printf ("DEBUG: overlayhome var holds ##%s##\n", overlayhome);
1146
1147 // if no homedir in overlay -- create another overlay for /home
1148 if (stat(cfg.homedir, &s) == 0 && stat(overlayhome, &s) == -1) {
1149
1150 // no need to check arg_overlay_reuse
1151 if (asprintf(&hdiff, "%s/hdiff", basedir) == -1)
1152 errExit("asprintf");
1153 // the new directory will be owned by root
1154 if (mkdirat(basefd, "hdiff", 0755) == -1 && errno != EEXIST) {
1155 perror("mkdir");
1156 fprintf(stderr, "Error: cannot create overlay directory %s\n", hdiff);
1157 exit(1);
1158 }
1159 ASSERT_PERMS(hdiff, 0, 0, 0755);
1160
1161 // no need to check arg_overlay_reuse
1162 if (asprintf(&hwork, "%s/hwork", basedir) == -1)
1163 errExit("asprintf");
1164 // the new directory will be owned by root
1165 if (mkdirat(basefd, "hwork", 0755) == -1 && errno != EEXIST) {
1166 perror("mkdir");
1167 fprintf(stderr, "Error: cannot create overlay directory %s\n", hwork);
1168 exit(1);
1169 }
1170 ASSERT_PERMS(hwork, 0, 0, 0755);
1171
1172 // no homedir in overlay so now mount another overlay for /home
1173 if (asprintf(&hroot, "%s/home", oroot) == -1)
1174 errExit("asprintf");
1175 if (asprintf(&option, "lowerdir=/home,upperdir=%s,workdir=%s", hdiff, hwork) == -1)
1176 errExit("asprintf");
1177 if (mount("overlay", hroot, "overlay", MS_MGC_VAL, option) < 0)
1178 errExit("mounting overlayfs for mounted home directory");
1179
1180 printf("OverlayFS for /home configured in %s directory\n", basedir);
1181 free(hroot);
1182 free(hdiff);
1183 free(hwork);
1184
1185 } // stat(overlayhome)
1186 free(overlayhome);
1187 }
1188 // issue #263 end code
1189 //***************************
1190 }
1191 fmessage("OverlayFS configured in %s directory\n", basedir);
1192 close(basefd);
1193
1194 // /dev, /run and /tmp are not covered by the overlay
1195 // mount-bind dev directory
1196 if (arg_debug)
1197 printf("Mounting /dev\n");
1198 char *dev;
1199 if (asprintf(&dev, "%s/dev", oroot) == -1)
1200 errExit("asprintf");
1201 if (mount("/dev", dev, NULL, MS_BIND|MS_REC, NULL) < 0)
1202 errExit("mounting /dev");
1203 fs_logger("whitelist /dev");
1204
1205 // mount-bind run directory
1206 if (arg_debug)
1207 printf("Mounting /run\n");
1208 char *run;
1209 if (asprintf(&run, "%s/run", oroot) == -1)
1210 errExit("asprintf");
1211 if (mount("/run", run, NULL, MS_BIND|MS_REC, NULL) < 0)
1212 errExit("mounting /run");
1213 fs_logger("whitelist /run");
1214
1215 // mount-bind tmp directory
1216 if (arg_debug)
1217 printf("Mounting /tmp\n");
1218 char *tmp;
1219 if (asprintf(&tmp, "%s/tmp", oroot) == -1)
1220 errExit("asprintf");
1221 if (mount("/tmp", tmp, NULL, MS_BIND|MS_REC, NULL) < 0)
1222 errExit("mounting /tmp");
1223 fs_logger("whitelist /tmp");
1224
1225 // chroot in the new filesystem
1226 __gcov_flush();
1227
1228 if (chroot(oroot) == -1)
1229 errExit("chroot");
1230
1231 // mount a new proc filesystem
1232 if (arg_debug)
1233 printf("Mounting /proc filesystem representing the PID namespace\n");
1234 if (mount("proc", "/proc", "proc", MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_REC, NULL) < 0)
1235 errExit("mounting /proc");
1236
1237 // update /var directory in order to support multiple sandboxes running on the same root directory
1238// if (!arg_private_dev)
1239// fs_dev_shm();
1240 fs_var_lock();
1241 if (!arg_keep_var_tmp)
1242 fs_var_tmp();
1243 if (!arg_writable_var_log)
1244 fs_var_log();
1245 fs_var_lib();
1246 fs_var_cache();
1247 fs_var_utmp();
1248 fs_machineid();
1249
1250 // don't leak user information
1251 restrict_users();
1252
1253 // when starting as root, firejail config is not disabled;
1254 if (getuid() != 0)
1255 disable_config();
1256
1257 // cleanup and exit
1258 free(option);
1259 free(odiff);
1260 free(owork);
1261 free(dev);
1262 free(run);
1263 free(tmp);
1264}
1265#endif
1266
1267// this function is called from sandbox.c before blacklist/whitelist functions 898// this function is called from sandbox.c before blacklist/whitelist functions
1268void fs_private_tmp(void) { 899void fs_private_tmp(void) {
1269 EUID_ASSERT(); 900 EUID_ASSERT();
@@ -1287,7 +918,6 @@ void fs_private_tmp(void) {
1287 918
1288 // whitelist x11 directory 919 // whitelist x11 directory
1289 profile_add("whitelist /tmp/.X11-unix"); 920 profile_add("whitelist /tmp/.X11-unix");
1290 // read-only x11 directory
1291 profile_add("read-only /tmp/.X11-unix"); 921 profile_add("read-only /tmp/.X11-unix");
1292 922
1293 // whitelist sndio directory 923 // whitelist sndio directory
diff --git a/src/firejail/fs_bin.c b/src/firejail/fs_bin.c
index 61398f12b..4c9dac0c2 100644
--- a/src/firejail/fs_bin.c
+++ b/src/firejail/fs_bin.c
@@ -41,9 +41,9 @@ static char *paths[] = {
41 41
42// return 1 if found, 0 if not found 42// return 1 if found, 0 if not found
43static char *check_dir_or_file(const char *name) { 43static char *check_dir_or_file(const char *name) {
44 EUID_ASSERT();
44 assert(name); 45 assert(name);
45 struct stat s; 46 struct stat s;
46 char *fname = NULL;
47 47
48 int i = 0; 48 int i = 0;
49 while (paths[i]) { 49 while (paths[i]) {
@@ -54,50 +54,34 @@ static char *check_dir_or_file(const char *name) {
54 } 54 }
55 55
56 // check file 56 // check file
57 char *fname;
57 if (asprintf(&fname, "%s/%s", paths[i], name) == -1) 58 if (asprintf(&fname, "%s/%s", paths[i], name) == -1)
58 errExit("asprintf"); 59 errExit("asprintf");
59 if (arg_debug) 60 if (arg_debug)
60 printf("Checking %s/%s\n", paths[i], name); 61 printf("Checking %s/%s\n", paths[i], name);
61 if (stat(fname, &s) == 0 && !S_ISDIR(s.st_mode)) { // do not allow directories 62 if (stat(fname, &s) == 0 &&
62 // check symlink to firejail executable in /usr/local/bin 63 !S_ISDIR(s.st_mode) && // do not allow directories
63 if (strcmp(paths[i], "/usr/local/bin") == 0 && is_link(fname)) { 64 !is_firejail_link(fname)) { // skip symlinks to firejail executable, as created by firecfg
64 /* coverity[toctou] */ 65 free(fname);
65 char *actual_path = realpath(fname, NULL);
66 if (actual_path) {
67 char *ptr = strstr(actual_path, "/firejail");
68 if (ptr && strlen(ptr) == strlen("/firejail")) {
69 if (arg_debug)
70 printf("firejail exec symlink detected\n");
71 free(actual_path);
72 free(fname);
73 fname = NULL;
74 i++;
75 continue;
76 }
77 free(actual_path);
78 }
79
80 }
81 break; // file found 66 break; // file found
82 } 67 }
83 68
84 free(fname); 69 free(fname);
85 fname = NULL;
86 i++; 70 i++;
87 } 71 }
88 72
89 if (!fname) { 73 if (!paths[i]) {
90 if (arg_debug) 74 if (arg_debug)
91 fwarning("file %s not found\n", name); 75 fwarning("file %s not found\n", name);
92 return NULL; 76 return NULL;
93 } 77 }
94 78
95 free(fname);
96 return paths[i]; 79 return paths[i];
97} 80}
98 81
99// return 1 if the file is in paths[] 82// return 1 if the file is in paths[]
100static int valid_full_path_file(const char *name) { 83static int valid_full_path_file(const char *name) {
84 EUID_ASSERT();
101 assert(name); 85 assert(name);
102 86
103 if (*name != '/') 87 if (*name != '/')
@@ -149,6 +133,7 @@ static void report_duplication(const char *fname) {
149} 133}
150 134
151static void duplicate(char *fname) { 135static void duplicate(char *fname) {
136 EUID_ASSERT();
152 assert(fname); 137 assert(fname);
153 138
154 if (*fname == '~' || strstr(fname, "..")) { 139 if (*fname == '~' || strstr(fname, "..")) {
@@ -220,6 +205,7 @@ static void duplicate(char *fname) {
220} 205}
221 206
222static void globbing(char *fname) { 207static void globbing(char *fname) {
208 EUID_ASSERT();
223 assert(fname); 209 assert(fname);
224 210
225 // go directly to duplicate() if no globbing char is present - see man 7 glob 211 // go directly to duplicate() if no globbing char is present - see man 7 glob
@@ -256,6 +242,9 @@ static void globbing(char *fname) {
256 // testing for GLOB_NOCHECK - no pattern matched returns the original pattern 242 // testing for GLOB_NOCHECK - no pattern matched returns the original pattern
257 if (strcmp(globbuf.gl_pathv[j], pattern) == 0) 243 if (strcmp(globbuf.gl_pathv[j], pattern) == 0)
258 continue; 244 continue;
245 // skip symlinks to firejail executable, as created by firecfg
246 if (is_firejail_link(globbuf.gl_pathv[j]))
247 continue;
259 248
260 duplicate(globbuf.gl_pathv[j]); 249 duplicate(globbuf.gl_pathv[j]);
261 } 250 }
@@ -267,6 +256,7 @@ static void globbing(char *fname) {
267} 256}
268 257
269void fs_private_bin_list(void) { 258void fs_private_bin_list(void) {
259 EUID_ASSERT();
270 char *private_list = cfg.bin_private_keep; 260 char *private_list = cfg.bin_private_keep;
271 assert(private_list); 261 assert(private_list);
272 262
@@ -274,7 +264,9 @@ void fs_private_bin_list(void) {
274 timetrace_start(); 264 timetrace_start();
275 265
276 // create /run/firejail/mnt/bin directory 266 // create /run/firejail/mnt/bin directory
267 EUID_ROOT();
277 mkdir_attr(RUN_BIN_DIR, 0755, 0, 0); 268 mkdir_attr(RUN_BIN_DIR, 0755, 0, 0);
269 EUID_USER();
278 270
279 if (arg_debug) 271 if (arg_debug)
280 printf("Copying files in the new bin directory\n"); 272 printf("Copying files in the new bin directory\n");
@@ -293,9 +285,9 @@ void fs_private_bin_list(void) {
293 while ((ptr = strtok(NULL, ",")) != NULL) 285 while ((ptr = strtok(NULL, ",")) != NULL)
294 globbing(ptr); 286 globbing(ptr);
295 free(dlist); 287 free(dlist);
296 fs_logger_print();
297 288
298 // mount-bind 289 // mount-bind
290 EUID_ROOT();
299 int i = 0; 291 int i = 0;
300 while (paths[i]) { 292 while (paths[i]) {
301 struct stat s; 293 struct stat s;
@@ -309,6 +301,9 @@ void fs_private_bin_list(void) {
309 } 301 }
310 i++; 302 i++;
311 } 303 }
304 fs_logger_print();
305 EUID_USER();
306
312 selinux_relabel_path(RUN_BIN_DIR, "/bin"); 307 selinux_relabel_path(RUN_BIN_DIR, "/bin");
313 fmessage("%d %s installed in %0.2f ms\n", prog_cnt, (prog_cnt == 1)? "program": "programs", timetrace_end()); 308 fmessage("%d %s installed in %0.2f ms\n", prog_cnt, (prog_cnt == 1)? "program": "programs", timetrace_end());
314} 309}
diff --git a/src/firejail/fs_dev.c b/src/firejail/fs_dev.c
index 8cc3ecc62..694d0a379 100644
--- a/src/firejail/fs_dev.c
+++ b/src/firejail/fs_dev.c
@@ -20,7 +20,6 @@
20#include "firejail.h" 20#include "firejail.h"
21#include <sys/mount.h> 21#include <sys/mount.h>
22#include <sys/stat.h> 22#include <sys/stat.h>
23#include <linux/limits.h>
24#include <glob.h> 23#include <glob.h>
25#include <dirent.h> 24#include <dirent.h>
26#include <fcntl.h> 25#include <fcntl.h>
@@ -330,8 +329,10 @@ void fs_dev_disable_sound(void) {
330 } 329 }
331 330
332 // disable all jack sockets in /dev/shm 331 // disable all jack sockets in /dev/shm
332 EUID_USER();
333 glob_t globbuf; 333 glob_t globbuf;
334 int globerr = glob("/dev/shm/jack*", GLOB_NOSORT, NULL, &globbuf); 334 int globerr = glob("/dev/shm/jack*", GLOB_NOSORT, NULL, &globbuf);
335 EUID_ROOT();
335 if (globerr) 336 if (globerr)
336 return; 337 return;
337 338
diff --git a/src/firejail/fs_home.c b/src/firejail/fs_home.c
index 0ed476063..230e9186c 100644
--- a/src/firejail/fs_home.c
+++ b/src/firejail/fs_home.c
@@ -19,7 +19,6 @@
19*/ 19*/
20#include "firejail.h" 20#include "firejail.h"
21#include <sys/mount.h> 21#include <sys/mount.h>
22#include <linux/limits.h>
23#include <dirent.h> 22#include <dirent.h>
24#include <errno.h> 23#include <errno.h>
25#include <sys/stat.h> 24#include <sys/stat.h>
@@ -381,12 +380,14 @@ void fs_private(void) {
381 selinux_relabel_path("/home", "/home"); 380 selinux_relabel_path("/home", "/home");
382 fs_logger("tmpfs /home"); 381 fs_logger("tmpfs /home");
383 } 382 }
383 EUID_USER();
384 384
385 if (u != 0) { 385 if (u != 0) {
386 if (!arg_allusers && strncmp(homedir, "/home/", 6) == 0) { 386 if (!arg_allusers && strncmp(homedir, "/home/", 6) == 0) {
387 // create new empty /home/user directory 387 // create new empty /home/user directory
388 if (arg_debug) 388 if (arg_debug)
389 printf("Create a new user directory\n"); 389 printf("Create a new user directory\n");
390 EUID_ROOT();
390 if (mkdir(homedir, S_IRWXU) == -1) { 391 if (mkdir(homedir, S_IRWXU) == -1) {
391 if (mkpath_as_root(homedir) == -1) 392 if (mkpath_as_root(homedir) == -1)
392 errExit("mkpath"); 393 errExit("mkpath");
@@ -395,7 +396,7 @@ void fs_private(void) {
395 } 396 }
396 if (chown(homedir, u, g) < 0) 397 if (chown(homedir, u, g) < 0)
397 errExit("chown"); 398 errExit("chown");
398 399 EUID_USER();
399 fs_logger2("mkdir", homedir); 400 fs_logger2("mkdir", homedir);
400 fs_logger2("tmpfs", homedir); 401 fs_logger2("tmpfs", homedir);
401 } 402 }
@@ -406,7 +407,6 @@ void fs_private(void) {
406 407
407 selinux_relabel_path(homedir, homedir); 408 selinux_relabel_path(homedir, homedir);
408 } 409 }
409 EUID_USER();
410 410
411 skel(homedir); 411 skel(homedir);
412 if (xflag) 412 if (xflag)
@@ -564,12 +564,13 @@ void fs_private_home_list(void) {
564 int xflag = store_xauthority(); 564 int xflag = store_xauthority();
565 int aflag = store_asoundrc(); 565 int aflag = store_asoundrc();
566 566
567 // create /run/firejail/mnt/home directory
568 EUID_ROOT(); 567 EUID_ROOT();
568 // create /run/firejail/mnt/home directory
569 mkdir_attr(RUN_HOME_DIR, 0755, uid, gid); 569 mkdir_attr(RUN_HOME_DIR, 0755, uid, gid);
570 selinux_relabel_path(RUN_HOME_DIR, homedir); 570 selinux_relabel_path(RUN_HOME_DIR, homedir);
571 571
572 fs_logger_print(); // save the current log 572 // save the current log
573 fs_logger_print();
573 EUID_USER(); 574 EUID_USER();
574 575
575 // copy the list of files in the new home directory 576 // copy the list of files in the new home directory
diff --git a/src/firejail/fs_hostname.c b/src/firejail/fs_hostname.c
index 1a9a78ceb..8b7e94f51 100644
--- a/src/firejail/fs_hostname.c
+++ b/src/firejail/fs_hostname.c
@@ -20,7 +20,6 @@
20#include "firejail.h" 20#include "firejail.h"
21#include <sys/mount.h> 21#include <sys/mount.h>
22#include <sys/stat.h> 22#include <sys/stat.h>
23#include <linux/limits.h>
24#include <glob.h> 23#include <glob.h>
25#include <dirent.h> 24#include <dirent.h>
26#include <fcntl.h> 25#include <fcntl.h>
@@ -33,7 +32,7 @@ void fs_hostname(const char *hostname) {
33 if (arg_debug) 32 if (arg_debug)
34 printf("Creating a new /etc/hostname file\n"); 33 printf("Creating a new /etc/hostname file\n");
35 34
36 create_empty_file_as_root(RUN_HOSTNAME_FILE, S_IRUSR | S_IWRITE | S_IRGRP | S_IROTH); 35 create_empty_file_as_root(RUN_HOSTNAME_FILE, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
37 36
38 // bind-mount the file on top of /etc/hostname 37 // bind-mount the file on top of /etc/hostname
39 if (mount(RUN_HOSTNAME_FILE, "/etc/hostname", NULL, MS_BIND|MS_REC, NULL) < 0) 38 if (mount(RUN_HOSTNAME_FILE, "/etc/hostname", NULL, MS_BIND|MS_REC, NULL) < 0)
@@ -75,7 +74,7 @@ void fs_hostname(const char *hostname) {
75 } 74 }
76 fclose(fp1); 75 fclose(fp1);
77 // mode and owner 76 // mode and owner
78 SET_PERMS_STREAM(fp2, 0, 0, S_IRUSR | S_IWRITE | S_IRGRP | S_IROTH); 77 SET_PERMS_STREAM(fp2, 0, 0, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
79 fclose(fp2); 78 fclose(fp2);
80 79
81 // bind-mount the file on top of /etc/hostname 80 // bind-mount the file on top of /etc/hostname
@@ -93,10 +92,6 @@ char *fs_check_hosts_file(const char *fname) {
93 invalid_filename(fname, 0); // no globbing 92 invalid_filename(fname, 0); // no globbing
94 char *rv = expand_macros(fname); 93 char *rv = expand_macros(fname);
95 94
96 // no a link
97 if (is_link(rv))
98 goto errexit;
99
100 // the user has read access to the file 95 // the user has read access to the file
101 if (access(rv, R_OK)) 96 if (access(rv, R_OK))
102 goto errexit; 97 goto errexit;
@@ -119,9 +114,6 @@ void fs_mount_hosts_file(void) {
119 struct stat s; 114 struct stat s;
120 if (stat("/etc/hosts", &s) == -1) 115 if (stat("/etc/hosts", &s) == -1)
121 goto errexit; 116 goto errexit;
122 // not a link
123 if (is_link("/etc/hosts"))
124 goto errexit;
125 // owned by root 117 // owned by root
126 if (s.st_uid != 0) 118 if (s.st_uid != 0)
127 goto errexit; 119 goto errexit;
diff --git a/src/firejail/fs_lib.c b/src/firejail/fs_lib.c
index 9d7a17cf3..03af7f8fb 100644
--- a/src/firejail/fs_lib.c
+++ b/src/firejail/fs_lib.c
@@ -61,17 +61,31 @@ static int valid_full_path(const char *full_path) {
61 return 0; 61 return 0;
62} 62}
63 63
64// return 1 if symlink to firejail executable
65int is_firejail_link(const char *fname) {
66 EUID_ASSERT();
67
68 if (!is_link(fname))
69 return 0;
70
71 char *rp = realpath(fname, NULL);
72 if (!rp)
73 return 0;
74
75 int rv = 0;
76 const char *base = gnu_basename(rp);
77 if (strcmp(base, "firejail") == 0)
78 rv = 1;
79
80 free(rp);
81 return rv;
82}
83
64char *find_in_path(const char *program) { 84char *find_in_path(const char *program) {
65 EUID_ASSERT(); 85 EUID_ASSERT();
66 if (arg_debug) 86 if (arg_debug)
67 printf("Searching $PATH for %s\n", program); 87 printf("Searching $PATH for %s\n", program);
68 88
69 char self[MAXBUF];
70 ssize_t len = readlink("/proc/self/exe", self, MAXBUF - 1);
71 if (len < 0)
72 errExit("readlink");
73 self[len] = '\0';
74
75 const char *path = env_get("PATH"); 89 const char *path = env_get("PATH");
76 if (!path) 90 if (!path)
77 return NULL; 91 return NULL;
@@ -88,18 +102,12 @@ char *find_in_path(const char *program) {
88 if (arg_debug) 102 if (arg_debug)
89 printf("trying #%s#\n", fname); 103 printf("trying #%s#\n", fname);
90 struct stat s; 104 struct stat s;
91 if (stat(fname, &s) == 0) { 105 if (stat(fname, &s) == 0 &&
92 // but skip links created by firecfg 106 !is_firejail_link(fname)) { // skip links created by firecfg
93 char *rp = realpath(fname, NULL); 107 free(dup);
94 if (!rp) 108 return fname;
95 errExit("realpath");
96 if (strcmp(self, rp) != 0) {
97 free(rp);
98 free(dup);
99 return fname;
100 }
101 free(rp);
102 } 109 }
110
103 free(fname); 111 free(fname);
104 tok = strtok(NULL, ":"); 112 tok = strtok(NULL, ":");
105 } 113 }
@@ -195,6 +203,11 @@ void fslib_mount_libs(const char *full_path, unsigned user) {
195 assert(full_path); 203 assert(full_path);
196 // if library/executable does not exist or the user does not have read access to it 204 // if library/executable does not exist or the user does not have read access to it
197 // print a warning and exit the function. 205 // print a warning and exit the function.
206 if (access(full_path, F_OK)) {
207 if (arg_debug || arg_debug_private_lib)
208 printf("Cannot find %s, skipping...\n", full_path);
209 return;
210 }
198 if (user && access(full_path, R_OK)) { 211 if (user && access(full_path, R_OK)) {
199 if (arg_debug || arg_debug_private_lib) 212 if (arg_debug || arg_debug_private_lib)
200 printf("Cannot read %s, skipping...\n", full_path); 213 printf("Cannot read %s, skipping...\n", full_path);
diff --git a/src/firejail/fs_lib2.c b/src/firejail/fs_lib2.c
index c69bf7c98..a347b380c 100644
--- a/src/firejail/fs_lib2.c
+++ b/src/firejail/fs_lib2.c
@@ -143,7 +143,7 @@ static void fdir(void) {
143 NULL, 143 NULL,
144 }; 144 };
145 145
146 // need to parse as root user, unprivileged users have no read permission on executables 146 // need to parse as root user, unprivileged users have no read permission on some of these binaries
147 int i; 147 int i;
148 for (i = 0; fbin[i]; i++) 148 for (i = 0; fbin[i]; i++)
149 fslib_mount_libs(fbin[i], 0); 149 fslib_mount_libs(fbin[i], 0);
@@ -153,7 +153,9 @@ void fslib_install_firejail(void) {
153 timetrace_start(); 153 timetrace_start();
154 // bring in firejail executable libraries, in case we are redirected here 154 // bring in firejail executable libraries, in case we are redirected here
155 // by a firejail symlink from /usr/local/bin/firejail 155 // by a firejail symlink from /usr/local/bin/firejail
156 fslib_mount_libs(PATH_FIREJAIL, 1); // parse as user 156 // fldd might have no read permission on the firejail executable
157 // parse as root in order to support these setups
158 fslib_mount_libs(PATH_FIREJAIL, 0);
157 159
158 // bring in firejail directory 160 // bring in firejail directory
159 fdir(); 161 fdir();
diff --git a/src/firejail/fs_overlayfs.c b/src/firejail/fs_overlayfs.c
new file mode 100644
index 000000000..fe3761cb6
--- /dev/null
+++ b/src/firejail/fs_overlayfs.c
@@ -0,0 +1,470 @@
1/*
2 * Copyright (C) 2014-2021 Firejail Authors
3 *
4 * This file is part of firejail project
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*/
20
21#ifdef HAVE_OVERLAYFS
22#include "firejail.h"
23#include "../include/gcov_wrapper.h"
24#include <sys/mount.h>
25#include <sys/wait.h>
26#include <ftw.h>
27#include <errno.h>
28
29#include <fcntl.h>
30#ifndef O_PATH
31#define O_PATH 010000000
32#endif
33
34
35char *fs_check_overlay_dir(const char *subdirname, int allow_reuse) {
36 assert(subdirname);
37 EUID_ASSERT();
38 struct stat s;
39 char *dirname;
40
41 if (asprintf(&dirname, "%s/.firejail", cfg.homedir) == -1)
42 errExit("asprintf");
43 // check if ~/.firejail already exists
44 if (lstat(dirname, &s) == 0) {
45 if (!S_ISDIR(s.st_mode)) {
46 if (S_ISLNK(s.st_mode))
47 fprintf(stderr, "Error: %s is a symbolic link\n", dirname);
48 else
49 fprintf(stderr, "Error: %s is not a directory\n", dirname);
50 exit(1);
51 }
52 if (s.st_uid != getuid()) {
53 fprintf(stderr, "Error: %s is not owned by the current user\n", dirname);
54 exit(1);
55 }
56 }
57 else {
58 // create ~/.firejail directory
59 create_empty_dir_as_user(dirname, 0700);
60 if (stat(dirname, &s) == -1) {
61 fprintf(stderr, "Error: cannot create directory %s\n", dirname);
62 exit(1);
63 }
64 }
65 free(dirname);
66
67 // check overlay directory
68 if (asprintf(&dirname, "%s/.firejail/%s", cfg.homedir, subdirname) == -1)
69 errExit("asprintf");
70 if (lstat(dirname, &s) == 0) {
71 if (!S_ISDIR(s.st_mode)) {
72 if (S_ISLNK(s.st_mode))
73 fprintf(stderr, "Error: %s is a symbolic link\n", dirname);
74 else
75 fprintf(stderr, "Error: %s is not a directory\n", dirname);
76 exit(1);
77 }
78 if (s.st_uid != 0) {
79 fprintf(stderr, "Error: overlay directory %s is not owned by the root user\n", dirname);
80 exit(1);
81 }
82 if (allow_reuse == 0) {
83 fprintf(stderr, "Error: overlay directory exists, but reuse is not allowed\n");
84 exit(1);
85 }
86 }
87
88 return dirname;
89}
90
91
92// mount overlayfs on top of / directory
93// mounting an overlay and chrooting into it:
94//
95// Old Ubuntu kernel
96// # cd ~
97// # mkdir -p overlay/root
98// # mkdir -p overlay/diff
99// # mount -t overlayfs -o lowerdir=/,upperdir=/root/overlay/diff overlayfs /root/overlay/root
100// # chroot /root/overlay/root
101// to shutdown, first exit the chroot and then unmount the overlay
102// # exit
103// # umount /root/overlay/root
104//
105// Kernels 3.18+
106// # cd ~
107// # mkdir -p overlay/root
108// # mkdir -p overlay/diff
109// # mkdir -p overlay/work
110// # mount -t overlay -o lowerdir=/,upperdir=/root/overlay/diff,workdir=/root/overlay/work overlay /root/overlay/root
111// # cat /etc/mtab | grep overlay
112// /root/overlay /root/overlay/root overlay rw,relatime,lowerdir=/,upperdir=/root/overlay/diff,workdir=/root/overlay/work 0 0
113// # chroot /root/overlay/root
114// to shutdown, first exit the chroot and then unmount the overlay
115// # exit
116// # umount /root/overlay/root
117
118// to do: fix the code below
119#include <sys/utsname.h>
120void fs_overlayfs(void) {
121 struct stat s;
122
123 // check kernel version
124 struct utsname u;
125 int rv = uname(&u);
126 if (rv != 0)
127 errExit("uname");
128 int major;
129 int minor;
130 if (2 != sscanf(u.release, "%d.%d", &major, &minor)) {
131 fprintf(stderr, "Error: cannot extract Linux kernel version: %s\n", u.version);
132 exit(1);
133 }
134
135 if (arg_debug)
136 printf("Linux kernel version %d.%d\n", major, minor);
137 int oldkernel = 0;
138 if (major < 3) {
139 fprintf(stderr, "Error: minimum kernel version required 3.x\n");
140 exit(1);
141 }
142 if (major == 3 && minor < 18)
143 oldkernel = 1;
144
145 // mounting an overlayfs on top of / seems to be broken for kernels > 4.19
146 // we disable overlayfs for now, pending fixing
147 if (major >= 4 &&minor >= 19) {
148 fprintf(stderr, "Error: OverlayFS disabled for Linux kernels 4.19 and newer, pending fixing.\n");
149 exit(1);
150 }
151
152 char *oroot = RUN_OVERLAY_ROOT;
153 mkdir_attr(oroot, 0755, 0, 0);
154
155 // set base for working and diff directories
156 char *basedir = RUN_MNT_DIR;
157 int basefd = -1;
158
159 if (arg_overlay_keep) {
160 basedir = cfg.overlay_dir;
161 assert(basedir);
162 // get a file descriptor for ~/.firejail, fails if there is any symlink
163 char *firejail;
164 if (asprintf(&firejail, "%s/.firejail", cfg.homedir) == -1)
165 errExit("asprintf");
166 int fd = safer_openat(-1, firejail, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
167 if (fd == -1)
168 errExit("safer_openat");
169 free(firejail);
170 // create basedir if it doesn't exist
171 // the new directory will be owned by root
172 const char *dirname = gnu_basename(basedir);
173 if (mkdirat(fd, dirname, 0755) == -1 && errno != EEXIST) {
174 perror("mkdir");
175 fprintf(stderr, "Error: cannot create overlay directory %s\n", basedir);
176 exit(1);
177 }
178 // open basedir
179 basefd = openat(fd, dirname, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
180 close(fd);
181 }
182 else {
183 basefd = open(basedir, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
184 }
185 if (basefd == -1) {
186 perror("open");
187 fprintf(stderr, "Error: cannot open overlay directory %s\n", basedir);
188 exit(1);
189 }
190
191 // confirm once more base is owned by root
192 if (fstat(basefd, &s) == -1)
193 errExit("fstat");
194 if (s.st_uid != 0) {
195 fprintf(stderr, "Error: overlay directory %s is not owned by the root user\n", basedir);
196 exit(1);
197 }
198 // confirm permissions of base are 0755
199 if (((S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) & s.st_mode) != (S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)) {
200 fprintf(stderr, "Error: invalid permissions on overlay directory %s\n", basedir);
201 exit(1);
202 }
203
204 // create diff and work directories inside base
205 // no need to check arg_overlay_reuse
206 char *odiff;
207 if (asprintf(&odiff, "%s/odiff", basedir) == -1)
208 errExit("asprintf");
209 // the new directory will be owned by root
210 if (mkdirat(basefd, "odiff", 0755) == -1 && errno != EEXIST) {
211 perror("mkdir");
212 fprintf(stderr, "Error: cannot create overlay directory %s\n", odiff);
213 exit(1);
214 }
215 ASSERT_PERMS(odiff, 0, 0, 0755);
216
217 char *owork;
218 if (asprintf(&owork, "%s/owork", basedir) == -1)
219 errExit("asprintf");
220 // the new directory will be owned by root
221 if (mkdirat(basefd, "owork", 0755) == -1 && errno != EEXIST) {
222 perror("mkdir");
223 fprintf(stderr, "Error: cannot create overlay directory %s\n", owork);
224 exit(1);
225 }
226 ASSERT_PERMS(owork, 0, 0, 0755);
227
228 // mount overlayfs
229 if (arg_debug)
230 printf("Mounting OverlayFS\n");
231 char *option;
232 if (oldkernel) { // old Ubuntu/OpenSUSE kernels
233 if (arg_overlay_keep) {
234 fprintf(stderr, "Error: option --overlay= not available for kernels older than 3.18\n");
235 exit(1);
236 }
237 if (asprintf(&option, "lowerdir=/,upperdir=%s", odiff) == -1)
238 errExit("asprintf");
239 if (mount("overlayfs", oroot, "overlayfs", MS_MGC_VAL, option) < 0)
240 errExit("mounting overlayfs");
241 }
242 else { // kernel 3.18 or newer
243 if (asprintf(&option, "lowerdir=/,upperdir=%s,workdir=%s", odiff, owork) == -1)
244 errExit("asprintf");
245 if (mount("overlay", oroot, "overlay", MS_MGC_VAL, option) < 0) {
246 fprintf(stderr, "Debug: running on kernel version %d.%d\n", major, minor);
247 errExit("mounting overlayfs");
248 }
249
250 //***************************
251 // issue #263 start code
252 // My setup has a separate mount point for /home. When the overlay is mounted,
253 // the overlay does not contain the original /home contents.
254 // I added code to create a second overlay for /home if the overlay home dir is empty and this seems to work
255 // @dshmgh, Jan 2016
256 {
257 char *overlayhome;
258 struct stat s;
259 char *hroot;
260 char *hdiff;
261 char *hwork;
262
263 // dons add debug
264 if (arg_debug) printf ("DEBUG: chroot dirs are oroot %s odiff %s owork %s\n",oroot,odiff,owork);
265
266 // BEFORE NEXT, WE NEED TO TEST IF /home has any contents or do we need to mount it?
267 // must create var for oroot/cfg.homedir
268 if (asprintf(&overlayhome, "%s%s", oroot, cfg.homedir) == -1)
269 errExit("asprintf");
270 if (arg_debug) printf ("DEBUG: overlayhome var holds ##%s##\n", overlayhome);
271
272 // if no homedir in overlay -- create another overlay for /home
273 if (stat(cfg.homedir, &s) == 0 && stat(overlayhome, &s) == -1) {
274
275 // no need to check arg_overlay_reuse
276 if (asprintf(&hdiff, "%s/hdiff", basedir) == -1)
277 errExit("asprintf");
278 // the new directory will be owned by root
279 if (mkdirat(basefd, "hdiff", 0755) == -1 && errno != EEXIST) {
280 perror("mkdir");
281 fprintf(stderr, "Error: cannot create overlay directory %s\n", hdiff);
282 exit(1);
283 }
284 ASSERT_PERMS(hdiff, 0, 0, 0755);
285
286 // no need to check arg_overlay_reuse
287 if (asprintf(&hwork, "%s/hwork", basedir) == -1)
288 errExit("asprintf");
289 // the new directory will be owned by root
290 if (mkdirat(basefd, "hwork", 0755) == -1 && errno != EEXIST) {
291 perror("mkdir");
292 fprintf(stderr, "Error: cannot create overlay directory %s\n", hwork);
293 exit(1);
294 }
295 ASSERT_PERMS(hwork, 0, 0, 0755);
296
297 // no homedir in overlay so now mount another overlay for /home
298 if (asprintf(&hroot, "%s/home", oroot) == -1)
299 errExit("asprintf");
300 if (asprintf(&option, "lowerdir=/home,upperdir=%s,workdir=%s", hdiff, hwork) == -1)
301 errExit("asprintf");
302 if (mount("overlay", hroot, "overlay", MS_MGC_VAL, option) < 0)
303 errExit("mounting overlayfs for mounted home directory");
304
305 printf("OverlayFS for /home configured in %s directory\n", basedir);
306 free(hroot);
307 free(hdiff);
308 free(hwork);
309
310 } // stat(overlayhome)
311 free(overlayhome);
312 }
313 // issue #263 end code
314 //***************************
315 }
316 fmessage("OverlayFS configured in %s directory\n", basedir);
317 close(basefd);
318
319 // /dev, /run and /tmp are not covered by the overlay
320 // mount-bind dev directory
321 if (arg_debug)
322 printf("Mounting /dev\n");
323 char *dev;
324 if (asprintf(&dev, "%s/dev", oroot) == -1)
325 errExit("asprintf");
326 if (mount("/dev", dev, NULL, MS_BIND|MS_REC, NULL) < 0)
327 errExit("mounting /dev");
328 fs_logger("whitelist /dev");
329
330 // mount-bind run directory
331 if (arg_debug)
332 printf("Mounting /run\n");
333 char *run;
334 if (asprintf(&run, "%s/run", oroot) == -1)
335 errExit("asprintf");
336 if (mount("/run", run, NULL, MS_BIND|MS_REC, NULL) < 0)
337 errExit("mounting /run");
338 fs_logger("whitelist /run");
339
340 // mount-bind tmp directory
341 if (arg_debug)
342 printf("Mounting /tmp\n");
343 char *tmp;
344 if (asprintf(&tmp, "%s/tmp", oroot) == -1)
345 errExit("asprintf");
346 if (mount("/tmp", tmp, NULL, MS_BIND|MS_REC, NULL) < 0)
347 errExit("mounting /tmp");
348 fs_logger("whitelist /tmp");
349
350 // chroot in the new filesystem
351 __gcov_flush();
352
353 if (chroot(oroot) == -1)
354 errExit("chroot");
355
356 // mount a new proc filesystem
357 if (arg_debug)
358 printf("Mounting /proc filesystem representing the PID namespace\n");
359 if (mount("proc", "/proc", "proc", MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_REC, NULL) < 0)
360 errExit("mounting /proc");
361
362 // update /var directory in order to support multiple sandboxes running on the same root directory
363// if (!arg_private_dev)
364// fs_dev_shm();
365 fs_var_lock();
366 if (!arg_keep_var_tmp)
367 fs_var_tmp();
368 if (!arg_writable_var_log)
369 fs_var_log();
370 fs_var_lib();
371 fs_var_cache();
372 fs_var_utmp();
373 fs_machineid();
374
375 // don't leak user information
376 restrict_users();
377
378 // when starting as root, firejail config is not disabled;
379 if (getuid() != 0)
380 disable_config();
381
382 // cleanup and exit
383 free(option);
384 free(odiff);
385 free(owork);
386 free(dev);
387 free(run);
388 free(tmp);
389}
390
391
392static int remove_callback(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) {
393 (void) sb;
394 (void) typeflag;
395 (void) ftwbuf;
396 assert(fpath);
397
398 if (strcmp(fpath, ".") == 0) // rmdir would fail with EINVAL
399 return 0;
400
401 if (remove(fpath)) { // removes the link not the actual file
402 fprintf(stderr, "Error: cannot remove file: %s\n", strerror(errno));
403 exit(1);
404 }
405
406 return 0;
407}
408
409int remove_overlay_directory(void) {
410 EUID_ASSERT();
411 sleep(1);
412
413 char *path;
414 if (asprintf(&path, "%s/.firejail", cfg.homedir) == -1)
415 errExit("asprintf");
416
417 if (access(path, F_OK) == 0) {
418 pid_t child = fork();
419 if (child < 0)
420 errExit("fork");
421 if (child == 0) {
422 // open ~/.firejail
423 int fd = safer_openat(-1, path, O_PATH|O_NOFOLLOW|O_CLOEXEC);
424 if (fd == -1) {
425 fprintf(stderr, "Error: cannot open %s\n", path);
426 exit(1);
427 }
428 struct stat s;
429 if (fstat(fd, &s) == -1)
430 errExit("fstat");
431 if (!S_ISDIR(s.st_mode)) {
432 if (S_ISLNK(s.st_mode))
433 fprintf(stderr, "Error: %s is a symbolic link\n", path);
434 else
435 fprintf(stderr, "Error: %s is not a directory\n", path);
436 exit(1);
437 }
438 if (s.st_uid != getuid()) {
439 fprintf(stderr, "Error: %s is not owned by the current user\n", path);
440 exit(1);
441 }
442 // chdir to ~/.firejail
443 if (fchdir(fd) == -1)
444 errExit("fchdir");
445 close(fd);
446
447 EUID_ROOT();
448 // FTW_PHYS - do not follow symbolic links
449 if (nftw(".", remove_callback, 64, FTW_DEPTH | FTW_PHYS) == -1)
450 errExit("nftw");
451
452 EUID_USER();
453 // remove ~/.firejail
454 if (rmdir(path) == -1)
455 errExit("rmdir");
456
457 __gcov_flush();
458
459 _exit(0);
460 }
461 // wait for the child to finish
462 waitpid(child, NULL, 0);
463 // check if ~/.firejail was deleted
464 if (access(path, F_OK) == 0)
465 return 1;
466 }
467 return 0;
468}
469
470#endif // HAVE_OVERLAYFS
diff --git a/src/firejail/fs_trace.c b/src/firejail/fs_trace.c
index 475a391ec..17a7b3d23 100644
--- a/src/firejail/fs_trace.c
+++ b/src/firejail/fs_trace.c
@@ -20,25 +20,31 @@
20#include "firejail.h" 20#include "firejail.h"
21#include <sys/mount.h> 21#include <sys/mount.h>
22#include <sys/stat.h> 22#include <sys/stat.h>
23#include <linux/limits.h>
24#include <glob.h> 23#include <glob.h>
25#include <dirent.h> 24#include <dirent.h>
26#include <fcntl.h> 25#include <fcntl.h>
27#include <pwd.h> 26#include <pwd.h>
28 27
29void fs_trace_preload(void) { 28// create an empty /etc/ld.so.preload
29void fs_trace_touch_preload(void) {
30 create_empty_file_as_root("/etc/ld.so.preload", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
31}
32
33void fs_trace_touch_or_store_preload(void) {
30 struct stat s; 34 struct stat s;
31 35
32 // create an empty /etc/ld.so.preload 36 if (stat("/etc/ld.so.preload", &s) != 0) {
33 if (stat("/etc/ld.so.preload", &s)) { 37 fs_trace_touch_preload();
34 if (arg_debug) 38 return;
35 printf("Creating an empty /etc/ld.so.preload file\n"); 39 }
36 FILE *fp = fopen("/etc/ld.so.preload", "wxe"); 40
37 if (!fp) 41 if (s.st_size == 0)
38 errExit("fopen"); 42 return;
39 SET_PERMS_STREAM(fp, 0, 0, S_IRUSR | S_IWRITE | S_IRGRP | S_IROTH); 43
40 fclose(fp); 44 // create a copy of /etc/ld.so.preload
41 fs_logger("touch /etc/ld.so.preload"); 45 if (copy_file("/etc/ld.so.preload", RUN_LDPRELOAD_FILE, 0, 0, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) {
46 fprintf(stderr, "Error: cannot copy /etc/ld.so.preload file\n");
47 exit(1);
42 } 48 }
43} 49}
44 50
@@ -47,7 +53,7 @@ void fs_tracefile(void) {
47 if (arg_debug) 53 if (arg_debug)
48 printf("Creating an empty trace log file: %s\n", arg_tracefile); 54 printf("Creating an empty trace log file: %s\n", arg_tracefile);
49 EUID_USER(); 55 EUID_USER();
50 int fd = open(arg_tracefile, O_CREAT|O_WRONLY|O_CLOEXEC, S_IRUSR | S_IWRITE | S_IRGRP | S_IROTH); 56 int fd = open(arg_tracefile, O_CREAT|O_WRONLY|O_CLOEXEC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
51 if (fd == -1) { 57 if (fd == -1) {
52 perror("open"); 58 perror("open");
53 fprintf(stderr, "Error: cannot open trace log file %s for writing\n", arg_tracefile); 59 fprintf(stderr, "Error: cannot open trace log file %s for writing\n", arg_tracefile);
@@ -83,7 +89,7 @@ void fs_trace(void) {
83 if (arg_debug) 89 if (arg_debug)
84 printf("Create the new ld.so.preload file\n"); 90 printf("Create the new ld.so.preload file\n");
85 91
86 FILE *fp = fopen(RUN_LDPRELOAD_FILE, "we"); 92 FILE *fp = fopen(RUN_LDPRELOAD_FILE, "ae");
87 if (!fp) 93 if (!fp)
88 errExit("fopen"); 94 errExit("fopen");
89 const char *prefix = RUN_FIREJAIL_LIB_DIR; 95 const char *prefix = RUN_FIREJAIL_LIB_DIR;
@@ -100,7 +106,7 @@ void fs_trace(void) {
100 fmessage("Post-exec seccomp protector enabled\n"); 106 fmessage("Post-exec seccomp protector enabled\n");
101 } 107 }
102 108
103 SET_PERMS_STREAM(fp, 0, 0, S_IRUSR | S_IWRITE | S_IRGRP | S_IROTH); 109 SET_PERMS_STREAM(fp, 0, 0, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
104 fclose(fp); 110 fclose(fp);
105 111
106 // mount the new preload file 112 // mount the new preload file
diff --git a/src/firejail/fs_var.c b/src/firejail/fs_var.c
index 20e262d80..e19d0df96 100644
--- a/src/firejail/fs_var.c
+++ b/src/firejail/fs_var.c
@@ -20,7 +20,6 @@
20#include "firejail.h" 20#include "firejail.h"
21#include <sys/mount.h> 21#include <sys/mount.h>
22#include <sys/stat.h> 22#include <sys/stat.h>
23#include <linux/limits.h>
24#include <glob.h> 23#include <glob.h>
25#include <dirent.h> 24#include <dirent.h>
26#include <fcntl.h> 25#include <fcntl.h>
@@ -129,7 +128,7 @@ void fs_var_log(void) {
129 /* coverity[toctou] */ 128 /* coverity[toctou] */
130 FILE *fp = fopen("/var/log/wtmp", "wxe"); 129 FILE *fp = fopen("/var/log/wtmp", "wxe");
131 if (fp) { 130 if (fp) {
132 SET_PERMS_STREAM(fp, 0, wtmp_group, S_IRUSR | S_IWRITE | S_IRGRP | S_IWGRP | S_IROTH); 131 SET_PERMS_STREAM(fp, 0, wtmp_group, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
133 fclose(fp); 132 fclose(fp);
134 } 133 }
135 fs_logger("touch /var/log/wtmp"); 134 fs_logger("touch /var/log/wtmp");
@@ -137,7 +136,7 @@ void fs_var_log(void) {
137 // create an empty /var/log/btmp file 136 // create an empty /var/log/btmp file
138 fp = fopen("/var/log/btmp", "wxe"); 137 fp = fopen("/var/log/btmp", "wxe");
139 if (fp) { 138 if (fp) {
140 SET_PERMS_STREAM(fp, 0, wtmp_group, S_IRUSR | S_IWRITE | S_IRGRP | S_IWGRP); 139 SET_PERMS_STREAM(fp, 0, wtmp_group, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
141 fclose(fp); 140 fclose(fp);
142 } 141 }
143 fs_logger("touch /var/log/btmp"); 142 fs_logger("touch /var/log/btmp");
@@ -314,7 +313,7 @@ void fs_var_utmp(void) {
314 // save new utmp file 313 // save new utmp file
315 int rv = fwrite(&u_boot, sizeof(u_boot), 1, fp); 314 int rv = fwrite(&u_boot, sizeof(u_boot), 1, fp);
316 (void) rv; 315 (void) rv;
317 SET_PERMS_STREAM(fp, 0, utmp_group, S_IRUSR | S_IWRITE | S_IRGRP | S_IWGRP | S_IROTH); 316 SET_PERMS_STREAM(fp, 0, utmp_group, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
318 fclose(fp); 317 fclose(fp);
319 318
320 // mount the new utmp file 319 // mount the new utmp file
diff --git a/src/firejail/fs_whitelist.c b/src/firejail/fs_whitelist.c
index 943f275de..7afebed1f 100644
--- a/src/firejail/fs_whitelist.c
+++ b/src/firejail/fs_whitelist.c
@@ -105,6 +105,7 @@ static int whitelist_mkpath(const char* path, mode_t mode) {
105} 105}
106 106
107static void whitelist_file(int dirfd, const char *relpath, const char *path) { 107static void whitelist_file(int dirfd, const char *relpath, const char *path) {
108 EUID_ASSERT();
108 assert(relpath && path); 109 assert(relpath && path);
109 110
110 // open mount source, using a file descriptor that refers to the 111 // open mount source, using a file descriptor that refers to the
@@ -130,12 +131,9 @@ static void whitelist_file(int dirfd, const char *relpath, const char *path) {
130 } 131 }
131 132
132 // create mount target as root, except if inside home or run/user/$UID directory 133 // create mount target as root, except if inside home or run/user/$UID directory
133 int userprivs = 0; 134 if ((strncmp(path, cfg.homedir, homedir_len) != 0 || path[homedir_len] != '/') &&
134 if ((strncmp(path, cfg.homedir, homedir_len) == 0 && path[homedir_len] == '/') || 135 (strncmp(path, runuser, runuser_len) != 0 || path[runuser_len] != '/'))
135 (strncmp(path, runuser, runuser_len) == 0 && path[runuser_len] == '/')) { 136 EUID_ROOT();
136 EUID_USER();
137 userprivs = 1;
138 }
139 137
140 // create path of the mount target 138 // create path of the mount target
141 int fd2 = whitelist_mkpath(path, 0755); 139 int fd2 = whitelist_mkpath(path, 0755);
@@ -146,8 +144,7 @@ static void whitelist_file(int dirfd, const char *relpath, const char *path) {
146 if (arg_debug || arg_debug_whitelists) 144 if (arg_debug || arg_debug_whitelists)
147 printf("Debug %d: skip whitelist %s\n", __LINE__, path); 145 printf("Debug %d: skip whitelist %s\n", __LINE__, path);
148 close(fd); 146 close(fd);
149 if (userprivs) 147 EUID_USER();
150 EUID_ROOT();
151 return; 148 return;
152 } 149 }
153 150
@@ -166,8 +163,7 @@ static void whitelist_file(int dirfd, const char *relpath, const char *path) {
166 } 163 }
167 close(fd); 164 close(fd);
168 close(fd2); 165 close(fd2);
169 if (userprivs) 166 EUID_USER();
170 EUID_ROOT();
171 return; 167 return;
172 } 168 }
173 fd3 = openat(fd2, file, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC); 169 fd3 = openat(fd2, file, O_PATH|O_DIRECTORY|O_NOFOLLOW|O_CLOEXEC);
@@ -184,19 +180,17 @@ static void whitelist_file(int dirfd, const char *relpath, const char *path) {
184 } 180 }
185 close(fd); 181 close(fd);
186 close(fd2); 182 close(fd2);
187 if (userprivs) 183 EUID_USER();
188 EUID_ROOT();
189 return; 184 return;
190 } 185 }
191
192 close(fd2); 186 close(fd2);
193 if (userprivs)
194 EUID_ROOT();
195 187
196 if (arg_debug || arg_debug_whitelists) 188 if (arg_debug || arg_debug_whitelists)
197 printf("Whitelisting %s\n", path); 189 printf("Whitelisting %s\n", path);
190 EUID_ROOT();
198 if (bind_mount_by_fd(fd, fd3)) 191 if (bind_mount_by_fd(fd, fd3))
199 errExit("mount bind"); 192 errExit("mount bind");
193 EUID_USER();
200 // check the last mount operation 194 // check the last mount operation
201 MountData *mptr = get_last_mount(); // will do exit(1) if the mount cannot be found 195 MountData *mptr = get_last_mount(); // will do exit(1) if the mount cannot be found
202#ifdef TEST_MOUNTINFO 196#ifdef TEST_MOUNTINFO
@@ -219,22 +213,19 @@ static void whitelist_file(int dirfd, const char *relpath, const char *path) {
219} 213}
220 214
221static void whitelist_symlink(const char *link, const char *target) { 215static void whitelist_symlink(const char *link, const char *target) {
216 EUID_ASSERT();
222 assert(link && target); 217 assert(link && target);
223 218
224 // create files as root, except if inside home or run/user/$UID directory 219 // create files as root, except if inside home or run/user/$UID directory
225 int userprivs = 0; 220 if ((strncmp(link, cfg.homedir, homedir_len) != 0 || link[homedir_len] != '/') &&
226 if ((strncmp(link, cfg.homedir, homedir_len) == 0 && link[homedir_len] == '/') || 221 (strncmp(link, runuser, runuser_len) != 0 || link[runuser_len] != '/'))
227 (strncmp(link, runuser, runuser_len) == 0 && link[runuser_len] == '/')) { 222 EUID_ROOT();
228 EUID_USER();
229 userprivs = 1;
230 }
231 223
232 int fd = whitelist_mkpath(link, 0755); 224 int fd = whitelist_mkpath(link, 0755);
233 if (fd == -1) { 225 if (fd == -1) {
234 if (arg_debug || arg_debug_whitelists) 226 if (arg_debug || arg_debug_whitelists)
235 printf("Debug %d: cannot create symbolic link %s\n", __LINE__, link); 227 printf("Debug %d: cannot create symbolic link %s\n", __LINE__, link);
236 if (userprivs) 228 EUID_USER();
237 EUID_ROOT();
238 return; 229 return;
239 } 230 }
240 231
@@ -252,8 +243,7 @@ static void whitelist_symlink(const char *link, const char *target) {
252 printf("Created symbolic link %s -> %s\n", link, target); 243 printf("Created symbolic link %s -> %s\n", link, target);
253 244
254 close(fd); 245 close(fd);
255 if (userprivs) 246 EUID_USER();
256 EUID_ROOT();
257} 247}
258 248
259static void globbing(const char *pattern) { 249static void globbing(const char *pattern) {
@@ -330,10 +320,11 @@ static void tmpfs_topdirs(const TopDir *topdirs) {
330 // init tmpfs 320 // init tmpfs
331 if (strcmp(topdirs[i].path, "/run") == 0) { 321 if (strcmp(topdirs[i].path, "/run") == 0) {
332 // restore /run/firejail directory 322 // restore /run/firejail directory
333 if (mkdir(RUN_FIREJAIL_DIR, 0755) == -1) 323 EUID_ROOT();
334 errExit("mkdir"); 324 mkdir_attr(RUN_FIREJAIL_DIR, 0755, 0, 0);
335 if (bind_mount_fd_to_path(fd, RUN_FIREJAIL_DIR)) 325 if (bind_mount_fd_to_path(fd, RUN_FIREJAIL_DIR))
336 errExit("mount bind"); 326 errExit("mount bind");
327 EUID_USER();
337 close(fd); 328 close(fd);
338 fs_logger2("whitelist", RUN_FIREJAIL_DIR); 329 fs_logger2("whitelist", RUN_FIREJAIL_DIR);
339 330
@@ -351,12 +342,14 @@ static void tmpfs_topdirs(const TopDir *topdirs) {
351 errExit("asprintf"); 342 errExit("asprintf");
352 if (strcmp(env, pamtmpdir) == 0) { 343 if (strcmp(env, pamtmpdir) == 0) {
353 // create empty user-owned /tmp/user/$UID directory 344 // create empty user-owned /tmp/user/$UID directory
345 EUID_ROOT();
354 mkdir_attr("/tmp/user", 0711, 0, 0); 346 mkdir_attr("/tmp/user", 0711, 0, 0);
355 selinux_relabel_path("/tmp/user", "/tmp/user"); 347 selinux_relabel_path("/tmp/user", "/tmp/user");
356 fs_logger("mkdir /tmp/user"); 348 fs_logger("mkdir /tmp/user");
357 mkdir_attr(pamtmpdir, 0700, getuid(), 0); 349 mkdir_attr(pamtmpdir, 0700, getuid(), 0);
358 selinux_relabel_path(pamtmpdir, pamtmpdir); 350 selinux_relabel_path(pamtmpdir, pamtmpdir);
359 fs_logger2("mkdir", pamtmpdir); 351 fs_logger2("mkdir", pamtmpdir);
352 EUID_USER();
360 } 353 }
361 free(pamtmpdir); 354 free(pamtmpdir);
362 } 355 }
@@ -374,11 +367,8 @@ static void tmpfs_topdirs(const TopDir *topdirs) {
374 } 367 }
375 368
376 // user home directory 369 // user home directory
377 if (tmpfs_home) { 370 if (tmpfs_home)
378 EUID_USER();
379 fs_private(); // checks owner if outside /home 371 fs_private(); // checks owner if outside /home
380 EUID_ROOT();
381 }
382 372
383 // /run/user/$UID directory 373 // /run/user/$UID directory
384 if (tmpfs_runuser) { 374 if (tmpfs_runuser) {
@@ -402,6 +392,7 @@ static int reject_topdir(const char *dir) {
402// keep track of whitelist top level directories by adding them to an array 392// keep track of whitelist top level directories by adding them to an array
403// open each directory 393// open each directory
404static TopDir *add_topdir(const char *dir, TopDir *topdirs, const char *path) { 394static TopDir *add_topdir(const char *dir, TopDir *topdirs, const char *path) {
395 EUID_ASSERT();
405 assert(dir && path); 396 assert(dir && path);
406 397
407 // /proc and /sys are not allowed 398 // /proc and /sys are not allowed
@@ -516,6 +507,8 @@ static char *extract_topdir(const char *path) {
516} 507}
517 508
518void fs_whitelist(void) { 509void fs_whitelist(void) {
510 EUID_ASSERT();
511
519 ProfileEntry *entry = cfg.profile; 512 ProfileEntry *entry = cfg.profile;
520 if (!entry) 513 if (!entry)
521 return; 514 return;
@@ -536,7 +529,6 @@ void fs_whitelist(void) {
536 errExit("calloc"); 529 errExit("calloc");
537 530
538 // verify whitelist files, extract symbolic links, etc. 531 // verify whitelist files, extract symbolic links, etc.
539 EUID_USER();
540 while (entry) { 532 while (entry) {
541 int nowhitelist_flag = 0; 533 int nowhitelist_flag = 0;
542 534
@@ -630,7 +622,7 @@ void fs_whitelist(void) {
630 if (!fname) { 622 if (!fname) {
631 if (arg_debug || arg_debug_whitelists) { 623 if (arg_debug || arg_debug_whitelists) {
632 printf("Removed path: %s\n", entry->data); 624 printf("Removed path: %s\n", entry->data);
633 printf("\texpanded: %s\n", new_name); 625 printf("\tnew_name: %s\n", new_name);
634 printf("\trealpath: (null)\n"); 626 printf("\trealpath: (null)\n");
635 printf("\t%s\n", strerror(errno)); 627 printf("\t%s\n", strerror(errno));
636 } 628 }
@@ -712,7 +704,6 @@ void fs_whitelist(void) {
712 free(nowhitelist); 704 free(nowhitelist);
713 705
714 // mount tmpfs on all top level directories 706 // mount tmpfs on all top level directories
715 EUID_ROOT();
716 tmpfs_topdirs(topdirs); 707 tmpfs_topdirs(topdirs);
717 708
718 // go through profile rules again, and interpret whitelist commands 709 // go through profile rules again, and interpret whitelist commands
diff --git a/src/firejail/ids.c b/src/firejail/ids.c
index 59acdb1fe..a9ff59be4 100644
--- a/src/firejail/ids.c
+++ b/src/firejail/ids.c
@@ -86,4 +86,4 @@ void run_ids(int argc, char **argv) {
86 fprintf(stderr, "Error: unrecognized IDS command\n"); 86 fprintf(stderr, "Error: unrecognized IDS command\n");
87 87
88 exit(0); 88 exit(0);
89} \ No newline at end of file 89}
diff --git a/src/firejail/join.c b/src/firejail/join.c
index 99fbfdd0a..0e76fd944 100644
--- a/src/firejail/join.c
+++ b/src/firejail/join.c
@@ -431,7 +431,7 @@ void join(pid_t pid, int argc, char **argv, int index) {
431 431
432 // set cgroup 432 // set cgroup
433 if (cfg.cgroup) // not available for uid 0 433 if (cfg.cgroup) // not available for uid 0
434 set_cgroup(cfg.cgroup); 434 set_cgroup(cfg.cgroup, getpid());
435 435
436 // join namespaces 436 // join namespaces
437 if (arg_join_network) { 437 if (arg_join_network) {
@@ -551,10 +551,6 @@ void join(pid_t pid, int argc, char **argv, int index) {
551 if (cfg.cpus) // not available for uid 0 551 if (cfg.cpus) // not available for uid 0
552 set_cpu_affinity(); 552 set_cpu_affinity();
553 553
554 // set nice value
555 if (arg_nice)
556 set_nice(cfg.nice);
557
558 // add x11 display 554 // add x11 display
559 if (display) { 555 if (display) {
560 char *display_str; 556 char *display_str;
@@ -573,6 +569,11 @@ void join(pid_t pid, int argc, char **argv, int index) {
573 dbus_set_system_bus_env(); 569 dbus_set_system_bus_env();
574#endif 570#endif
575 571
572 // set nice and rlimits
573 if (arg_nice)
574 set_nice(cfg.nice);
575 set_rlimits();
576
576 start_application(0, shfd, NULL); 577 start_application(0, shfd, NULL);
577 578
578 __builtin_unreachable(); 579 __builtin_unreachable();
diff --git a/src/firejail/ls.c b/src/firejail/ls.c
index 70985ba9e..53e918dde 100644
--- a/src/firejail/ls.c
+++ b/src/firejail/ls.c
@@ -305,7 +305,7 @@ void sandboxfs(int op, pid_t pid, const char *path1, const char *path2) {
305 } 305 }
306 // create destination file if necessary 306 // create destination file if necessary
307 EUID_ASSERT(); 307 EUID_ASSERT();
308 int fd = open(dest_fname, O_WRONLY|O_CREAT|O_CLOEXEC, S_IRUSR | S_IWRITE); 308 int fd = open(dest_fname, O_WRONLY|O_CREAT|O_CLOEXEC, S_IRUSR | S_IWUSR);
309 if (fd == -1) { 309 if (fd == -1) {
310 fprintf(stderr, "Error: cannot open %s for writing\n", dest_fname); 310 fprintf(stderr, "Error: cannot open %s for writing\n", dest_fname);
311 exit(1); 311 exit(1);
diff --git a/src/firejail/main.c b/src/firejail/main.c
index 81d148257..e765d1d8d 100644
--- a/src/firejail/main.c
+++ b/src/firejail/main.c
@@ -32,7 +32,8 @@
32#include <dirent.h> 32#include <dirent.h>
33#include <pwd.h> 33#include <pwd.h>
34#include <errno.h> 34#include <errno.h>
35//#include <limits.h> 35
36#include <limits.h>
36#include <sys/file.h> 37#include <sys/file.h>
37#include <sys/prctl.h> 38#include <sys/prctl.h>
38#include <signal.h> 39#include <signal.h>
@@ -870,7 +871,7 @@ char *guess_shell(void) {
870 if (shell) { 871 if (shell) {
871 invalid_filename(shell, 0); // no globbing 872 invalid_filename(shell, 0); // no globbing
872 if (access(shell, X_OK) == 0 && !is_dir(shell) && strstr(shell, "..") == NULL && 873 if (access(shell, X_OK) == 0 && !is_dir(shell) && strstr(shell, "..") == NULL &&
873 strcmp(shell, PATH_FIREJAIL) != 0) 874 strcmp(gnu_basename(shell), "firejail") != 0)
874 goto found; 875 goto found;
875 } 876 }
876 877
@@ -1528,15 +1529,16 @@ int main(int argc, char **argv, char **envp) {
1528 else if (strncmp(argv[i], "--cgroup=", 9) == 0) { 1529 else if (strncmp(argv[i], "--cgroup=", 9) == 0) {
1529 if (checkcfg(CFG_CGROUP)) { 1530 if (checkcfg(CFG_CGROUP)) {
1530 if (option_cgroup) { 1531 if (option_cgroup) {
1531 fprintf(stderr, "Error: only a cgroup can be defined\n"); 1532 fprintf(stderr, "Error: only one cgroup can be defined\n");
1532 exit(1); 1533 exit(1);
1533 } 1534 }
1534
1535 option_cgroup = 1;
1536 cfg.cgroup = strdup(argv[i] + 9); 1535 cfg.cgroup = strdup(argv[i] + 9);
1537 if (!cfg.cgroup) 1536 if (!cfg.cgroup)
1538 errExit("strdup"); 1537 errExit("strdup");
1539 set_cgroup(cfg.cgroup); 1538
1539 check_cgroup_file(cfg.cgroup);
1540 set_cgroup(cfg.cgroup, getpid());
1541 option_cgroup = 1;
1540 } 1542 }
1541 else 1543 else
1542 exit_err_feature("cgroup"); 1544 exit_err_feature("cgroup");
@@ -2154,6 +2156,10 @@ int main(int argc, char **argv, char **envp) {
2154 arg_novideo = 1; 2156 arg_novideo = 1;
2155 else if (strcmp(argv[i], "--no3d") == 0) 2157 else if (strcmp(argv[i], "--no3d") == 0)
2156 arg_no3d = 1; 2158 arg_no3d = 1;
2159 else if (strcmp(argv[i], "--noprinters") == 0) {
2160 profile_add("blacklist /dev/lp*");
2161 profile_add("blacklist /run/cups/cups.sock");
2162 }
2157 else if (strcmp(argv[i], "--notv") == 0) 2163 else if (strcmp(argv[i], "--notv") == 0)
2158 arg_notv = 1; 2164 arg_notv = 1;
2159 else if (strcmp(argv[i], "--nodvd") == 0) 2165 else if (strcmp(argv[i], "--nodvd") == 0)
diff --git a/src/firejail/mountinfo.c b/src/firejail/mountinfo.c
index 64a94bd84..ee437e10b 100644
--- a/src/firejail/mountinfo.c
+++ b/src/firejail/mountinfo.c
@@ -19,6 +19,7 @@
19*/ 19*/
20 20
21#include "firejail.h" 21#include "firejail.h"
22#include <errno.h>
22 23
23#include <fcntl.h> 24#include <fcntl.h>
24#ifndef O_PATH 25#ifndef O_PATH
@@ -32,43 +33,38 @@ static MountData mdata;
32 33
33 34
34// Convert octal escape sequence to decimal value 35// Convert octal escape sequence to decimal value
35static int read_oct(const char *path) { 36static unsigned read_oct(char *s) {
36 int dec = 0; 37 assert(s[0] == '\\');
37 int digit, i; 38 s++;
38 // there are always exactly three octal digits 39
39 for (i = 1; i < 4; i++) { 40 int i;
40 digit = *(path + i); 41 for (i = 0; i < 3; i++)
41 if (digit < '0' || digit > '7') { 42 assert(s[i] >= '0' && s[i] <= '7');
42 fprintf(stderr, "Error: cannot read /proc/self/mountinfo\n"); 43
43 exit(1); 44 return ((s[0] - '0') << 6 |
44 } 45 (s[1] - '0') << 3 |
45 dec = (dec << 3) + (digit - '0'); 46 (s[2] - '0') << 0);
46 }
47 return dec;
48} 47}
49 48
50// Restore empty spaces in pathnames extracted from /proc/self/mountinfo 49// Restore empty spaces in pathnames extracted from /proc/self/mountinfo
51static void unmangle_path(char *path) { 50static void unmangle_path(char *path) {
52 char *p = strchr(path, '\\'); 51 char *r = strchr(path, '\\');
53 if (p && read_oct(p) == ' ') { 52 if (!r)
54 *p = ' '; 53 return;
55 int i = 3; 54
56 do { 55 char *w = r;
57 p++; 56 do {
58 if (*(p + i) == '\\' && read_oct(p + i) == ' ') { 57 while (*r == '\\') {
59 *p = ' '; 58 *w++ = read_oct(r);
60 i += 3; 59 r += 4;
61 } 60 }
62 else 61 *w++ = *r;
63 *p = *(p + i); 62 } while (*r++);
64 } while (*p);
65 }
66} 63}
67 64
68// Parse a line from /proc/self/mountinfo, 65// Parse a line from /proc/self/mountinfo,
69// the function does an exit(1) if anything goes wrong. 66// the function does an exit(1) if anything goes wrong.
70static void parse_line(char *line, MountData *output) { 67static void parse_line(char *line, MountData *output) {
71 assert(line && output);
72 memset(output, 0, sizeof(*output)); 68 memset(output, 0, sizeof(*output));
73 // extract mount id, filesystem name, directory and filesystem types 69 // extract mount id, filesystem name, directory and filesystem types
74 // examples: 70 // examples:
@@ -86,8 +82,6 @@ static void parse_line(char *line, MountData *output) {
86 char *ptr = strtok(line, " "); 82 char *ptr = strtok(line, " ");
87 if (!ptr) 83 if (!ptr)
88 goto errexit; 84 goto errexit;
89 if (ptr != line)
90 goto errexit;
91 output->mountid = atoi(ptr); 85 output->mountid = atoi(ptr);
92 int cnt = 1; 86 int cnt = 1;
93 87
@@ -108,10 +102,9 @@ static void parse_line(char *line, MountData *output) {
108 ptr = strtok(NULL, " "); 102 ptr = strtok(NULL, " ");
109 if (!ptr) 103 if (!ptr)
110 goto errexit; 104 goto errexit;
111 output->fstype = ptr++; 105 output->fstype = ptr;
112
113 106
114 if (output->mountid == 0 || 107 if (output->mountid < 0 ||
115 output->fsname == NULL || 108 output->fsname == NULL ||
116 output->dir == NULL || 109 output->dir == NULL ||
117 output->fstype == NULL) 110 output->fstype == NULL)
@@ -151,111 +144,117 @@ MountData *get_last_mount(void) {
151 return &mdata; 144 return &mdata;
152} 145}
153 146
154// Extract the mount id from /proc/self/fdinfo and return it. 147// Returns mount id, or -1 if fd refers to a procfs or sysfs file
155int get_mount_id(const char *path) { 148static int get_mount_id_from_handle(int fd) {
156 EUID_ASSERT(); 149 EUID_ASSERT();
157 assert(path);
158 150
159 int fd = open(path, O_PATH|O_CLOEXEC); 151 char *proc;
160 if (fd == -1) 152 if (asprintf(&proc, "/proc/self/fd/%d", fd) == -1)
161 return -1; 153 errExit("asprintf");
154 struct file_handle *fh = malloc(sizeof *fh);
155 if (!fh)
156 errExit("malloc");
157 fh->handle_bytes = 0;
158
159 int rv = -1;
160 int tmp;
161 if (name_to_handle_at(-1, proc, fh, &tmp, AT_SYMLINK_FOLLOW) != -1) {
162 fprintf(stderr, "Error: unexpected result from name_to_handle_at\n");
163 exit(1);
164 }
165 if (errno == EOVERFLOW && fh->handle_bytes)
166 rv = tmp;
167
168 free(proc);
169 free(fh);
170 return rv;
171}
172
173// Returns mount id, or -1 on kernels < 3.15
174static int get_mount_id_from_fdinfo(int fd) {
175 EUID_ASSERT();
176 int rv = -1;
162 177
163 char *fdinfo; 178 char *proc;
164 if (asprintf(&fdinfo, "/proc/self/fdinfo/%d", fd) == -1) 179 if (asprintf(&proc, "/proc/self/fdinfo/%d", fd) == -1)
165 errExit("asprintf"); 180 errExit("asprintf");
166 EUID_ROOT(); 181 EUID_ROOT();
167 FILE *fp = fopen(fdinfo, "re"); 182 FILE *fp = fopen(proc, "re");
168 EUID_USER(); 183 EUID_USER();
169 free(fdinfo);
170 if (!fp) 184 if (!fp)
171 goto errexit; 185 goto errexit;
172 186
173 // read the file
174 char buf[MAX_BUF]; 187 char buf[MAX_BUF];
175 if (fgets(buf, MAX_BUF, fp) == NULL) 188 while (fgets(buf, MAX_BUF, fp)) {
176 goto errexit;
177 do {
178 if (strncmp(buf, "mnt_id:", 7) == 0) { 189 if (strncmp(buf, "mnt_id:", 7) == 0) {
179 char *ptr = buf + 7; 190 if (sscanf(buf + 7, "%d", &rv) == 1)
180 while (*ptr != '\0' && (*ptr == ' ' || *ptr == '\t')) { 191 break;
181 ptr++; 192 goto errexit;
182 }
183 if (*ptr == '\0')
184 goto errexit;
185 fclose(fp);
186 close(fd);
187 return atoi(ptr);
188 } 193 }
189 } while (fgets(buf, MAX_BUF, fp)); 194 }
190 195
191 // fallback, kernels older than 3.15 don't expose the mount id in this place 196 free(proc);
192 fclose(fp); 197 fclose(fp);
193 close(fd); 198 return rv;
194 return -2;
195 199
196errexit: 200errexit:
197 fprintf(stderr, "Error: cannot read proc file\n"); 201 fprintf(stderr, "Error: cannot read proc file\n");
198 exit(1); 202 exit(1);
199} 203}
200 204
205int get_mount_id(int fd) {
206 int rv = get_mount_id_from_fdinfo(fd);
207 if (rv < 0)
208 rv = get_mount_id_from_handle(fd);
209 return rv;
210}
211
201// Check /proc/self/mountinfo if path contains any mounts points. 212// Check /proc/self/mountinfo if path contains any mounts points.
202// Returns an array that can be iterated over for recursive remounting. 213// Returns an array that can be iterated over for recursive remounting.
203char **build_mount_array(const int mount_id, const char *path) { 214char **build_mount_array(const int mountid, const char *path) {
204 assert(path); 215 assert(path);
205 216
206 // open /proc/self/mountinfo
207 FILE *fp = fopen("/proc/self/mountinfo", "re"); 217 FILE *fp = fopen("/proc/self/mountinfo", "re");
208 if (!fp) { 218 if (!fp) {
209 fprintf(stderr, "Error: cannot read /proc/self/mountinfo\n"); 219 fprintf(stderr, "Error: cannot read /proc/self/mountinfo\n");
210 exit(1); 220 exit(1);
211 } 221 }
212 222
213 // array to be returned 223 // try to find line with mount id
214 size_t cnt = 0; 224 int found = 0;
225 MountData mntp;
226 char line[MAX_BUF];
227 while (fgets(line, MAX_BUF, fp)) {
228 parse_line(line, &mntp);
229 if (mntp.mountid == mountid) {
230 found = 1;
231 break;
232 }
233 }
234
235 if (!found) {
236 fclose(fp);
237 return NULL;
238 }
239
240 // allocate array
215 size_t size = 32; 241 size_t size = 32;
216 char **rv = malloc(size * sizeof(*rv)); 242 char **rv = malloc(size * sizeof(*rv));
217 if (!rv) 243 if (!rv)
218 errExit("malloc"); 244 errExit("malloc");
219 245
220 // read /proc/self/mountinfo 246 // add directory itself
221 size_t pathlen = strlen(path); 247 size_t cnt = 0;
222 char buf[MAX_BUF]; 248 rv[cnt] = strdup(path);
223 MountData mntp; 249 if (rv[cnt] == NULL)
224 int found = 0; 250 errExit("strdup");
225 251
226 if (fgets(buf, MAX_BUF, fp) == NULL) { 252 // and add all following mountpoints contained in this directory
227 fprintf(stderr, "Error: cannot read /proc/self/mountinfo\n"); 253 size_t pathlen = strlen(path);
228 exit(1); 254 while (fgets(line, MAX_BUF, fp)) {
229 } 255 parse_line(line, &mntp);
230 do { 256 if (strncmp(mntp.dir, path, pathlen) == 0 && mntp.dir[pathlen] == '/') {
231 parse_line(buf, &mntp); 257 if (++cnt == size) {
232 // find mount point with mount id
233 if (!found) {
234 if (mntp.mountid == mount_id) {
235 // give up if mount id has been reassigned,
236 // don't remount blacklisted path
237 if (strncmp(mntp.dir, path, strlen(mntp.dir)) ||
238 strstr(mntp.fsname, "firejail.ro.dir") ||
239 strstr(mntp.fsname, "firejail.ro.file"))
240 break;
241
242 rv[cnt] = strdup(path);
243 if (rv[cnt] == NULL)
244 errExit("strdup");
245 cnt++;
246 found = 1;
247 continue;
248 }
249 continue;
250 }
251 // from here on add all mount points below path,
252 // don't remount blacklisted paths
253 if (strncmp(mntp.dir, path, pathlen) == 0 &&
254 mntp.dir[pathlen] == '/' &&
255 strstr(mntp.fsname, "firejail.ro.dir") == NULL &&
256 strstr(mntp.fsname, "firejail.ro.file") == NULL) {
257
258 if (cnt == size) {
259 size *= 2; 258 size *= 2;
260 rv = realloc(rv, size * sizeof(*rv)); 259 rv = realloc(rv, size * sizeof(*rv));
261 if (!rv) 260 if (!rv)
@@ -264,18 +263,17 @@ char **build_mount_array(const int mount_id, const char *path) {
264 rv[cnt] = strdup(mntp.dir); 263 rv[cnt] = strdup(mntp.dir);
265 if (rv[cnt] == NULL) 264 if (rv[cnt] == NULL)
266 errExit("strdup"); 265 errExit("strdup");
267 cnt++;
268 } 266 }
269 } while (fgets(buf, MAX_BUF, fp)); 267 }
268 fclose(fp);
270 269
271 if (cnt == size) { 270 // end of array
272 size++; 271 if (++cnt == size) {
272 ++size;
273 rv = realloc(rv, size * sizeof(*rv)); 273 rv = realloc(rv, size * sizeof(*rv));
274 if (!rv) 274 if (!rv)
275 errExit("realloc"); 275 errExit("realloc");
276 } 276 }
277 rv[cnt] = NULL; // end of the array 277 rv[cnt] = NULL;
278
279 fclose(fp);
280 return rv; 278 return rv;
281} 279}
diff --git a/src/firejail/profile.c b/src/firejail/profile.c
index b7c7185a6..babc3941e 100644
--- a/src/firejail/profile.c
+++ b/src/firejail/profile.c
@@ -175,6 +175,10 @@ static int check_allow_drm(void) {
175 return checkcfg(CFG_BROWSER_ALLOW_DRM) != 0; 175 return checkcfg(CFG_BROWSER_ALLOW_DRM) != 0;
176} 176}
177 177
178static int check_allow_tray(void) {
179 return checkcfg(CFG_ALLOW_TRAY) != 0;
180}
181
178Cond conditionals[] = { 182Cond conditionals[] = {
179 {"HAS_APPIMAGE", check_appimage}, 183 {"HAS_APPIMAGE", check_appimage},
180 {"HAS_NET", check_netoptions}, 184 {"HAS_NET", check_netoptions},
@@ -184,6 +188,7 @@ Cond conditionals[] = {
184 {"HAS_X11", check_x11}, 188 {"HAS_X11", check_x11},
185 {"BROWSER_DISABLE_U2F", check_disable_u2f}, 189 {"BROWSER_DISABLE_U2F", check_disable_u2f},
186 {"BROWSER_ALLOW_DRM", check_allow_drm}, 190 {"BROWSER_ALLOW_DRM", check_allow_drm},
191 {"ALLOW_TRAY", check_allow_tray},
187 { NULL, NULL } 192 { NULL, NULL }
188}; 193};
189 194
@@ -444,6 +449,11 @@ int profile_check_line(char *ptr, int lineno, const char *fname) {
444 arg_no3d = 1; 449 arg_no3d = 1;
445 return 0; 450 return 0;
446 } 451 }
452 else if (strcmp(ptr, "noprinters") == 0) {
453 profile_add("blacklist /dev/lp*");
454 profile_add("blacklist /run/cups/cups.sock");
455 return 0;
456 }
447 else if (strcmp(ptr, "noinput") == 0) { 457 else if (strcmp(ptr, "noinput") == 0) {
448 arg_noinput = 1; 458 arg_noinput = 1;
449 return 0; 459 return 0;
@@ -630,7 +640,7 @@ int profile_check_line(char *ptr, int lineno, const char *fname) {
630#endif 640#endif
631 return 0; 641 return 0;
632 } 642 }
633 else if (strncmp(ptr, "netns ", 6) == 0) { 643 else if (strncmp(ptr, "netns ", 6) == 0) {
634#ifdef HAVE_NETWORK 644#ifdef HAVE_NETWORK
635 if (checkcfg(CFG_NETWORK)) { 645 if (checkcfg(CFG_NETWORK)) {
636 arg_netns = ptr + 6; 646 arg_netns = ptr + 6;
@@ -981,10 +991,10 @@ int profile_check_line(char *ptr, int lineno, const char *fname) {
981 warning_feature_disabled("seccomp"); 991 warning_feature_disabled("seccomp");
982 return 0; 992 return 0;
983 } 993 }
984 if (strncmp(ptr, "seccomp.32.drop ", 13) == 0) { 994 if (strncmp(ptr, "seccomp.32.drop ", 16) == 0) {
985 if (checkcfg(CFG_SECCOMP)) { 995 if (checkcfg(CFG_SECCOMP)) {
986 arg_seccomp32 = 1; 996 arg_seccomp32 = 1;
987 cfg.seccomp_list_drop32 = seccomp_check_list(ptr + 13); 997 cfg.seccomp_list_drop32 = seccomp_check_list(ptr + 16);
988 } 998 }
989 else 999 else
990 warning_feature_disabled("seccomp"); 1000 warning_feature_disabled("seccomp");
@@ -1001,10 +1011,10 @@ int profile_check_line(char *ptr, int lineno, const char *fname) {
1001 warning_feature_disabled("seccomp"); 1011 warning_feature_disabled("seccomp");
1002 return 0; 1012 return 0;
1003 } 1013 }
1004 if (strncmp(ptr, "seccomp.32.keep ", 13) == 0) { 1014 if (strncmp(ptr, "seccomp.32.keep ", 16) == 0) {
1005 if (checkcfg(CFG_SECCOMP)) { 1015 if (checkcfg(CFG_SECCOMP)) {
1006 arg_seccomp32 = 1; 1016 arg_seccomp32 = 1;
1007 cfg.seccomp_list_keep32 = seccomp_check_list(ptr + 13); 1017 cfg.seccomp_list_keep32 = seccomp_check_list(ptr + 16);
1008 } 1018 }
1009 else 1019 else
1010 warning_feature_disabled("seccomp"); 1020 warning_feature_disabled("seccomp");
@@ -1124,8 +1134,14 @@ int profile_check_line(char *ptr, int lineno, const char *fname) {
1124 1134
1125 // cgroup 1135 // cgroup
1126 if (strncmp(ptr, "cgroup ", 7) == 0) { 1136 if (strncmp(ptr, "cgroup ", 7) == 0) {
1127 if (checkcfg(CFG_CGROUP)) 1137 if (checkcfg(CFG_CGROUP)) {
1128 set_cgroup(ptr + 7); 1138 cfg.cgroup = strdup(ptr + 7);
1139 if (!cfg.cgroup)
1140 errExit("strdup");
1141
1142 check_cgroup_file(cfg.cgroup);
1143 set_cgroup(cfg.cgroup, getpid());
1144 }
1129 else 1145 else
1130 warning_feature_disabled("cgroup"); 1146 warning_feature_disabled("cgroup");
1131 return 0; 1147 return 0;
@@ -1938,7 +1954,7 @@ char *profile_list_compress(char *list)
1938 /* Include non-empty item */ 1954 /* Include non-empty item */
1939 if (!*item) 1955 if (!*item)
1940 in[i] = 0; 1956 in[i] = 0;
1941 /* Remove all allready included items */ 1957 /* Remove all already included items */
1942 for (k = 0; k < i; ++k) 1958 for (k = 0; k < i; ++k)
1943 in[k] = 0; 1959 in[k] = 0;
1944 break; 1960 break;
diff --git a/src/firejail/restrict_users.c b/src/firejail/restrict_users.c
index 6f17231a4..59077dada 100644
--- a/src/firejail/restrict_users.c
+++ b/src/firejail/restrict_users.c
@@ -21,7 +21,6 @@
21#include "../include/firejail_user.h" 21#include "../include/firejail_user.h"
22#include <sys/mount.h> 22#include <sys/mount.h>
23#include <sys/stat.h> 23#include <sys/stat.h>
24#include <linux/limits.h>
25#include <fnmatch.h> 24#include <fnmatch.h>
26#include <glob.h> 25#include <glob.h>
27#include <dirent.h> 26#include <dirent.h>
diff --git a/src/firejail/run_symlink.c b/src/firejail/run_symlink.c
index 77fac5438..6397418d1 100644
--- a/src/firejail/run_symlink.c
+++ b/src/firejail/run_symlink.c
@@ -22,7 +22,6 @@
22#include <sys/stat.h> 22#include <sys/stat.h>
23#include <unistd.h> 23#include <unistd.h>
24 24
25extern char *find_in_path(const char *program);
26 25
27void run_symlink(int argc, char **argv, int run_as_is) { 26void run_symlink(int argc, char **argv, int run_as_is) {
28 EUID_ASSERT(); 27 EUID_ASSERT();
diff --git a/src/firejail/sandbox.c b/src/firejail/sandbox.c
index 995827fb7..efa21c34b 100644
--- a/src/firejail/sandbox.c
+++ b/src/firejail/sandbox.c
@@ -204,7 +204,7 @@ static void save_umask(void) {
204} 204}
205 205
206static char *create_join_file(void) { 206static char *create_join_file(void) {
207 int fd = open(RUN_JOIN_FILE, O_RDWR|O_CREAT|O_EXCL|O_CLOEXEC, S_IRUSR | S_IWRITE | S_IRGRP | S_IROTH); 207 int fd = open(RUN_JOIN_FILE, O_RDWR|O_CREAT|O_EXCL|O_CLOEXEC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
208 if (fd == -1) 208 if (fd == -1)
209 errExit("open"); 209 errExit("open");
210 if (ftruncate(fd, 1) == -1) 210 if (ftruncate(fd, 1) == -1)
@@ -798,7 +798,7 @@ int sandbox(void* sandbox_arg) {
798 798
799 // trace pre-install 799 // trace pre-install
800 if (need_preload) 800 if (need_preload)
801 fs_trace_preload(); 801 fs_trace_touch_or_store_preload();
802 802
803 // store hosts file 803 // store hosts file
804 if (cfg.hosts_file) 804 if (cfg.hosts_file)
@@ -814,8 +814,11 @@ int sandbox(void* sandbox_arg) {
814 //**************************** 814 //****************************
815 // trace pre-install, this time inside chroot 815 // trace pre-install, this time inside chroot
816 //**************************** 816 //****************************
817 if (need_preload) 817 if (need_preload) {
818 fs_trace_preload(); 818 int rv = unlink(RUN_LDPRELOAD_FILE);
819 (void) rv;
820 fs_trace_touch_or_store_preload();
821 }
819 } 822 }
820 else 823 else
821#endif 824#endif
@@ -887,16 +890,16 @@ int sandbox(void* sandbox_arg) {
887 else if (arg_overlay) 890 else if (arg_overlay)
888 fwarning("private-bin feature is disabled in overlay\n"); 891 fwarning("private-bin feature is disabled in overlay\n");
889 else { 892 else {
893 EUID_USER();
890 // for --x11=xorg we need to add xauth command 894 // for --x11=xorg we need to add xauth command
891 if (arg_x11_xorg) { 895 if (arg_x11_xorg) {
892 EUID_USER();
893 char *tmp; 896 char *tmp;
894 if (asprintf(&tmp, "%s,xauth", cfg.bin_private_keep) == -1) 897 if (asprintf(&tmp, "%s,xauth", cfg.bin_private_keep) == -1)
895 errExit("asprintf"); 898 errExit("asprintf");
896 cfg.bin_private_keep = tmp; 899 cfg.bin_private_keep = tmp;
897 EUID_ROOT();
898 } 900 }
899 fs_private_bin_list(); 901 fs_private_bin_list();
902 EUID_ROOT();
900 } 903 }
901 } 904 }
902 905
@@ -992,7 +995,7 @@ int sandbox(void* sandbox_arg) {
992 995
993 // create /etc/ld.so.preload file again 996 // create /etc/ld.so.preload file again
994 if (need_preload) 997 if (need_preload)
995 fs_trace_preload(); 998 fs_trace_touch_preload();
996 999
997 // openSUSE configuration is split between /etc and /usr/etc 1000 // openSUSE configuration is split between /etc and /usr/etc
998 // process private-etc a second time 1001 // process private-etc a second time
@@ -1004,10 +1007,12 @@ int sandbox(void* sandbox_arg) {
1004 // apply the profile file 1007 // apply the profile file
1005 //**************************** 1008 //****************************
1006 // apply all whitelist commands ... 1009 // apply all whitelist commands ...
1010 EUID_USER();
1007 fs_whitelist(); 1011 fs_whitelist();
1008 1012
1009 // ... followed by blacklist commands 1013 // ... followed by blacklist commands
1010 fs_blacklist(); // mkdir and mkfile are processed all over again 1014 fs_blacklist(); // mkdir and mkfile are processed all over again
1015 EUID_ROOT();
1011 1016
1012 //**************************** 1017 //****************************
1013 // nosound/no3d/notv/novideo and fix for pulseaudio 7.0 1018 // nosound/no3d/notv/novideo and fix for pulseaudio 7.0
diff --git a/src/firejail/selinux.c b/src/firejail/selinux.c
index 6969e7a3d..fa59882ed 100644
--- a/src/firejail/selinux.c
+++ b/src/firejail/selinux.c
@@ -21,6 +21,7 @@
21#include "firejail.h" 21#include "firejail.h"
22#include <sys/types.h> 22#include <sys/types.h>
23#include <sys/stat.h> 23#include <sys/stat.h>
24#include <errno.h>
24 25
25#include <fcntl.h> 26#include <fcntl.h>
26#ifndef O_PATH 27#ifndef O_PATH
@@ -57,7 +58,17 @@ void selinux_relabel_path(const char *path, const char *inside_path)
57 58
58 /* Open the file as O_PATH, to pin it while we determine and adjust the label 59 /* Open the file as O_PATH, to pin it while we determine and adjust the label
59 * Defeat symlink races by not allowing symbolic links */ 60 * Defeat symlink races by not allowing symbolic links */
61 int called_as_root = 0;
62 if (geteuid() == 0)
63 called_as_root = 1;
64 if (called_as_root)
65 EUID_USER();
66
60 fd = safer_openat(-1, path, O_NOFOLLOW|O_CLOEXEC|O_PATH); 67 fd = safer_openat(-1, path, O_NOFOLLOW|O_CLOEXEC|O_PATH);
68
69 if (called_as_root)
70 EUID_ROOT();
71
61 if (fd < 0) 72 if (fd < 0)
62 return; 73 return;
63 if (fstat(fd, &st) < 0) 74 if (fstat(fd, &st) < 0)
@@ -68,8 +79,16 @@ void selinux_relabel_path(const char *path, const char *inside_path)
68 if (arg_debug) 79 if (arg_debug)
69 printf("Relabeling %s as %s (%s)\n", path, inside_path, fcon); 80 printf("Relabeling %s as %s (%s)\n", path, inside_path, fcon);
70 81
71 setfilecon_raw(procfs_path, fcon); 82 if (!called_as_root)
83 EUID_ROOT();
84
85 if (setfilecon_raw(procfs_path, fcon) != 0 && arg_debug)
86 printf("Cannot relabel %s: %s\n", path, strerror(errno));
87
88 if (!called_as_root)
89 EUID_USER();
72 } 90 }
91
73 freecon(fcon); 92 freecon(fcon);
74 close: 93 close:
75 close(fd); 94 close(fd);
diff --git a/src/firejail/util.c b/src/firejail/util.c
index 094a68c60..86977cecf 100644
--- a/src/firejail/util.c
+++ b/src/firejail/util.c
@@ -20,8 +20,6 @@
20#define _XOPEN_SOURCE 500 20#define _XOPEN_SOURCE 500
21#include "firejail.h" 21#include "firejail.h"
22#include "../include/gcov_wrapper.h" 22#include "../include/gcov_wrapper.h"
23#include <ftw.h>
24#include <sys/stat.h>
25#include <sys/mount.h> 23#include <sys/mount.h>
26#include <syslog.h> 24#include <syslog.h>
27#include <errno.h> 25#include <errno.h>
@@ -32,9 +30,6 @@
32#include <sys/wait.h> 30#include <sys/wait.h>
33#include <limits.h> 31#include <limits.h>
34 32
35#include <string.h>
36#include <ctype.h>
37
38#include <fcntl.h> 33#include <fcntl.h>
39#ifndef O_PATH 34#ifndef O_PATH
40#define O_PATH 010000000 35#define O_PATH 010000000
@@ -459,31 +454,21 @@ int is_dir(const char *fname) {
459 if (*fname == '\0') 454 if (*fname == '\0')
460 return 0; 455 return 0;
461 456
462 int called_as_root = 0;
463 if (geteuid() == 0)
464 called_as_root = 1;
465
466 if (called_as_root)
467 EUID_USER();
468
469 // if fname doesn't end in '/', add one 457 // if fname doesn't end in '/', add one
470 int rv; 458 int rv;
471 struct stat s; 459 struct stat s;
472 if (fname[strlen(fname) - 1] == '/') 460 if (fname[strlen(fname) - 1] == '/')
473 rv = stat(fname, &s); 461 rv = stat_as_user(fname, &s);
474 else { 462 else {
475 char *tmp; 463 char *tmp;
476 if (asprintf(&tmp, "%s/", fname) == -1) { 464 if (asprintf(&tmp, "%s/", fname) == -1) {
477 fprintf(stderr, "Error: cannot allocate memory, %s:%d\n", __FILE__, __LINE__); 465 fprintf(stderr, "Error: cannot allocate memory, %s:%d\n", __FILE__, __LINE__);
478 errExit("asprintf"); 466 errExit("asprintf");
479 } 467 }
480 rv = stat(tmp, &s); 468 rv = stat_as_user(tmp, &s);
481 free(tmp); 469 free(tmp);
482 } 470 }
483 471
484 if (called_as_root)
485 EUID_ROOT();
486
487 if (rv == -1) 472 if (rv == -1)
488 return 0; 473 return 0;
489 474
@@ -499,13 +484,6 @@ int is_link(const char *fname) {
499 if (*fname == '\0') 484 if (*fname == '\0')
500 return 0; 485 return 0;
501 486
502 int called_as_root = 0;
503 if (geteuid() == 0)
504 called_as_root = 1;
505
506 if (called_as_root)
507 EUID_USER();
508
509 // remove trailing '/' if any 487 // remove trailing '/' if any
510 char *tmp = strdup(fname); 488 char *tmp = strdup(fname);
511 if (!tmp) 489 if (!tmp)
@@ -513,12 +491,9 @@ int is_link(const char *fname) {
513 trim_trailing_slash_or_dot(tmp); 491 trim_trailing_slash_or_dot(tmp);
514 492
515 char c; 493 char c;
516 ssize_t rv = readlink(tmp, &c, 1); 494 ssize_t rv = readlink_as_user(tmp, &c, 1);
517 free(tmp); 495 free(tmp);
518 496
519 if (called_as_root)
520 EUID_ROOT();
521
522 return (rv != -1); 497 return (rv != -1);
523} 498}
524 499
@@ -540,6 +515,24 @@ char *realpath_as_user(const char *fname) {
540 return rv; 515 return rv;
541} 516}
542 517
518ssize_t readlink_as_user(const char *fname, char *buf, size_t sz) {
519 assert(fname && buf && sz);
520
521 int called_as_root = 0;
522 if (geteuid() == 0)
523 called_as_root = 1;
524
525 if (called_as_root)
526 EUID_USER();
527
528 ssize_t rv = readlink(fname, buf, sz);
529
530 if (called_as_root)
531 EUID_ROOT();
532
533 return rv;
534}
535
543int stat_as_user(const char *fname, struct stat *s) { 536int stat_as_user(const char *fname, struct stat *s) {
544 assert(fname); 537 assert(fname);
545 538
@@ -974,12 +967,9 @@ uid_t pid_get_uid(pid_t pid) {
974} 967}
975 968
976 969
977 970gid_t get_group_id(const char *groupname) {
978
979uid_t get_group_id(const char *group) {
980 // find tty group id
981 gid_t gid = 0; 971 gid_t gid = 0;
982 struct group *g = getgrnam(group); 972 struct group *g = getgrnam(groupname);
983 if (g) 973 if (g)
984 gid = g->gr_gid; 974 gid = g->gr_gid;
985 975
@@ -987,86 +977,6 @@ uid_t get_group_id(const char *group) {
987} 977}
988 978
989 979
990static int remove_callback(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) {
991 (void) sb;
992 (void) typeflag;
993 (void) ftwbuf;
994 assert(fpath);
995
996 if (strcmp(fpath, ".") == 0)
997 return 0;
998
999 if (remove(fpath)) { // removes the link not the actual file
1000 perror("remove");
1001 fprintf(stderr, "Error: cannot remove file from user .firejail directory: %s\n", fpath);
1002 exit(1);
1003 }
1004
1005 return 0;
1006}
1007
1008
1009int remove_overlay_directory(void) {
1010 EUID_ASSERT();
1011 sleep(1);
1012
1013 char *path;
1014 if (asprintf(&path, "%s/.firejail", cfg.homedir) == -1)
1015 errExit("asprintf");
1016
1017 if (access(path, F_OK) == 0) {
1018 pid_t child = fork();
1019 if (child < 0)
1020 errExit("fork");
1021 if (child == 0) {
1022 // open ~/.firejail
1023 int fd = safer_openat(-1, path, O_PATH|O_NOFOLLOW|O_CLOEXEC);
1024 if (fd == -1) {
1025 fprintf(stderr, "Error: cannot open %s\n", path);
1026 exit(1);
1027 }
1028 struct stat s;
1029 if (fstat(fd, &s) == -1)
1030 errExit("fstat");
1031 if (!S_ISDIR(s.st_mode)) {
1032 if (S_ISLNK(s.st_mode))
1033 fprintf(stderr, "Error: %s is a symbolic link\n", path);
1034 else
1035 fprintf(stderr, "Error: %s is not a directory\n", path);
1036 exit(1);
1037 }
1038 if (s.st_uid != getuid()) {
1039 fprintf(stderr, "Error: %s is not owned by the current user\n", path);
1040 exit(1);
1041 }
1042 // chdir to ~/.firejail
1043 if (fchdir(fd) == -1)
1044 errExit("fchdir");
1045 close(fd);
1046
1047 EUID_ROOT();
1048 // FTW_PHYS - do not follow symbolic links
1049 if (nftw(".", remove_callback, 64, FTW_DEPTH | FTW_PHYS) == -1)
1050 errExit("nftw");
1051
1052 EUID_USER();
1053 // remove ~/.firejail
1054 if (rmdir(path) == -1)
1055 errExit("rmdir");
1056
1057 __gcov_flush();
1058
1059 _exit(0);
1060 }
1061 // wait for the child to finish
1062 waitpid(child, NULL, 0);
1063 // check if ~/.firejail was deleted
1064 if (access(path, F_OK) == 0)
1065 return 1;
1066 }
1067 return 0;
1068}
1069
1070// flush stdin if it is connected to a tty and has input 980// flush stdin if it is connected to a tty and has input
1071void flush_stdin(void) { 981void flush_stdin(void) {
1072 if (!isatty(STDIN_FILENO)) 982 if (!isatty(STDIN_FILENO))
@@ -1095,31 +1005,33 @@ int create_empty_dir_as_user(const char *dir, mode_t mode) {
1095 assert(dir); 1005 assert(dir);
1096 mode &= 07777; 1006 mode &= 07777;
1097 1007
1098 if (access(dir, F_OK) != 0) { 1008 if (access(dir, F_OK) == 0)
1009 return 0;
1010
1011 pid_t child = fork();
1012 if (child < 0)
1013 errExit("fork");
1014 if (child == 0) {
1015 // drop privileges
1016 drop_privs(0);
1017
1099 if (arg_debug) 1018 if (arg_debug)
1100 printf("Creating empty %s directory\n", dir); 1019 printf("Creating empty %s directory\n", dir);
1101 pid_t child = fork(); 1020 if (mkdir(dir, mode) == 0) {
1102 if (child < 0) 1021 int err = chmod(dir, mode);
1103 errExit("fork"); 1022 (void) err;
1104 if (child == 0) { 1023 }
1105 // drop privileges 1024 else if (arg_debug)
1106 drop_privs(0); 1025 printf("Directory %s not created: %s\n", dir, strerror(errno));
1107
1108 if (mkdir(dir, mode) == 0) {
1109 int err = chmod(dir, mode);
1110 (void) err;
1111 }
1112 else if (arg_debug)
1113 printf("Directory %s not created: %s\n", dir, strerror(errno));
1114 1026
1115 __gcov_flush(); 1027 __gcov_flush();
1116 1028
1117 _exit(0); 1029 _exit(0);
1118 }
1119 waitpid(child, NULL, 0);
1120 if (access(dir, F_OK) == 0)
1121 return 1;
1122 } 1030 }
1031 waitpid(child, NULL, 0);
1032
1033 if (access(dir, F_OK) == 0)
1034 return 1;
1123 return 0; 1035 return 0;
1124} 1036}
1125 1037
@@ -1509,7 +1421,7 @@ static int has_link(const char *dir) {
1509void check_homedir(const char *dir) { 1421void check_homedir(const char *dir) {
1510 assert(dir); 1422 assert(dir);
1511 if (dir[0] != '/') { 1423 if (dir[0] != '/') {
1512 fprintf(stderr, "Error: invalid user directory \"%s\"\n", cfg.homedir); 1424 fprintf(stderr, "Error: invalid user directory \"%s\"\n", dir);
1513 exit(1); 1425 exit(1);
1514 } 1426 }
1515 // symlinks are rejected in many places 1427 // symlinks are rejected in many places
diff --git a/src/jailcheck/jailcheck.h b/src/jailcheck/jailcheck.h
index be3104da3..3f8c89bfb 100644
--- a/src/jailcheck/jailcheck.h
+++ b/src/jailcheck/jailcheck.h
@@ -61,4 +61,4 @@ char *get_homedir(const char *user, uid_t *uid, gid_t *gid);
61int find_child(pid_t pid); 61int find_child(pid_t pid);
62pid_t switch_to_child(pid_t pid); 62pid_t switch_to_child(pid_t pid);
63 63
64#endif \ No newline at end of file 64#endif
diff --git a/src/jailcheck/noexec.c b/src/jailcheck/noexec.c
index 7f994d6a1..be18ac109 100644
--- a/src/jailcheck/noexec.c
+++ b/src/jailcheck/noexec.c
@@ -110,4 +110,4 @@ void noexec_test(const char *path) {
110 wait(&status); 110 wait(&status);
111 int rv = unlink(fname); 111 int rv = unlink(fname);
112 (void) rv; 112 (void) rv;
113} \ No newline at end of file 113}
diff --git a/src/libtrace/libtrace.c b/src/libtrace/libtrace.c
index d88512b0a..319902ff7 100644
--- a/src/libtrace/libtrace.c
+++ b/src/libtrace/libtrace.c
@@ -18,12 +18,12 @@
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*/ 19*/
20#define _GNU_SOURCE 20#define _GNU_SOURCE
21#include <errno.h>
21#include <stdio.h> 22#include <stdio.h>
22#include <stdlib.h> 23#include <stdlib.h>
23#include <string.h> 24#include <string.h>
24#include <dlfcn.h> 25#include <dlfcn.h>
25#include <sys/types.h> 26#include <sys/types.h>
26#include <limits.h>
27#include <unistd.h> 27#include <unistd.h>
28#include <sys/socket.h> 28#include <sys/socket.h>
29#include <netinet/in.h> 29#include <netinet/in.h>
@@ -706,10 +706,14 @@ __attribute__((constructor))
706static void log_exec(int argc, char** argv) { 706static void log_exec(int argc, char** argv) {
707 (void) argc; 707 (void) argc;
708 (void) argv; 708 (void) argv;
709 static char buf[PATH_MAX + 1]; 709 char *buf = realpath("/proc/self/exe", NULL);
710 int rv = readlink("/proc/self/exe", buf, PATH_MAX); 710 if (buf == NULL) {
711 if (rv != -1) { 711 if (errno == ENOMEM) {
712 buf[rv] = '\0'; // readlink does not add a '\0' at the end 712 tprintf(ftty, "realpath: %s\n", strerror(errno));
713 exit(1);
714 }
715 } else {
713 tprintf(ftty, "%u:%s:exec %s:0\n", mypid, myname, buf); 716 tprintf(ftty, "%u:%s:exec %s:0\n", mypid, myname, buf);
717 free(buf);
714 } 718 }
715} 719}
diff --git a/src/man/firejail-profile.txt b/src/man/firejail-profile.txt
index d0d3c25e8..a1eccaa5e 100644
--- a/src/man/firejail-profile.txt
+++ b/src/man/firejail-profile.txt
@@ -78,7 +78,7 @@ in your desktop environment copy the profile file in ~/.config/firejail director
78Several command line options can be passed to the program using 78Several command line options can be passed to the program using
79profile files. Firejail chooses the profile file as follows: 79profile files. Firejail chooses the profile file as follows:
80 80
81\fB1.\fR If a profile file is provided by the user with \-\-profile option, the profile file is loaded. If a profile name is given, it is searched for first in the ~/.config/firejail directory and if not found then in /etc/firejail directory. Profile names do not include the .profile suffix. 81\fB1.\fR If a profile file is provided by the user with \-\-profile option, the profile file is loaded. If a profile name is given, it is searched for first in the ~/.config/firejail directory and if not found then in /etc/firejail directory. Profile names do not include the .profile suffix.
82Example: 82Example:
83.PP 83.PP
84.RS 84.RS
@@ -174,7 +174,7 @@ Example: "?HAS_APPIMAGE: whitelist ${HOME}/special/appimage/dir"
174 174
175This example will load the whitelist profile line only if the \-\-appimage option has been specified on the command line. 175This example will load the whitelist profile line only if the \-\-appimage option has been specified on the command line.
176 176
177Currently the only conditionals supported this way are HAS_APPIMAGE, HAS_NET, HAS_NODBUS, HAS_NOSOUND, HAS_PRIVATE and HAS_X11. The conditionals BROWSER_DISABLE_U2F and BROWSER_ALLOW_DRM 177Currently the only conditionals supported this way are HAS_APPIMAGE, HAS_NET, HAS_NODBUS, HAS_NOSOUND, HAS_PRIVATE and HAS_X11. The conditionals ALLOW_TRAY, BROWSER_DISABLE_U2F and BROWSER_ALLOW_DRM
178can be enabled or disabled globally in Firejail's configuration file. 178can be enabled or disabled globally in Firejail's configuration file.
179 179
180The profile line may be any profile line that you would normally use in a profile \fBexcept\fR for "quiet" and "include" lines. 180The profile line may be any profile line that you would normally use in a profile \fBexcept\fR for "quiet" and "include" lines.
@@ -324,16 +324,16 @@ Remount the file or the directory noexec, nodev and nosuid.
324#ifdef HAVE_OVERLAYFS 324#ifdef HAVE_OVERLAYFS
325.TP 325.TP
326\fBoverlay 326\fBoverlay
327Mount a filesystem overlay on top of the current filesystem. 327Mount a filesystem overlay on top of the current filesystem.
328The overlay is stored in $HOME/.firejail/<PID> directory. 328The overlay is stored in $HOME/.firejail/<PID> directory.
329.TP 329.TP
330\fBoverlay-named name 330\fBoverlay-named name
331Mount a filesystem overlay on top of the current filesystem. 331Mount a filesystem overlay on top of the current filesystem.
332The overlay is stored in $HOME/.firejail/name directory. 332The overlay is stored in $HOME/.firejail/name directory.
333.TP 333.TP
334\fBoverlay-tmpfs 334\fBoverlay-tmpfs
335Mount a filesystem overlay on top of the current filesystem. 335Mount a filesystem overlay on top of the current filesystem.
336All filesystem modifications are discarded when the sandbox is closed. 336All filesystem modifications are discarded when the sandbox is closed.
337#endif 337#endif
338.TP 338.TP
339\fBprivate 339\fBprivate
@@ -487,12 +487,12 @@ does not result in an increase of privilege.
487#ifdef HAVE_USERNS 487#ifdef HAVE_USERNS
488.TP 488.TP
489\fBnoroot 489\fBnoroot
490Use this command to enable an user namespace. The namespace has only one user, the current user. 490Use this command to enable an user namespace. The namespace has only one user, the current user.
491There is no root account (uid 0) defined in the namespace. 491There is no root account (uid 0) defined in the namespace.
492#endif 492#endif
493.TP 493.TP
494\fBprotocol protocol1,protocol2,protocol3 494\fBprotocol protocol1,protocol2,protocol3
495Enable protocol filter. The filter is based on seccomp and checks the 495Enable protocol filter. The filter is based on seccomp and checks the
496first argument to socket system call. Recognized values: \fBunix\fR, 496first argument to socket system call. Recognized values: \fBunix\fR,
497\fBinet\fR, \fBinet6\fR, \fBnetlink\fR, \fBpacket\fR and \fBbluetooth\fR. 497\fBinet\fR, \fBinet6\fR, \fBnetlink\fR, \fBpacket\fR and \fBbluetooth\fR.
498.TP 498.TP
@@ -606,7 +606,7 @@ Allow the application to see but not talk to the name org.freedesktop.Notificati
606Allow the application to call methods of the interface org.freedesktop.Notifications of the object exposed at the path /org/freedesktop/Notifications by the client owning the bus name org.freedesktop.Notifications on the system DBus. 606Allow the application to call methods of the interface org.freedesktop.Notifications of the object exposed at the path /org/freedesktop/Notifications by the client owning the bus name org.freedesktop.Notifications on the system DBus.
607.TP 607.TP
608\fBdbus-system.broadcast org.freedesktop.Notifications=org.freedesktop.Notifications.*@/org/freedesktop/Notifications 608\fBdbus-system.broadcast org.freedesktop.Notifications=org.freedesktop.Notifications.*@/org/freedesktop/Notifications
609Allow the application to receive broadcast signals from the the interface org.freedesktop.Notifications of the object exposed at the path /org/freedesktop/Notifications by the client owning the bus name org.freedesktop.Notifications on the system DBus. 609Allow the application to receive broadcast signals from the interface org.freedesktop.Notifications of the object exposed at the path /org/freedesktop/Notifications by the client owning the bus name org.freedesktop.Notifications on the system DBus.
610.TP 610.TP
611\fBdbus-user filter 611\fBdbus-user filter
612Enable filtered access to the session DBus. Filters can be specified with the dbus-user.talk and dbus-user.own commands. 612Enable filtered access to the session DBus. Filters can be specified with the dbus-user.talk and dbus-user.own commands.
@@ -873,8 +873,8 @@ a DHCP client and releasing the lease manually.
873 873
874.TP 874.TP
875\fBiprange address,address 875\fBiprange address,address
876Assign an IP address in the provided range to the last network 876Assign an IP address in the provided range to the last network
877interface defined by a net command. A default gateway is assigned by default. 877interface defined by a net command. A default gateway is assigned by default.
878.br 878.br
879 879
880.br 880.br
diff --git a/src/man/firejail.txt b/src/man/firejail.txt
index 0462705c0..e724e4bb9 100644
--- a/src/man/firejail.txt
+++ b/src/man/firejail.txt
@@ -45,7 +45,7 @@ firejail {\-? | \-\-debug-caps | \-\-debug-errnos | \-\-debug-syscalls | \-\-deb
45#ifdef HAVE_LTS 45#ifdef HAVE_LTS
46This is Firejail long-term support (LTS), an enterprise focused version of the software, 46This is Firejail long-term support (LTS), an enterprise focused version of the software,
47LTS is usually supported for two or three years. 47LTS is usually supported for two or three years.
48During this time only bugs and the occasional documentation problems are fixed. 48During this time only bugs and the occasional documentation problems are fixed.
49The attack surface of the SUID executable was greatly reduced by removing some of the features. 49The attack surface of the SUID executable was greatly reduced by removing some of the features.
50.br 50.br
51 51
@@ -109,7 +109,7 @@ ptrace system call allows a full bypass of the seccomp filter.
109.br 109.br
110Example: 110Example:
111.br 111.br
112$ firejail --allow-debuggers --profile=/etc/firejail/firefox.profile strace -f firefox 112$ firejail --allow-debuggers --profile=/etc/firejail/firefox.profile strace -f firefox
113.TP 113.TP
114\fB\-\-allusers 114\fB\-\-allusers
115All directories under /home are visible inside the sandbox. By default, only current user home directory is visible. 115All directories under /home are visible inside the sandbox. By default, only current user home directory is visible.
@@ -290,8 +290,8 @@ $ firejail \-\-caps.print=3272
290Print content of file from sandbox container, see FILE TRANSFER section for more details. 290Print content of file from sandbox container, see FILE TRANSFER section for more details.
291#endif 291#endif
292.TP 292.TP
293\fB\-\-cgroup=tasks-file 293\fB\-\-cgroup=file
294Place the sandbox in the specified control group. tasks-file is the full path of cgroup tasks file. 294Place the sandbox in the specified control group. file is the full path of a tasks or cgroup.procs file.
295.br 295.br
296 296
297.br 297.br
@@ -310,6 +310,11 @@ regular user, nonewprivs and a default capabilities filter are enabled.
310Example: 310Example:
311.br 311.br
312$ firejail \-\-chroot=/media/ubuntu warzone2100 312$ firejail \-\-chroot=/media/ubuntu warzone2100
313.br
314
315.br
316For automatic mounting of X11 and PulseAudio sockets set environment variables
317FIREJAIL_CHROOT_X11 and FIREJAIL_CHROOT_PULSE.
313#endif 318#endif
314.TP 319.TP
315\fB\-\-cpu=cpu-number,cpu-number,cpu-number 320\fB\-\-cpu=cpu-number,cpu-number,cpu-number
@@ -947,7 +952,7 @@ $ firejail \-\-net=eth0 \-\-\iprange=192.168.1.100,192.168.1.150
947 952
948.TP 953.TP
949\fB\-\-ipc-namespace 954\fB\-\-ipc-namespace
950Enable a new IPC namespace if the sandbox was started as a regular user. IPC namespace is enabled by default 955Enable a new IPC namespace if the sandbox was started as a regular user. IPC namespace is enabled by default
951for sandboxes started as root. 956for sandboxes started as root.
952.br 957.br
953 958
@@ -1014,7 +1019,7 @@ $ sudo firejail --join-network=browser /sbin/iptables -vL
1014.br 1019.br
1015 1020
1016.br 1021.br
1017# verify IP addresses 1022# verify IP addresses
1018.br 1023.br
1019$ sudo firejail --join-network=browser ip addr 1024$ sudo firejail --join-network=browser ip addr
1020.br 1025.br
@@ -2134,7 +2139,7 @@ Use k(ilobyte), m(egabyte) or g(igabyte) for size suffix (base 1024).
2134.TP 2139.TP
2135\fB\-\-rlimit-cpu=number 2140\fB\-\-rlimit-cpu=number
2136Set the maximum limit, in seconds, for the amount of CPU time each 2141Set the maximum limit, in seconds, for the amount of CPU time each
2137sandboxed process can consume. When the limit is reached, the processes are killed. 2142sandboxed process can consume. When the limit is reached, the processes are killed.
2138 2143
2139The CPU limit is a limit on CPU seconds rather than elapsed time. CPU seconds is basically how many seconds 2144The CPU limit is a limit on CPU seconds rather than elapsed time. CPU seconds is basically how many seconds
2140the CPU has been in use and does not necessarily directly relate to the elapsed time. Linux kernel keeps 2145the CPU has been in use and does not necessarily directly relate to the elapsed time. Linux kernel keeps
@@ -2178,7 +2183,7 @@ $ firejail \-\-net=eth0 \-\-scan
2178.TP 2183.TP
2179\fB\-\-seccomp 2184\fB\-\-seccomp
2180Enable seccomp filter and blacklist the syscalls in the default list, 2185Enable seccomp filter and blacklist the syscalls in the default list,
2181which is @default-nodebuggers unless \-\-allow-debuggers is specified, 2186which is @default-nodebuggers unless \-\-allow-debuggers is specified,
2182then it is @default. 2187then it is @default.
2183 2188
2184.br 2189.br
@@ -2192,6 +2197,11 @@ More information about groups can be found in /usr/share/doc/firejail/syscalls.t
2192.br 2197.br
2193 2198
2194.br 2199.br
2200The default list can be customized, see \-\-seccomp= for a description.
2201It can be customized also globally in /etc/firejail/firejail.config file.
2202.br
2203
2204.br
2195System architecture is strictly imposed only if flag 2205System architecture is strictly imposed only if flag
2196\-\-seccomp.block-secondary is used. The filter is applied at run time 2206\-\-seccomp.block-secondary is used. The filter is applied at run time
2197only if the correct architecture was detected. For the case of I386 2207only if the correct architecture was detected. For the case of I386
@@ -2206,11 +2216,7 @@ Firejail will print seccomp violations to the audit log if the kernel was compil
2206Example: 2216Example:
2207.br 2217.br
2208$ firejail \-\-seccomp 2218$ firejail \-\-seccomp
2209.br
2210 2219
2211.br
2212The default list can be customized, see \-\-seccomp= for a description. It can be customized
2213also globally in /etc/firejail/firejail.config file.
2214 2220
2215.TP 2221.TP
2216\fB\-\-seccomp=syscall,@group,!syscall2 2222\fB\-\-seccomp=syscall,@group,!syscall2
@@ -2865,7 +2871,7 @@ and it is installed by default on most Linux distributions. It provides support
2865connection model. Untrusted clients are restricted in certain ways to prevent them from reading window 2871connection model. Untrusted clients are restricted in certain ways to prevent them from reading window
2866contents of other clients, stealing input events, etc. 2872contents of other clients, stealing input events, etc.
2867 2873
2868The untrusted mode has several limitations. A lot of regular programs assume they are a trusted X11 clients 2874The untrusted mode has several limitations. A lot of regular programs assume they are a trusted X11 clients
2869and will crash or lock up when run in untrusted mode. Chromium browser and xterm are two examples. 2875and will crash or lock up when run in untrusted mode. Chromium browser and xterm are two examples.
2870Firefox and transmission-gtk seem to be working fine. 2876Firefox and transmission-gtk seem to be working fine.
2871A network namespace is not required for this option. 2877A network namespace is not required for this option.
@@ -3256,7 +3262,7 @@ The owner of the sandbox.
3256.SH RESTRICTED SHELL 3262.SH RESTRICTED SHELL
3257To configure a restricted shell, replace /bin/bash with /usr/bin/firejail in 3263To configure a restricted shell, replace /bin/bash with /usr/bin/firejail in
3258/etc/passwd file for each user that needs to be restricted. Alternatively, 3264/etc/passwd file for each user that needs to be restricted. Alternatively,
3259you can specify /usr/bin/firejail in adduser command: 3265you can specify /usr/bin/firejail in adduser command:
3260 3266
3261adduser \-\-shell /usr/bin/firejail username 3267adduser \-\-shell /usr/bin/firejail username
3262 3268
@@ -3266,7 +3272,7 @@ Additional arguments passed to firejail executable upon login are declared in /e
3266Several command line options can be passed to the program using 3272Several command line options can be passed to the program using
3267profile files. Firejail chooses the profile file as follows: 3273profile files. Firejail chooses the profile file as follows:
3268 3274
32691. If a profile file is provided by the user with --profile=FILE option, the profile FILE is loaded. If a profile name is given, it is searched for first in the ~/.config/firejail directory and if not found then in /etc/firejail directory. Profile names do not include the .profile suffix. If there is a file with the same name as the given profile name, it will be used instead of doing the profile search. To force a profile search, prefix the profile name with a colon (:), eg. --profile=:PROFILE_NAME. 32751. If a profile file is provided by the user with --profile=FILE option, the profile FILE is loaded. If a profile name is given, it is searched for first in the ~/.config/firejail directory and if not found then in /etc/firejail directory. Profile names do not include the .profile suffix. If there is a file with the same name as the given profile name, it will be used instead of doing the profile search. To force a profile search, prefix the profile name with a colon (:), eg. --profile=:PROFILE_NAME.
3270Example: 3276Example:
3271.PP 3277.PP
3272.RS 3278.RS
diff --git a/src/man/firemon.txt b/src/man/firemon.txt
index 76b2f7be2..c4e6e15b3 100644
--- a/src/man/firemon.txt
+++ b/src/man/firemon.txt
@@ -56,7 +56,7 @@ Print route table for each sandbox.
56Print seccomp configuration for each sandbox. 56Print seccomp configuration for each sandbox.
57.TP 57.TP
58\fB\-\-top 58\fB\-\-top
59Monitor the most CPU-intensive sandboxes. This command is similar to 59Monitor the most CPU-intensive sandboxes. This command is similar to
60the regular UNIX top command, however it applies only to sandboxes. 60the regular UNIX top command, however it applies only to sandboxes.
61.TP 61.TP
62\fB\-\-tree 62\fB\-\-tree
diff --git a/src/tools/profcleaner.c b/src/tools/profcleaner.c
index 93bb3f73d..beff93199 100644
--- a/src/tools/profcleaner.c
+++ b/src/tools/profcleaner.c
@@ -72,4 +72,4 @@ int main(int argc, char **argv) {
72 } 72 }
73 73
74 return 0; 74 return 0;
75} \ No newline at end of file 75}
diff --git a/test/environment/environment.sh b/test/environment/environment.sh
index 152975c9d..1e1dd549b 100755
--- a/test/environment/environment.sh
+++ b/test/environment/environment.sh
@@ -112,14 +112,17 @@ echo "TESTING: rlimit (test/environment/rlimit.exp)"
112echo "TESTING: rlimit profile (test/environment/rlimit-profile.exp)" 112echo "TESTING: rlimit profile (test/environment/rlimit-profile.exp)"
113./rlimit-profile.exp 113./rlimit-profile.exp
114 114
115echo "TESTING: rlimit join (test/environment/rlimit-join.exp)"
116./rlimit-join.exp
117
115echo "TESTING: rlimit errors (test/environment/rlimit-bad.exp)" 118echo "TESTING: rlimit errors (test/environment/rlimit-bad.exp)"
116./rlimit-bad.exp 119./rlimit-bad.exp
117 120
118echo "TESTING: rlimit errors profile (test/environment/rlimit-bad-profile.exp)" 121echo "TESTING: rlimit errors profile (test/environment/rlimit-bad-profile.exp)"
119./rlimit-bad-profile.exp 122./rlimit-bad-profile.exp
120 123
121echo "TESTING: deterministic exit code (test/environment/deterministic-exit-code.exp" 124echo "TESTING: deterministic exit code (test/environment/deterministic-exit-code.exp)"
122./deterministic-exit-code.exp 125./deterministic-exit-code.exp
123 126
124echo "TESTING: retain umask (test/environment/umask.exp" 127echo "TESTING: retain umask (test/environment/umask.exp)"
125(umask 123 && ./umask.exp) 128(umask 123 && ./umask.exp)
diff --git a/test/environment/rlimit-join.exp b/test/environment/rlimit-join.exp
new file mode 100755
index 000000000..aa8a203c0
--- /dev/null
+++ b/test/environment/rlimit-join.exp
@@ -0,0 +1,36 @@
1#!/usr/bin/expect -f
2# This file is part of Firejail project
3# Copyright (C) 2014-2021 Firejail Authors
4# License GPL v2
5
6set timeout 10
7cd /home
8spawn $env(SHELL)
9match_max 100000
10
11send -- "firejail --noprofile --name=\"rlimit testing\"\r"
12expect {
13 timeout {puts "TESTING ERROR 0\n";exit}
14 "Child process initialized"
15}
16sleep 1
17
18spawn $env(SHELL)
19send -- "firejail --rlimit-nofile=1234 --join=\"rlimit testing\"\r"
20expect {
21 timeout {puts "TESTING ERROR 1\n";exit}
22 "Switching to pid"
23}
24sleep 1
25
26send -- "cat /proc/self/limits\r"
27expect {
28 timeout {puts "TESTING ERROR 2\n";exit}
29 "Max open files 1234 1234"
30}
31after 100
32
33send -- "exit\r"
34after 100
35
36puts "\nall done\n"
diff --git a/test/utils/build.exp b/test/utils/build.exp
index 104ac037c..b9733c137 100755
--- a/test/utils/build.exp
+++ b/test/utils/build.exp
@@ -13,7 +13,7 @@ after 100
13send -- "firejail --build cat ~/_firejail-test-file\r" 13send -- "firejail --build cat ~/_firejail-test-file\r"
14expect { 14expect {
15 timeout {puts "TESTING ERROR 0\n";exit} 15 timeout {puts "TESTING ERROR 0\n";exit}
16 "allow $\{HOME\}/_firejail-test-file" 16 "whitelist $\{HOME\}/_firejail-test-file"
17} 17}
18expect { 18expect {
19 timeout {puts "TESTING ERROR 1\n";exit} 19 timeout {puts "TESTING ERROR 1\n";exit}