/
etc
/
apparmor.d
/
/etc/apparmor.d
mkdir
upload
Name
Size
Mode
Actions
abi/
-
0755
rm
abstractions/
-
0755
rm
disable/
-
0755
rm
force-complain/
-
0755
rm
local/
-
0755
rm
rsyslog.d/
-
0755
rm
tunables/
-
0755
rm
1password
354
0644
edit
dl
rm
balena-etcher
374
0644
edit
dl
rm
brave
348
0644
edit
dl
rm
buildah
342
0644
edit
dl
rm
busybox
342
0644
edit
dl
rm
cam
330
0644
edit
dl
rm
ch-checkns
351
0644
edit
dl
rm
ch-run
339
0644
edit
dl
rm
chrome
349
0644
edit
dl
rm
code
349
0644
edit
dl
rm
crun
333
0644
edit
dl
rm
devhelp
342
0644
edit
dl
rm
Discord
352
0644
edit
dl
rm
element-desktop
368
0644
edit
dl
rm
epiphany
356
0644
edit
dl
rm
evolution
348
0644
edit
dl
rm
firefox
410
0644
edit
dl
rm
flatpak
342
0644
edit
dl
rm
foliate
342
0644
edit
dl
rm
geary
336
0644
edit
dl
rm
github-desktop
378
0644
edit
dl
rm
goldendict
353
0644
edit
dl
rm
ipa_verify
351
0644
edit
dl
rm
kchmviewer
353
0644
edit
dl
rm
keybase
346
0644
edit
dl
rm
lc-compliance
360
0644
edit
dl
rm
libcamerify
354
0644
edit
dl
rm
linux-sandbox
383
0644
edit
dl
rm
loupe
336
0644
edit
dl
rm
lsb_release
1379
0644
edit
dl
rm
lxc-attach
351
0644
edit
dl
rm
lxc-create
351
0644
edit
dl
rm
lxc-destroy
354
0644
edit
dl
rm
lxc-execute
354
0644
edit
dl
rm
lxc-stop
345
0644
edit
dl
rm
lxc-unshare
354
0644
edit
dl
rm
lxc-usernsexec
363
0644
edit
dl
rm
mmdebstrap
351
0644
edit
dl
rm
MongoDB_Compass
386
0644
edit
dl
rm
msedge
352
0644
edit
dl
rm
nautilus
346
0644
edit
dl
rm
notepadqq
402
0644
edit
dl
rm
nvidia_modprobe
1213
0644
edit
dl
rm
obsidian
350
0644
edit
dl
rm
opam
333
0644
edit
dl
rm
opera
355
0644
edit
dl
rm
pageedit
347
0644
edit
dl
rm
plasmashell
680
0644
edit
dl
rm
podman
339
0644
edit
dl
rm
polypane
350
0644
edit
dl
rm
privacybrowser
365
0644
edit
dl
rm
qcam
333
0644
edit
dl
rm
qmapshack
348
0644
edit
dl
rm
QtWebEngineProcess
404
0644
edit
dl
rm
qutebrowser
354
0644
edit
dl
rm
rootlesskit
354
0644
edit
dl
rm
rpm
330
0644
edit
dl
rm
rssguard
347
0644
edit
dl
rm
runc
334
0644
edit
dl
rm
sbuild
339
0644
edit
dl
rm
sbuild-abort
357
0644
edit
dl
rm
sbuild-adduser
364
0644
edit
dl
rm
sbuild-apt
351
0644
edit
dl
rm
sbuild-checkpackages
381
0644
edit
dl
rm
sbuild-clean
357
0644
edit
dl
rm
sbuild-createchroot
378
0644
edit
dl
rm
sbuild-destroychroot
382
0644
edit
dl
rm
sbuild-distupgrade
375
0644
edit
dl
rm
sbuild-hold
354
0644
edit
dl
rm
sbuild-shell
365
0644
edit
dl
rm
sbuild-unhold
360
0644
edit
dl
rm
sbuild-update
360
0644
edit
dl
rm
sbuild-upgrade
363
0644
edit
dl
rm
scide
355
0644
edit
dl
rm
signal-desktop
366
0644
edit
dl
rm
slack
342
0644
edit
dl
rm
slirp4netns
354
0644
edit
dl
rm
steam
363
0644
edit
dl
rm
stress-ng
348
0644
edit
dl
rm
surfshark
354
0644
edit
dl
rm
systemd-coredump
377
0644
edit
dl
rm
thunderbird
354
0644
edit
dl
rm
toybox
335
0644
edit
dl
rm
transmission
2400
0644
edit
dl
rm
trinity
342
0644
edit
dl
rm
tup
330
0644
edit
dl
rm
tuxedo-control-center
400
0644
edit
dl
rm
ubuntu_pro_apt_news
2064
0644
edit
dl
rm
ubuntu_pro_esm_cache
7217
0644
edit
dl
rm
unix-chkpwd
881
0644
edit
dl
rm
unprivileged_userns
699
0644
edit
dl
rm
userbindmount
360
0644
edit
dl
rm
usr.bin.man
3448
0644
edit
dl
rm
usr.bin.tcpdump
1687
0644
edit
dl
rm
usr.lib.snapd.snap-confine.real
31701
0644
edit
dl
rm
usr.sbin.chronyd
2838
0644
edit
dl
rm
usr.sbin.mysqld
2006
0644
edit
dl
rm
usr.sbin.rsyslogd
1872
0644
edit
dl
rm
uwsgi-core
351
0644
edit
dl
rm
vdens
336
0644
edit
dl
rm
virtiofsd
352
0644
edit
dl
rm
vivaldi-bin
358
0644
edit
dl
rm
vpnns
336
0644
edit
dl
rm
wike
333
0644
edit
dl
rm
wpcom
346
0644
edit
dl
rm
Edit:
/etc/apparmor.d/usr.lib.snapd.snap-confine.real
(31701B)
# Author: Jamie Strandboge <jamie@canonical.com> #include <tunables/global> @{SNAP_MOUNT_DIR_LIST}="{,/var/lib/snapd}/snap" /usr/lib/snapd/snap-confine (attach_disconnected) { # Include any additional files that snapd chose to generate. # - for $HOME on remote file system. # - for $HOME on encrypted media # # Those are discussed on https://forum.snapcraft.io/t/snapd-vs-upstream-kernel-vs-apparmor # and https://forum.snapcraft.io/t/snaps-and-nfs-home/ #include "/var/lib/snapd/apparmor/snap-confine" # We run privileged, so be fanatical about what we include and don't use # any abstractions /etc/ld.so.cache r, /etc/ld.so.preload r, # Do not assume that the interpreter is always named like # ld-linux-x86_64.so, as on some architectures there can be a version after # the .so suffix, eg. ld-linux-aarch64.so.1 /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/{,atomics/}}ld{-*,64}.so* mrix, # libc, you are funny /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,glibc-hwcaps/*/,@{multiarch}/{,atomics/}}libc{,-[0-9]*}.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/{,atomics/}}libpthread{,-[0-9]*}.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libreadline{,-[0-9]*}.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/{,atomics/}}librt{,-[0-9]*}.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libgcc_s.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libncursesw{,-[0-9]*}.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/{,atomics/}}libresolv{,-[0-9]*}.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libselinux.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libpcre{,2}{,-[0-9]*}.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libmount.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libblkid.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libuuid.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libm.so* mr, # normal libs in order /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libapparmor.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libcgmanager.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/{,atomics/}}libdl{,-[0-9]*}.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libnih.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libnih-dbus.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libdbus-1.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libudev.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libseccomp.so* mr, /{,{,var/lib/snapd/}snap/{snapd,core}/*/}{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libcap.so* mr, /usr/lib/snapd/snap-confine mr, # This rule is needed when executing from a "base: core" devmode snap on # UC18 and newer where the /usr/lib/snapd/snap-confine inside the # "base: core" mount namespace always comes from the snapd snap, and thus # we will execute snap-confine via this path, and thus need to be able to # read this path when executing. It's also necessary on classic where both # the snapd and the core snap are installed at the same time. # TODO: remove this rule when we stop supporting executing other snaps from # inside devmode snaps, ideally even in the short term we would only include # this rule on core only, and specifically uc18 and newer where we need it #@VERBATIM_LIBEXECDIR_SNAP_CONFINE@ mr, /dev/null rw, /dev/full rw, /dev/zero rw, /dev/random r, /dev/urandom r, /dev/pts/[0-9]* rw, /dev/tty rw, # Stdout may be inherited from systemd. This is normally provided by <abstractions/base> /{,var/}run/systemd/journal/stdout rw, # SNAP_MOUNT_DIR probe logic /proc/1/root/snap r, # cgroup: devices capability sys_admin, capability dac_read_search, capability dac_override, /sys/fs/cgroup/ r, /sys/fs/cgroup/devices/ r, /sys/fs/cgroup/devices/snap.*/ rw, /sys/fs/cgroup/devices/snap.*/cgroup.procs w, /sys/fs/cgroup/devices/snap.*/devices.{allow,deny} w, # cgroup: freezer # Allow creating per-snap cgroup freezers and adding snap command (task) # invocations to the freezer. This allows for reliably enumerating all # running processes for the snap. In addition, allow enumerating processes # in the cgroup to determine if it is occupied. /sys/fs/cgroup/freezer/ r, /sys/fs/cgroup/freezer/snap.*/ w, /sys/fs/cgroup/freezer/snap.*/cgroup.procs rw, /sys/fs/cgroup/ r, /sys/fs/cgroup/** r, # required by glibc and usually provided by <abstractions/base> /sys/kernel/mm/transparent_hugepage/enabled r, /sys/kernel/mm/transparent_hugepage/hpage_pmd_size r, # cgroup: reading own cgroup @{PROC}/@{pid}/cgroup r, # cgroup: manage bpf map for device cgroup /sys/fs/bpf/ r, /sys/fs/bpf/snap/ rw, /sys/fs/bpf/snap/* rw, # s-c may need to raise the memlock limit capability sys_resource, # querying udev /etc/udev/udev.conf r, /sys/**/uevent r, /run/udev/** rw, /usr/lib/locale/** r, /usr/lib/@{multiarch}/gconv/gconv-modules r, /usr/lib/@{multiarch}/gconv/gconv-modules.cache r, # priv dropping capability setuid, capability setgid, # changing profile @{PROC}/[0-9]*/attr/{,apparmor/}exec w, # Reading current profile @{PROC}/[0-9]*/attr/{,apparmor/}current r, # Reading available filesystems @{PROC}/filesystems r, # To find where apparmor is mounted @{PROC}/[0-9]*/mounts r, # To find if apparmor is enabled /sys/module/apparmor/parameters/enabled r, # For detecting if we're in a container /run/systemd/container r, # Don't allow changing profile to unconfined or profiles that start with # '/'. Use 'unsafe' to support snap-exec on armhf and its reliance on # the environment for determining the capabilities of the architecture. # 'unsafe' is ok here because the kernel will have already cleared the # environment as part of launching snap-confine with CAP_SYS_ADMIN. This # does leave directories as configured by ld.so.preload as well as # LD_PRELOAD to be set to a library which is in a directory configured by # ld.so.conf, but access to those locations is mediated by this profile # (which requires rules for specific locations). # TODO: use GenerateAAREExclusionPatterns for this, though the first # rule and the fact that the generative aspect is not an absolute filepath # complicate using that function directly change_profile unsafe /** -> [^u/]**, change_profile unsafe /** -> u[^n]**, change_profile unsafe /** -> un[^c]**, change_profile unsafe /** -> unc[^o]**, change_profile unsafe /** -> unco[^n]**, change_profile unsafe /** -> uncon[^f]**, change_profile unsafe /** -> unconf[^i]**, change_profile unsafe /** -> unconfi[^n]**, change_profile unsafe /** -> unconfin[^e]**, change_profile unsafe /** -> unconfine[^d]**, change_profile unsafe /** -> unconfined?**, # allow changing to a few not caught above change_profile unsafe /** -> {u,un,unc,unco,uncon,unconf,unconfi,unconfin,unconfine}, # LP: #1446794 - when this bug is fixed, change the above to: # deny change_profile unsafe /** -> {unconfined,/**}, # change_profile unsafe /** -> **, # reading seccomp filters. # Note 1: We still need to consider .bin extension because of global.bin file. # Note 2: This rule is not needed because of rule '/var/lib/** rw', however we keep it because at # some point we want to investigate if we can narrow the scope of the aforementioned rule. /{tmp/snap-private-tmp/snap.rootfs_*/,}var/lib/snapd/seccomp/bpf/*.bin{,2} r, # adding a missing bpf mount; nosuid/nodev/noexec are required for hardening mount fstype=bpf options=(rw nosuid nodev noexec) bpf -> /sys/fs/bpf/, # For mounting base dir by dir (write dirs and mount on them) /tmp/snap-private-tmp/snap.rootfs_** rw, mount options=(remount ro) -> /tmp/snap-private-tmp/snap.rootfs_*/, mount options=(rw rbind) @{SNAP_MOUNT_DIR_LIST}/*/*/**/ -> /tmp/snap-private-tmp/snap.rootfs_**/, # For mounting individual files mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/** -> /tmp/snap-private-tmp/snap.rootfs_*/**, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_**/, # Allow mounting dirs from / mount options=(rw rbind) /*/ -> /tmp/snap-private-tmp/snap.rootfs_**/, # LP: #1668659 and parallel instances of classic snaps mount options=(rw rbind) /snap/ -> /snap/, mount options=(rw rshared) -> /snap/, mount options=(rw rbind) /var/lib/snapd/snap/ -> /var/lib/snapd/snap/, mount options=(rw rshared) -> /var/lib/snapd/snap/, # boostrapping the mount namespace /tmp/snap-private-tmp/snap.rootfs_*/ rw, mount fstype=tmpfs none -> /tmp/snap-private-tmp/snap.rootfs_*/, mount options=(rw rshared) -> /, mount options=(rw bind) /tmp/snap-private-tmp/snap.rootfs_*/ -> /tmp/snap-private-tmp/snap.rootfs_*/, mount options=(rw unbindable) -> /tmp/snap-private-tmp/snap.rootfs_*/, # the next line is for classic system mount options=(rw rbind) @{SNAP_MOUNT_DIR_LIST}/*/*/ -> /tmp/snap-private-tmp/snap.rootfs_*/, # the next line is for core system mount options=(rw rbind) / -> /tmp/snap-private-tmp/snap.rootfs_*/, # all of the constructed rootfs is a rslave mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/, # bidirectional mounts (for both classic and core) # NOTE: this doesn't capture the MERGED_USR configuration option so that # when a distro with merged /usr and / that uses apparmor shows up it # should be handled here. /{,run/}media/ w, mount options=(rw rbind) /{,run/}media/ -> /tmp/snap-private-tmp/snap.rootfs_*/{,run/}media/, /run/netns/ w, mount options=(rw rbind) /run/netns/ -> /tmp/snap-private-tmp/snap.rootfs_*/run/netns/, # unidirectional mounts (only for classic system) mount options=(rw rbind) /dev/ -> /tmp/snap-private-tmp/snap.rootfs_*/dev/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/dev/, mount options=(rw rbind) /etc/ -> /tmp/snap-private-tmp/snap.rootfs_*/etc/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/, mount options=(rw rbind) /home/ -> /tmp/snap-private-tmp/snap.rootfs_*/home/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/home/, mount options=(rw rbind) /root/ -> /tmp/snap-private-tmp/snap.rootfs_*/root/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/root/, mount options=(rw rbind) /proc/ -> /tmp/snap-private-tmp/snap.rootfs_*/proc/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/proc/, mount options=(rw rbind) /sys/ -> /tmp/snap-private-tmp/snap.rootfs_*/sys/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/sys/, mount options=(rw rbind) /tmp/ -> /tmp/snap-private-tmp/snap.rootfs_*/tmp/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/tmp/, mount options=(rw rbind) /var/lib/dhcp/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/dhcp/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/dhcp/, mount options=(rw rbind) /var/lib/snapd/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/, mount options=(rw rbind) /var/snap/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/snap/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/var/snap/, mount options=(rw rbind) /var/tmp/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/tmp/, # /var/volatile is the default volatile location on Yocto/Poky, typically used with read-only rootfs setups mount options=(rw rbind) /var/volatile/tmp/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/tmp/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/var/tmp/, mount options=(rw rbind) /run/ -> /tmp/snap-private-tmp/snap.rootfs_*/run/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/run/, mount options=(rw rbind) /var/lib/extrausers/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/extrausers/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/extrausers/, mount options=(rw rbind) {,/usr}/lib{,32,64,x32}/modules/ -> /tmp/snap-private-tmp/snap.rootfs_*{,/usr}/lib/modules/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*{,/usr}/lib/modules/, mount options=(rw rbind) {,/usr}/lib{,32,64,x32}/firmware/ -> /tmp/snap-private-tmp/snap.rootfs_*{,/usr}/lib/firmware/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*{,/usr}/lib/firmware/, mount options=(rw rbind) /var/log/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/log/, # /var/volatile is the default volatile location on Yocto/Poky, typically used with read-only rootfs setups mount options=(rw rbind) /var/volatile/log/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/log/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/var/log/, mount options=(rw rbind) /usr/src/ -> /tmp/snap-private-tmp/snap.rootfs_*/usr/src/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/usr/src/, mount options=(rw rbind) /mnt/ -> /tmp/snap-private-tmp/snap.rootfs_*/mnt/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/mnt/, # allow making host snap-exec available inside base snaps mount options=(rw bind) /usr/lib/snapd/ -> /tmp/snap-private-tmp/snap.rootfs_*/usr/lib/snapd/, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/usr/lib/snapd/, # allow making re-execed host snap-exec available inside base snaps mount options=(ro bind) @{SNAP_MOUNT_DIR_LIST}/core/*/usr/lib/snapd/ -> /tmp/snap-private-tmp/snap.rootfs_*/usr/lib/snapd/, # allow making snapd snap tools available inside base snaps mount options=(ro bind) @{SNAP_MOUNT_DIR_LIST}/snapd/*/usr/lib/snapd/ -> /tmp/snap-private-tmp/snap.rootfs_*/usr/lib/snapd/, mount options=(rw bind) /usr/bin/snapctl -> /tmp/snap-private-tmp/snap.rootfs_*/usr/bin/snapctl, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/usr/bin/snapctl, # /etc/alternatives (classic and normal mode) mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/etc/alternatives/ -> /tmp/snap-private-tmp/snap.rootfs_*/etc/alternatives/, mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/etc/ssl/ -> /tmp/snap-private-tmp/snap.rootfs_*/etc/ssl/, mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/etc/nsswitch.conf -> /tmp/snap-private-tmp/snap.rootfs_*/etc/nsswitch.conf, mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/etc/apparmor/ -> /tmp/snap-private-tmp/snap.rootfs_*/etc/apparmor/, mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/etc/apparmor.d/ -> /tmp/snap-private-tmp/snap.rootfs_*/etc/apparmor.d/, mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/etc/ld.so.conf -> /tmp/snap-private-tmp/snap.rootfs_*/etc/ld.so.conf, mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/etc/ld.so.cache -> /tmp/snap-private-tmp/snap.rootfs_*/etc/ld.so.cache, mount options=(rw bind) @{SNAP_MOUNT_DIR_LIST}/*/*/etc/ld.so.conf.d/ -> /tmp/snap-private-tmp/snap.rootfs_*/etc/ld.so.conf.d/, # /etc/alternatives (core/legacy mode) mount options=(rw bind) /etc/alternatives/ -> /tmp/snap-private-tmp/snap.rootfs_*/etc/alternatives/, # making all those directories slave shared. mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/alternatives/, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/ssl/, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/nsswitch.conf, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/apparmor/, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/apparmor.d/, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/ld.so.conf, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/ld.so.cache, mount options=(rw slave) -> /tmp/snap-private-tmp/snap.rootfs_*/etc/ld.so.conf.d/, # the /snap directory mount options=(rw rbind) @{SNAP_MOUNT_DIR_LIST}/ -> /tmp/snap-private-tmp/snap.rootfs_*/snap/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/snap/, # pivot_root preparation and execution mount options=(rw bind) /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/hostfs/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/hostfs/, mount options=(rw private) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/hostfs/, # pivot_root mediation in AppArmor is not complete. See LP: #1791711. # However, we can mediate the new_root and put_old to be what we expect, # and then deny directory creation within old_root to prevent trivial # pivoting into an allowlisted path. pivot_root oldroot=/tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/hostfs/ /tmp/snap-private-tmp/snap.rootfs_*/, # Explicitly deny creating the old_root directory in case it is # inadvertently added somewhere else. While this doesn't resolve # LP: #1791711, it provides some hardening. # For dir on dir mounts, we do need write permissions in /var though audit deny /tmp/snap-private-tmp/snap.rootfs_*/{var/lib/,var/lib/snapd/,var/lib/snapd/hostfs/} w, # cleanup umount /var/lib/snapd/hostfs/tmp/snap-private-tmp/snap.rootfs_*/, umount /var/lib/snapd/hostfs/sys/, umount /var/lib/snapd/hostfs/dev/, umount /var/lib/snapd/hostfs/proc/, mount options=(rw rslave) -> /var/lib/snapd/hostfs/, # Hide /writable from view of snaps. mount options=(rprivate) -> /{,var/lib/snapd/hostfs/}writable/, umount /{,var/lib/snapd/hostfs/}writable/, # set up user mount namespace mount options=(rslave) -> /, # set up mount namespace for parallel instances of classic snaps mount options=(rw rbind) @{SNAP_MOUNT_DIR_LIST}/{,*/} -> @{SNAP_MOUNT_DIR_LIST}/{,*/}, mount options=(rslave) -> @{SNAP_MOUNT_DIR_LIST}/, mount options=(rslave) -> /var/snap/, mount options=(rw rbind) /var/snap/{,*/} -> /var/snap/{,*/}, mount options=(rw rshared) -> /var/snap/, # Allow reading the os-release file (possibly a symlink to /usr/lib). /{etc/,usr/lib/}os-release r, # Allow creating /var/lib/snapd/hostfs, if missing /var/lib/snapd/hostfs/ rw, # set up snap-specific private /tmp dir capability chown, /tmp/ rw, /tmp/snap-private-tmp/ r, /tmp/snap-private-tmp/snap.*/ rw, /tmp/snap-private-tmp/snap.*/tmp/ rw, mount options=(rw private) -> /tmp/, mount options=(rw bind) /tmp/snap-private-tmp/snap.*/tmp/ -> /tmp/, mount fstype=devpts options=(rw) devpts -> /dev/pts/, mount options=(rw bind) /dev/pts/ptmx -> /dev/ptmx, # for bind mounting mount options=(rw bind) /dev/pts/ptmx -> /dev/pts/ptmx, # for bind mounting under LXD # Workaround for LP: #1584456 on older kernels that mistakenly think # /dev/pts/ptmx needs a trailing '/' mount options=(rw bind) /dev/pts/ptmx/ -> /dev/ptmx/, mount options=(rw bind) /dev/pts/ptmx/ -> /dev/pts/ptmx/, # for running snaps on classic /snap/ r, /snap/** r, @{SNAP_MOUNT_DIR_LIST}/ r, @{SNAP_MOUNT_DIR_LIST}/** r, # NOTE: at this stage the /snap directory is stable as we have called # pivot_root already. # nvidia handling, glob needs /usr/** and the launcher must be # able to bind mount the nvidia dir /sys/module/nvidia/version r, /sys/**/drivers/nvidia{,_*}/* r, /sys/**/nvidia*/uevent r, /sys/module/nvidia{,_*}/* r, /dev/nvidia[0-9]* r, /dev/nvidiactl r, /dev/nvidia-uvm r, /usr/** r, mount options=(rw bind) /usr/lib{,32}/nvidia-*/ -> /{tmp/snap-private-tmp/snap.rootfs_*/,}var/lib/snapd/lib/gl{,32}/, mount options=(rw bind) /usr/lib{,32}/nvidia-*/ -> /{tmp/snap-private-tmp/snap.rootfs_*/,}var/lib/snapd/lib/gl{,32}/, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/gl{,32}/{,*} w, mount fstype=tmpfs options=(rw nodev noexec) none -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/gl{,32}/, mount options=(remount ro bind) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/gl{,32}/, # Vulkan support /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/vulkan/{,*} w, mount fstype=tmpfs options=(rw nodev noexec) none -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/vulkan/, mount options=(remount ro bind) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/vulkan/, # GLVND EGL vendor /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/glvnd/{,*} w, mount fstype=tmpfs options=(rw nodev noexec) none -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/glvnd/, mount options=(remount ro bind) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/glvnd/, # create gl dirs as needed /tmp/snap-private-tmp/snap.rootfs_*/ r, /tmp/snap-private-tmp/snap.rootfs_*/var/ r, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/ r, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/ r, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/ r, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/gl{,32}/ r, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/gl{,32}/** rw, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/vulkan/ r, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/vulkan/** rw, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/glvnd/ r, /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/glvnd/** rw, ## nvidia libraries exported by a snap # read source paths /var/lib/snapd/export/{,*} r, # for the tmpfs /var/lib/snapd/lib/system/ w, /var/lib/snapd/lib/system/gpu/ w, mount fstype=tmpfs options=(rw nodev noexec) none -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/system/gpu/, mount options=(remount ro bind) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/system/gpu/, # mounts for the source paths /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/system/gpu/{,**} w, mount options=(ro bind) /{,var/lib/snapd/}snap/** -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/snapd/lib/system/gpu/**, # for chroot on steroids, we use pivot_root as a better chroot that makes # apparmor rules behave the same on classic and outside of classic. # for creating the user data directories: ~/snap, ~/snap/<name> and # ~/snap/<name>/<version> / r, @{HOMEDIRS}/ r, # These should both have 'owner' match but due to LP: #1466234, we can't # yet @{HOME}/ r, @{HOME}/snap/{,*/,*/*/} rw, # experimental @{HOME}/.snap/ rw, @{HOME}/.snap/data/{,*/,*/*/} rw, @{HOME}/Snap/{,*/,*/*/} rw, # Special case for *classic* snaps that are used by users with existing dirs # in /var/lib/. Like jenkins, postgresql, mysql, puppet, ... # (see https://forum.snapcraft.io/t/9717) # TODO: this can be removed once we support home-dirs outside of /home # better /var/ r, /var/lib/ r, # These should both have 'owner' match but due to LP: #1466234, we can't # yet /var/lib/*/ r, /var/lib/*/snap/{,*/,*/*/} rw, # for creating the user shared memory directories /{dev,run}/{,shm/} r, # This should both have 'owner' match but due to LP: #1466234, we can't yet /{dev,run}/shm/{,*/,*/*/} rw, # for creating the user XDG_RUNTIME_DIR: /run/user, /run/user/UID and # /run/user/UID/<name> /run/user/{,[0-9]*/,[0-9]*/*/} rw, # Workaround https://launchpad.net/bugs/359338 until upstream handles # stacked filesystems generally. # encrypted ~/.Private and old-style encrypted $HOME @{HOME}/.Private/ r, @{HOME}/.Private/** mrwlk, # new-style encrypted $HOME @{HOMEDIRS}/.ecryptfs/*/.Private/ r, @{HOMEDIRS}/.ecryptfs/*/.Private/** mrwlk, # Allow snap-confine to move to the void, creating it if necessary. /var/lib/snapd/void/ rw, # Allow snap-confine to read snap contexts /var/lib/snapd/context/snap.* r, # Allow snap-confine to unmount stale mount namespaces. umount /run/snapd/ns/*.mnt, /run/snapd/ns/snap.*.fstab w, # Allow snap-confine to read and write mount namespace information files. /run/snapd/ns/snap.*.info rw, # Required to correctly unmount bound mount namespace. # See LP: #1735459 for details. umount /, # support for locking /run/snapd/lock/ rw, /run/snapd/lock/*.lock rwk, # support for the mount namespace sharing capability fowner, capability sys_ptrace, # allow snap-confine to read /proc/1/ns/mnt ptrace read peer=unconfined, # https://forum.snapcraft.io/t/custom-kernel-error-on-readlinkat-in-mount-namespace/6097/21 ptrace trace peer=unconfined, mount options=(rw rbind) /run/snapd/ns/ -> /run/snapd/ns/, mount options=(private) -> /run/snapd/ns/, / rw, /run/ rw, /run/snapd/ rw, /run/snapd/ns/ rw, /run/snapd/ns/*.lock rwk, /run/snapd/ns/*.mnt rw, ptrace (read, readby, tracedby) peer=/usr/lib/snapd/snap-confine, @{PROC}/@{pid}/mountinfo r, capability sys_chroot, capability sys_admin, # sigint: this is the signal we get if snap-confine dies (we subscribe to it with prctl) signal (send, receive) set=(int, abrt, alrm, exists) peer=/usr/lib/snapd/snap-confine, # This is just like exists above but we cannot know if the parent process # is still alive and hence has the appropriate label or is already dead and # hence has no label. signal (send) set=(exists) peer=unconfined, # This allows snap-confine to be killed from the outside. signal (receive) peer=unconfined, # workaround for linux 4.13/upstream, see # https://forum.snapcraft.io/t/snapd-2-27-6-2-in-debian-sid-blocked-on-apparmor-in-kernel-4-13-0-1/2813/3 ptrace (trace, tracedby) peer=/usr/lib/snapd/snap-confine, # Allow reading snap cookies. /var/lib/snapd/cookie/snap.* r, # As a special exception allow snap-confine to write to anything in /var/lib. # This code should be changed to allow delegation so that snap-confine can # inherit any file descriptor and pass it to the invoked application but # this is not possible in apparmor yet. # See https://bugs.launchpad.net/snapd/+bug/1815869 /var/lib/** rw, # This allows us to read and bind mount the namespace file / r, @{PROC}/ r, @{PROC}/@{pid}/ r, @{PROC}/@{pid}/ns/ r, @{PROC}/@{pid}/ns/mnt r, /run/ r, /run/snapd/ r, /run/snapd/ns/ r, /run/snapd/ns/*.mnt rw, # NOTE: the source name is / even though we map /proc/123/ns/mnt mount options=(rw bind) / -> /run/snapd/ns/*.mnt, # This allows snap-confine to wait for us ptrace (read, trace, tracedby) peer=/usr/lib/snapd/snap-confine, # Allow switching to snap-update-ns with a per-snap profile. change_profile -> snap-update-ns.*, # Allow executing snap-update-ns when... # ...snap-confine is, conceptually, re-executing and uses snap-update-ns # from the distribution package. This is also the location used when using # the core/base snap on all-snap systems. The variants here represent # various locations of libexecdir across distributions. /usr/lib{,exec,64}/snapd/snap-update-ns r, # ...snap-confine is not, conceptually, re-executing and uses # snap-update-ns from the distribution package but we are already inside # the constructed mount namespace so we must traverse "hostfs". The # variants here represent various locations of libexecdir across # distributions. /var/lib/snapd/hostfs/usr/lib{,exec,64}/snapd/snap-update-ns r, # ..snap-confine is, conceptually, re-executing and uses snap-update-ns # from the core or snapd snaps. Note that the location of the actual snap # varies from distribution to distribution. The variants here represent # different locations of snap mount directory across distributions. /{,var/lib/snapd/}snap/{core,snapd}/*/usr/lib/snapd/snap-update-ns r, # ...snap-confine is, conceptually, re-executing and uses snap-update-ns # from the core snap or snapd snap, but we are already inside the # constructed mount namespace. Here the apparmor kernel module # re-constructs the path to snap-update-ns using the "hostfs" mount entry # rather than the more "natural" /snap mount entry but we have no control # over that. This is reported as (LP: #1716339). The variants here # represent different locations of snap mount directory across # distributions. /var/lib/snapd/hostfs/{,var/lib/snapd/}snap/{core,snapd}/*/usr/lib/snapd/snap-update-ns r, # Allow executing snap-discard-ns, just like the set for snap-update-ns # above but with the key difference that snap-discard-ns does not # have a dedicated profile so we need to inherit snap-confine's profile. /usr/lib{,exec,64}/snapd/snap-discard-ns rix, /var/lib/snapd/hostfs/usr/lib{,exec,64}/snapd/snap-discard-ns rix, /{,var/lib/snapd/}snap/{core,snapd}/*/usr/lib/snapd/snap-discard-ns rix, /var/lib/snapd/hostfs/{,var/lib/snapd/}snap/{core,snapd}/*/usr/lib/snapd/snap-discard-ns rix, # Allow mounting /var/lib/jenkins from the host into the snap. mount options=(rw rbind) /var/lib/jenkins/ -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/jenkins/, mount options=(rw rslave) -> /tmp/snap-private-tmp/snap.rootfs_*/var/lib/jenkins/, # Suppress noisy file_inherit denials (LP: #1850552) until LP: #1849753 is # fixed. deny /dev/shm/.org.chromium.Chromium.* rw, # While snap-confine itself doesn't require unix rules and therefore all # unix rules are implicitly denied, adding an explicit deny for unix to # silence noisy denials breaks nested lxd. Until the cause is determined, # do not use an explicit deny for unix. (LP: #1855355) #deny unix, # Explicitly deny these accesses which show up on Arch to silence the # denials for this unneeded access. deny /{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libnss_files-[0-9]*.so* mr, deny /{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libnss_mymachines.[0-9]*.so* mr, deny /{,usr/}lib{,32,64,x32}/{,@{multiarch}/}libnss_systemd.[0-9]*.so* mr, deny /etc/nsswitch.conf r, deny /etc/passwd r, # Allow snap-confine to inherit sockets from other snaps. This prevents classic snaps # from having broken stdin redirected to unix sockets that are established by said snap, # e.g. opencode. unix (send, receive) addr=none peer=(addr=none, label="snap.*"), }
Save
cmd:
run