294 lines
10 KiB
Text
294 lines
10 KiB
Text
# apparmor.d - Full set of apparmor profiles
|
|
# Copyright (C) 2015-2022 Mikhail Morfikov
|
|
# Copyright (C) 2021-2022 Alexandre Pujol <alexandre@pujol.io>
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
abi <abi/3.0>,
|
|
|
|
include <tunables/global>
|
|
|
|
@{firefox_name} = firefox{,.sh,-esr,-bin}
|
|
@{firefox_lib_dirs} = @{lib}/@{firefox_name} /opt/@{firefox_name}
|
|
@{firefox_config_dirs} = @{HOME}/.mozilla/
|
|
@{firefox_cache_dirs} = @{user_cache_dirs}/mozilla/
|
|
|
|
@{exec_path} = @{bin}/@{firefox_name} @{firefox_lib_dirs}/@{firefox_name}
|
|
profile firefox @{exec_path} flags=(attach_disconnected) {
|
|
include <abstractions/base>
|
|
include <abstractions/audio>
|
|
include <abstractions/dbus-gtk>
|
|
include <abstractions/dbus-session-strict>
|
|
include <abstractions/dbus-strict>
|
|
include <abstractions/dconf-write>
|
|
include <abstractions/enchant>
|
|
include <abstractions/fontconfig-cache-read>
|
|
include <abstractions/fonts>
|
|
include <abstractions/freedesktop.org>
|
|
include <abstractions/gstreamer>
|
|
include <abstractions/gtk>
|
|
include <abstractions/mesa>
|
|
include <abstractions/nameservice-strict>
|
|
include <abstractions/opencl>
|
|
include <abstractions/ssl_certs>
|
|
include <abstractions/thumbnails-cache-read>
|
|
include <abstractions/user-download-strict>
|
|
include <abstractions/user-read>
|
|
include <abstractions/vulkan>
|
|
|
|
capability sys_admin, # If kernel.unprivileged_userns_clone = 1
|
|
capability sys_chroot, # If kernel.unprivileged_userns_clone = 1
|
|
capability sys_ptrace,
|
|
|
|
network inet dgram,
|
|
network inet6 dgram,
|
|
network inet stream,
|
|
network inet6 stream,
|
|
network netlink raw,
|
|
|
|
ptrace peer=@{profile_name},
|
|
|
|
signal (send) set=(term, kill) peer=keepassxc-proxy,
|
|
signal (send) set=(term, kill) peer=firefox-*,
|
|
|
|
dbus send bus=session path=/org/freedesktop/DBus
|
|
interface=org.freedesktop.DBus
|
|
member={RequestName,ReleaseName}
|
|
peer=(name=org.freedesktop.DBus, label=dbus-daemon),
|
|
|
|
dbus send bus=session path=/ScreenSaver
|
|
interface=org.freedesktop.ScreenSaver
|
|
member={Inhibit,UnInhibit}
|
|
peer=(name=org.freedesktop.ScreenSaver),
|
|
|
|
dbus send bus=session path=/org/freedesktop/portal/desktop
|
|
interface=org.freedesktop.portal.Settings
|
|
member=Read
|
|
peer=(name=:*),
|
|
|
|
dbus receive bus=session path=/org/freedesktop/portal/desktop
|
|
interface=org.freedesktop.portal.Settings
|
|
member=SettingChanged
|
|
peer=(name=:*),
|
|
|
|
dbus send bus=session path=/org/freedesktop/portal/desktop
|
|
interface=org.freedesktop.DBus.Properties
|
|
member={GetAll,Read}
|
|
peer=(name=:*),
|
|
|
|
dbus send bus=system path=/org/freedesktop/UPower
|
|
interface=org.freedesktop.UPower
|
|
member=EnumerateDevices
|
|
peer=(name=org.freedesktop.UPower),
|
|
|
|
dbus send bus=session path=/org/freedesktop/PowerManagement/Inhibit
|
|
interface=org.freedesktop.PowerManagement.Inhibit
|
|
member=Inhibit
|
|
peer=(name=org.freedesktop.PowerManagement),
|
|
|
|
dbus send bus=system path=/org/freedesktop/RealtimeKit[0-9]*
|
|
member={Get,MakeThreadHighPriority,MakeThreadRealtime,MakeThreadRealtimeWithPID}
|
|
peer=(name=org.freedesktop.RealtimeKit[0-9]*),
|
|
|
|
dbus (send, receive) bus=session path=/org/mpris/MediaPlayer2
|
|
interface=org.freedesktop.DBus.Properties
|
|
member={GetAll,PropertiesChanged}
|
|
peer=(name="{org.freedesktop.DBus,:*}"),
|
|
|
|
dbus receive bus=session path=/org/mpris/MediaPlayer2
|
|
interface=org.mpris.MediaPlayer2.Playlists
|
|
member=GetPlaylists
|
|
peer=(name=:*),
|
|
|
|
dbus receive bus=system path=/org/freedesktop/login[0-9]*
|
|
interface=org.freedesktop.login[0-9]*.Manager
|
|
member={SessionNew,SessionRemoved,UserNew,UserRemoved,PrepareForShutdown}
|
|
peer=(name=:*),
|
|
|
|
dbus send bus=session path=/org/gtk/vfs/metadata
|
|
interface=org.gtk.vfs.Metadata
|
|
member=GetTreeFromDevice
|
|
peer=(name=:*),
|
|
|
|
dbus send bus=session path=/org/mozilla/firefox/Remote
|
|
interface=org.mozilla.firefox
|
|
member=OpenURL
|
|
peer=(name=org.mozilla.firefox.*, label=@{profile_name}),
|
|
|
|
dbus receive bus=session path=/org/mozilla/firefox/Remote
|
|
interface=org.mozilla.firefox
|
|
member=OpenURL
|
|
peer=(name=:*, label=@{profile_name}),
|
|
|
|
dbus bind bus=session
|
|
name=org.mpris.MediaPlayer2.firefox.*,
|
|
|
|
dbus bind bus=session
|
|
name=org.mozilla.firefox.*,
|
|
|
|
deny dbus send bus=system path=/org/freedesktop/hostname[0-9]*,
|
|
|
|
@{exec_path} mrix,
|
|
|
|
@{bin}/{,ba,da}sh rix,
|
|
@{bin}/basename rix,
|
|
@{bin}/expr rix,
|
|
|
|
@{firefox_lib_dirs}/{,**} r,
|
|
@{firefox_lib_dirs}/*.so mr,
|
|
@{firefox_lib_dirs}/crashreporter rPx,
|
|
@{firefox_lib_dirs}/glxtest rPx,
|
|
@{firefox_lib_dirs}/minidump-analyzer rPx,
|
|
@{firefox_lib_dirs}/pingsender rPx,
|
|
@{firefox_lib_dirs}/plugin-container rPx,
|
|
@{firefox_lib_dirs}/vaapitest rPx,
|
|
@{lib}/mozilla/kmozillahelper rPUx,
|
|
|
|
@{lib}/@{multiarch}/qt5/plugins/kf5/org.kde.kwindowsystem.platforms/KF5WindowSystemX11Plugin.so mr,
|
|
@{lib}/mozilla/plugins/ r,
|
|
@{lib}/mozilla/plugins/libvlcplugin.so mr,
|
|
|
|
# Desktop integration
|
|
@{bin}/exo-open rPx -> child-open,
|
|
@{bin}/gnome-software rPx,
|
|
@{bin}/kreadconfig5 rix,
|
|
@{bin}/lsb_release rPx -> lsb_release,
|
|
@{bin}/update-mime-database rPx,
|
|
@{bin}/xdg-open rPx -> child-open,
|
|
@{lib}/@{multiarch}/glib-[0-9]*/gio-launch-desktop rPx -> child-open,
|
|
@{lib}/gio-launch-desktop rPx -> child-open,
|
|
@{lib}/gvfsd-metadata rPx,
|
|
|
|
# Common extensions
|
|
/opt/net.downloadhelper.coapp/bin/net.downloadhelper.coapp* rPx,
|
|
@{bin}/browserpass rPx,
|
|
# As a temporary solution - see issue #128
|
|
@{bin}/keepassxc-proxy rix,
|
|
|
|
/usr/share/doc/{,**} r,
|
|
/usr/share/egl/{,**} r,
|
|
/usr/share/@{firefox_name}/{,**} r,
|
|
/usr/share/libdrm/*.ids r,
|
|
/usr/share/mozilla/extensions/{,**} r,
|
|
/usr/share/webext/{,**} r,
|
|
/usr/share/xul-ext/kwallet5/* r,
|
|
|
|
/etc/@{firefox_name}/{,**} r,
|
|
/etc/fstab r,
|
|
/etc/cups/client.conf r,
|
|
/etc/igfx_user_feature{,_next}.txt w,
|
|
/etc/libva.conf r,
|
|
/etc/mailcap r,
|
|
/etc/mime.types r,
|
|
/etc/opensc.conf r,
|
|
/etc/xul-ext/kwallet5.js r,
|
|
|
|
/var/lib/nscd/services r,
|
|
|
|
owner @{HOME}/ r,
|
|
owner @{HOME}/.cups/lpoptions r,
|
|
|
|
owner @{user_cache_dirs}/ rw,
|
|
|
|
owner @{user_config_dirs}/ r,
|
|
owner @{user_config_dirs}/gtk-{3,4}.0/assets/*.svg r,
|
|
owner @{user_config_dirs}/ibus/bus/ r,
|
|
owner @{user_config_dirs}/ibus/bus/@{md5}-unix-{,wayland-}@{int} r,
|
|
owner @{user_config_dirs}/mimeapps.list{,.@{rand6}} rw,
|
|
|
|
owner @{user_share_dirs}/ r,
|
|
owner @{user_share_dirs}/applications/userapp-Firefox-@{rand6}.desktop{,.@{rand6}} rw,
|
|
owner @{user_share_dirs}/mime/packages/user-extension-{htm,html,xht,xhtml,shtml}.xml rw,
|
|
owner @{user_share_dirs}/mime/packages/user-extension-{htm,html,xht,xhtml,shtml}.xml.* rw,
|
|
|
|
owner @{firefox_config_dirs}/ rw,
|
|
owner @{firefox_config_dirs}/{extensions,systemextensionsdev}/ rw,
|
|
owner @{firefox_config_dirs}/extensions/\{*\}/ r,
|
|
owner @{firefox_config_dirs}/firefox/ rw,
|
|
owner @{firefox_config_dirs}/firefox/*/ rw,
|
|
owner @{firefox_config_dirs}/firefox/*/** rwk,
|
|
owner @{firefox_config_dirs}/firefox/installs.ini rw,
|
|
owner @{firefox_config_dirs}/firefox/profiles.ini rw,
|
|
owner @{firefox_config_dirs}/native-messaging-hosts/org.keepassxc.keepassxc_browser.json r,
|
|
|
|
owner @{firefox_cache_dirs}/ rw,
|
|
owner @{firefox_cache_dirs}/** rwk,
|
|
|
|
/tmp/ r,
|
|
/var/tmp/ r,
|
|
owner /tmp/@{firefox_name}/ rw,
|
|
owner /tmp/@{firefox_name}/* rwk,
|
|
owner /tmp/* rw,
|
|
owner /tmp/firefox_*/ rw,
|
|
owner /tmp/firefox_*/* rwk,
|
|
owner /tmp/mozilla_*/ rw,
|
|
owner /tmp/mozilla_*/* rw,
|
|
owner /tmp/MozillaBackgroundTask-*-removeDirectory/ rw,
|
|
owner /tmp/MozillaBackgroundTask-*-removeDirectory/** rwk,
|
|
owner /tmp/Mozillato-be-removed-cachePurge-* k,
|
|
owner /tmp/Temp-*/ rw,
|
|
|
|
@{run}/mount/utab r,
|
|
|
|
@{run}/udev/data/+input* r, # for mouse, keyboard, touchpad
|
|
@{run}/udev/data/c13:[0-9]* r, # for /dev/input/*
|
|
|
|
@{sys}/bus/ r,
|
|
@{sys}/cgroup/cpu,cpuacct/user.slice/cpu.cfs_quota_us r,
|
|
@{sys}/class/ r,
|
|
@{sys}/class/**/ r,
|
|
@{sys}/devices/**/uevent r,
|
|
@{sys}/devices/pci[0-9]*/**/ r,
|
|
@{sys}/devices/pci[0-9]*/**/drm/card@{int}/ r,
|
|
@{sys}/devices/pci[0-9]*/**/drm/renderD[0-9]*/ r,
|
|
@{sys}/devices/pci[0-9]*/**/irq r,
|
|
@{sys}/devices/system/cpu/cpu@{int}/cache/index[0-9]/size r,
|
|
@{sys}/devices/system/cpu/cpufreq/policy[0-9]/cpuinfo_max_freq r,
|
|
@{sys}/devices/system/cpu/present r,
|
|
@{sys}/fs/cgroup/cpu,cpuacct/cpu.cfs_quota_us r,
|
|
|
|
owner @{sys}/fs/cgroup/user.slice/user-@{uid}.slice/user@@{uid}.service/background.slice/*/cpu.max r,
|
|
|
|
@{PROC}/@{pid}/net/arp r,
|
|
@{PROC}/@{pid}/net/if_inet6 r,
|
|
@{PROC}/@{pid}/net/route r,
|
|
owner @{PROC}/@{pid}/cgroup r,
|
|
owner @{PROC}/@{pid}/comm r,
|
|
owner @{PROC}/@{pid}/fd/ r,
|
|
owner @{PROC}/@{pid}/gid_map w, # If kernel.unprivileged_userns_clone = 1
|
|
owner @{PROC}/@{pid}/mountinfo r,
|
|
owner @{PROC}/@{pid}/mounts r,
|
|
owner @{PROC}/@{pid}/oom_score_adj w,
|
|
owner @{PROC}/@{pid}/setgroups w, # If kernel.unprivileged_userns_clone = 1
|
|
owner @{PROC}/@{pid}/smaps r,
|
|
owner @{PROC}/@{pid}/stat r,
|
|
owner @{PROC}/@{pid}/statm r,
|
|
owner @{PROC}/@{pid}/task/ r,
|
|
owner @{PROC}/@{pid}/task/@{tid}/comm rw,
|
|
owner @{PROC}/@{pid}/task/@{tid}/stat r,
|
|
owner @{PROC}/@{pid}/uid_map w, # If kernel.unprivileged_userns_clone = 1
|
|
owner @{PROC}/@{pids}/cmdline r,
|
|
owner @{PROC}/@{pids}/environ r,
|
|
|
|
/dev/ r,
|
|
/dev/hidraw@{int} rw,
|
|
/dev/shm/ r,
|
|
/dev/tty rw,
|
|
/dev/video@{int} rw,
|
|
owner /dev/dri/card@{int} rw, # File Inherit
|
|
owner /dev/shm/org.chromium.* rw,
|
|
owner /dev/shm/org.mozilla.ipc.@{pid}.@{int} rw,
|
|
owner /dev/shm/wayland.mozilla.ipc.@{int} rw,
|
|
owner /dev/tty@{int} rw, # File Inherit
|
|
|
|
# X-tiny
|
|
/tmp/.X0-lock r,
|
|
|
|
# Silencer
|
|
deny @{firefox_lib_dirs}/** w,
|
|
deny @{run}/user/@{uid}/gnome-shell-disable-extensions w,
|
|
deny /tmp/MozillaUpdateLock-* w,
|
|
deny owner @{HOME}/.* r,
|
|
deny owner @{user_share_dirs}/gvfs-metadata/{,*} r,
|
|
|
|
include if exists <local/firefox>
|
|
}
|