2
0
mirror of https://gitlab.com/apparmor/apparmor synced 2025-08-30 22:05:27 +00:00

profiles: Add chromium-browser profile from Ubuntu

Ubuntu is dropping their chromium-browser profile because
chromium-browser has been made a snap on ubuntu. Suck in the profile
upstream as a reference profile for those who want to confine
chromium outside of a snap, and update its includes.

MR: https://gitlab.com/apparmor/apparmor/-/merge_requests/606
Signed-off-by: John Johansen <john.johansen@canonical.com>
Acked-by: Steve Beattie <steve.beattie@canonical.com>
This commit is contained in:
John Johansen
2020-08-27 21:08:57 -07:00
parent cc97494528
commit e1ba76375b
2 changed files with 373 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
# vim:syntax=apparmor
# ------------------------------------------------------------------
#
# Copyright (C) 2020 Canonical Ltd.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License published by the Free Software Foundation.
#
# ------------------------------------------------------------------
# Author: Jamie Strandboge <jamie@canonical.com>
# This file is updated currently not managed by the package but in the future
# will be overwritten on upgrades.
#
# For site-specific adjustments, please see:
# /etc/apparmor.d/local/chromium-browser
abi <abi/3.0>,
include <abstractions/ubuntu-browsers.d/plugins-common>
include <abstractions/ubuntu-browsers.d/mailto>
include <abstractions/ubuntu-browsers.d/multimedia>
include <abstractions/ubuntu-browsers.d/productivity>
include <abstractions/ubuntu-browsers.d/java>
include <abstractions/ubuntu-browsers.d/kde>
include <abstractions/ubuntu-browsers.d/text-editors>
include <abstractions/ubuntu-browsers.d/ubuntu-integration>
include <abstractions/ubuntu-browsers.d/user-files>

View File

@@ -0,0 +1,344 @@
# vim:syntax=apparmor
# ------------------------------------------------------------------
#
# Copyright (C) 2020 Canonical Ltd.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License published by the Free Software Foundation.
#
# ------------------------------------------------------------------
# Author: Jamie Strandboge <jamie@canonical.com>
abi <abi/3.0>,
#include <tunables/global>
@{chromium} = chromium{,-browser}
# We need 'flags=(attach_disconnected)' in newer chromium versions
profile chromium_browser /usr/lib/@{chromium}/@{chromium} flags=(attach_disconnected) {
include <abstractions/audio>
include <abstractions/cups-client>
include <abstractions/dbus-session>
include <abstractions/dbus-strict>
include <abstractions/gnome>
include <abstractions/ibus>
include <abstractions/nameservice>
include <abstractions/user-tmp>
# This include specifies which ubuntu-browsers.d abstractions to use. Eg, if
# you want access to productivity applications, adjust the following file
# accordingly.
include if exists <abstractions/ubuntu-browsers.d/chromium-browser>
capability sys_admin,
capability sys_chroot,
capability sys_ptrace,
# UPower
# Not sure why these are needed, so deny for now
deny dbus (send)
bus=system
path=/org/freedesktop/UPower
interface=org.freedesktop.DBus.Properties
member=Get
peer=(label=unconfined),
deny dbus (send)
bus=system
path=/org/freedesktop/UPower/devices/*
interface=org.freedesktop.DBus.Properties
member=Get
peer=(label=unconfined),
deny dbus (send)
bus=system
path=/org/freedesktop/UPower
interface=org.freedesktop.UPower
member={EnumerateDevices,GetDisplayDevice}
peer=(label=unconfined),
# ???
deny dbus (send)
bus=system
path=/org/freedesktop/hostname1
interface=org.freedesktop.DBus.Properties
member=GetAll
peer=(label=unconfined),
# Networking
network inet stream,
network inet6 stream,
@{PROC}/[0-9]*/net/if_inet6 r,
@{PROC}/[0-9]*/net/ipv6_route r,
# Should maybe be in abstractions
/etc/mime.types r,
/etc/mailcap r,
/etc/mtab r,
/etc/xdg/xubuntu/applications/defaults.list r,
owner @{HOME}/.local/share/applications/defaults.list r,
owner @{HOME}/.local/share/applications/mimeinfo.cache r,
/tmp/.X[0-9]*-lock r,
@{PROC}/self/exe ixr,
@{PROC}/[0-9]*/fd/ r,
@{PROC}/filesystems r,
@{PROC}/vmstat r,
@{PROC}/ r,
@{PROC}/[0-9]*/task/[0-9]*/stat r,
owner @{PROC}/[0-9]*/cmdline r,
owner @{PROC}/[0-9]*/io r,
owner @{PROC}/[0-9]*/setgroups w,
owner @{PROC}/[0-9]*/{uid,gid}_map w,
@{PROC}/[0-9]*/smaps r,
@{PROC}/[0-9]*/stat r,
@{PROC}/[0-9]*/statm r,
owner @{PROC}/[0-9]*/status r,
owner @{PROC}/[0-9]*/task/[0-9]*/status r,
deny @{PROC}/[0-9]*/oom_{,score_}adj w,
@{PROC}/sys/kernel/yama/ptrace_scope r,
@{PROC}/sys/net/ipv4/tcp_fastopen r,
# Newer chromium needs these now
/etc/udev/udev.conf r,
# Chromium appears to want all "uevent" files under /sys/devices/
/sys/devices/**/uevent r,
/sys/devices/system/cpu/cpufreq/policy*/cpuinfo_max_freq r,
/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq r,
/sys/devices/system/node/node*/meminfo r,
/sys/devices/pci[0-9]*/**/class r,
/sys/devices/pci[0-9]*/**/config r,
/sys/devices/pci[0-9]*/**/device r,
/sys/devices/pci[0-9]*/**/irq r,
/sys/devices/pci[0-9]*/**/resource r,
/sys/devices/pci[0-9]*/**/revision r,
/sys/devices/pci[0-9]*/**/subsystem_device r,
/sys/devices/pci[0-9]*/**/subsystem_vendor r,
/sys/devices/pci[0-9]*/**/vendor r,
/sys/devices/pci[0-9]*/**/removable r,
/sys/devices/pci[0-9]*/**/block/**/size r,
/sys/devices/virtual/block/**/removable r,
/sys/devices/virtual/block/**/size r,
/sys/devices/virtual/tty/tty*/active r,
# This is requested, but doesn't seem to actually be needed so deny for now
deny /run/udev/data/** r,
# Needed for the crash reporter
owner @{PROC}/[0-9]*/auxv r,
# chromium mmaps all kinds of things for speed.
/etc/passwd m,
/usr/share/fonts/truetype/**/*.tt[cf] m,
/usr/share/fonts/**/*.pfb m,
/usr/share/mime/mime.cache m,
/usr/share/icons/**/*.cache m,
owner /{dev,run}/shm/pulse-shm* m,
owner @{HOME}/.local/share/mime/mime.cache m,
owner /tmp/** m,
@{PROC}/sys/kernel/shmmax r,
owner /{dev,run}/shm/{,.}org.chromium.* mrw,
owner /{,var/}run/shm/shmfd-* mrw,
/usr/lib/@{chromium}/*.pak mr,
/usr/lib/@{chromium}/locales/* mr,
# Noisy
deny /usr/lib/@{chromium}/** w,
deny /var/cache/fontconfig/ w,
# Allow ptracing ourselves and our helpers
ptrace (trace) peer=@{profile_name},
ptrace (trace) peer=@{profile_name}//lsb_release,
ptrace (trace) peer=@{profile_name}//xdgsettings,
# Make browsing directories work
/ r,
/**/ r,
# Allow access to documentation and other files the user may want to look
# at in /usr
/usr/{include,share,src}** r,
# Default profile allows downloads to ~/Downloads and uploads from ~/Public
owner @{HOME}/ r,
owner @{HOME}/Public/ r,
owner @{HOME}/Public/* r,
owner @{HOME}/Downloads/ r,
owner @{HOME}/Downloads/* rw,
# For migration
owner @{HOME}/.mozilla/firefox/profiles.ini r,
owner @{HOME}/.mozilla/firefox/*/prefs.js r,
# Helpers
/usr/bin/xdg-open ixr,
/usr/bin/gnome-open ixr,
/usr/bin/gvfs-open ixr,
/usr/bin/kdialog ixr,
# TODO: xfce
# Importing firefox settings (requires 'r' access to @{HOME}/.mozilla/**
# which is provided by abstractions/ubuntu-browsers.d/user-files).
/etc/firefox/profile/bookmarks.html r,
owner @{HOME}/.mozilla/** k,
# Chromium Policies
/etc/@{chromium}/policies/** r,
# Chromium configuration
owner @{HOME}/.pki/nssdb/* rwk,
owner @{HOME}/.cache/chromium/ rw,
owner @{HOME}/.cache/chromium/** rw,
owner @{HOME}/.cache/chromium/Cache/* mr,
owner @{HOME}/.config/chromium/ rw,
owner @{HOME}/.config/chromium/** rwk,
owner @{HOME}/.config/chromium/**/Cache/* mr,
owner @{HOME}/.config/chromium/Dictionaries/*.bdic mr,
owner @{HOME}/.config/chromium/**/Dictionaries/*.bdic mr,
# Allow transitions to ourself and our sandbox
/usr/lib/@{chromium}/@{chromium} ix,
/usr/lib/@{chromium}/chrome-sandbox cx -> chromium_browser_sandbox,
# Allow communicating with sandbox
unix (receive, send) peer=(label=/usr/lib/@{chromium}/@{chromium}//chromium_browser_sandbox),
/{usr/,}bin/ps Uxr,
/usr/lib/@{chromium}/xdg-settings Cxr -> xdgsettings,
/usr/bin/xdg-settings Cxr -> xdgsettings,
/usr/bin/lsb_release Cxr -> lsb_release,
# GSettings
owner /{,var/}run/user/*/dconf/ rw,
owner /{,var/}run/user/*/dconf/user rw,
owner @{HOME}/.config/dconf/user r,
# Magnet links
/usr/bin/gio ixr,
# Chrome Gnome Shell Integration
/etc/chromium/native-messaging-hosts/org.gnome.chrome_gnome_shell.json r,
/usr/bin/chrome-gnome-shell ixr,
profile xdgsettings {
include <abstractions/bash>
include <abstractions/gnome>
/{usr/,}bin/dash ixr,
/etc/ld.so.cache r,
/etc/xdg/** r,
/usr/bin/xdg-settings r,
/usr/lib/@{chromium}/xdg-settings r,
/usr/share/applications/*.desktop r,
/usr/share/applications/*.list r,
# Checking default browser
/{usr/,}bin/grep ixr,
/{usr/,}bin/head ixr,
/{usr/,}bin/readlink ixr,
/{usr/,}bin/sed ixr,
/{usr/,}bin/tr ixr,
/{usr/,}bin/which ixr,
/usr/bin/basename ixr,
/usr/bin/cut ixr,
# Setting the default browser
/{usr/,}bin/mkdir ixr,
/{usr/,}bin/mv ixr,
/{usr/,}bin/touch ixr,
/usr/bin/dirname ixr,
/usr/bin/gconftool-2 ix,
/usr/bin/[gm]awk ixr,
/usr/bin/xdg-mime ixr,
owner @{HOME}/.local/share/applications/ w,
owner @{HOME}/.local/share/applications/mimeapps.list* rw,
}
profile lsb_release {
include <abstractions/base>
include <abstractions/python>
/usr/bin/lsb_release r,
/{usr/,}bin/dash ixr,
/usr/bin/dpkg-query ixr,
/usr/include/python2.[4567]/pyconfig.h r,
/etc/lsb-release r,
/etc/debian_version r,
/etc/dpkg/origins/** r,
/usr/share/distro-info/** r,
/var/lib/dpkg/** r,
/usr/local/lib/python3.[0-9]/dist-packages/ r,
/usr/bin/ r,
/usr/bin/python3.[0-9] mr,
}
profile chromium_browser_sandbox {
# Be fanatical since it is setuid root and don't use an abstraction
/{usr/,}lib/libgcc_s.so* mr,
/{usr/,}lib/@{multiarch}/libgcc_s.so* mr,
/{usr/,}lib{,32,64}/libm-*.so* mr,
/{usr/,}lib/@{multiarch}/libm-*.so* mr,
/{usr/,}lib{,32,64}/libpthread-*.so* mr,
/{usr/,}lib/@{multiarch}/libpthread-*.so* mr,
/{usr/,}lib{,32,64}/libc-*.so* mr,
/{usr/,}lib/@{multiarch}/libc-*.so* mr,
/{usr/,}lib{,32,64}/libld-*.so* mr,
/{usr/,}lib/@{multiarch}/libld-*.so* mr,
/{usr/,}lib{,32,64}/ld-*.so* mr,
/{usr/,}lib/@{multiarch}/ld-*.so* mr,
/{usr/,}lib/tls/*/{cmov,nosegneg}/libm-*.so* mr,
/{usr/,}lib/tls/*/{cmov,nosegneg}/libpthread-*.so* mr,
/{usr/,}lib/tls/*/{cmov,nosegneg}/libc-*.so* mr,
/usr/lib/libstdc++.so* mr,
/usr/lib/@{multiarch}/libstdc++.so* mr,
/etc/ld.so.cache r,
# Required for dropping into PID namespace. Keep in mind that until the
# process drops this capability it can escape confinement, but once it
# drops CAP_SYS_ADMIN we are ok.
capability sys_admin,
# All of these are for sanely dropping from root and chrooting
capability chown,
capability fsetid,
capability setgid,
capability setuid,
capability dac_override,
capability sys_chroot,
capability sys_ptrace,
ptrace (read, readby),
signal (receive) peer=unconfined,
signal peer=@{profile_name},
signal (receive, send) set=("exists"),
signal (receive) peer=/usr/lib/@{chromium}/@{chromium},
unix (receive, send) peer=(label=/usr/lib/@{chromium}/@{chromium}),
unix (create),
unix peer=(label=@{profile_name}),
unix (getattr, getopt, setopt, shutdown) addr=none,
@{PROC}/ r,
@{PROC}/[0-9]*/ r,
@{PROC}/[0-9]*/fd/ r,
deny @{PROC}/[0-9]*/oom_adj w,
deny @{PROC}/[0-9]*/oom_score_adj w,
@{PROC}/[0-9]*/status r,
@{PROC}/[0-9]*/task/[0-9]*/stat r,
/usr/bin/@{chromium} r,
/usr/lib/@{chromium}/@{chromium} Px,
/usr/lib/@{chromium}/chrome-sandbox mr,
/dev/null rw,
owner /tmp/** rw,
}
# Site-specific additions and overrides. See local/README for details.
include if exists <local/chromium_browser>
}