Package: chromium
Version: 61.0.3163.100-2
Severity: wishlist
Tags: patch

Hi,
I'd be great if Debian would ship an apparmor profile for chromium. The
attached profile was mostly prepared by Daniel Richard and is based on
the one in Ubuntu so I assume it has seen quiet some exposure to real
world usage. It works here nicely here. I'm sure there will be tweaks
needed over time so feel free to cc' me and Richard on apparmor related
issues. If this shouldn't work out we can always disable it again.

Cheers,
 -- Guido

-- System Information:
Debian Release: buster/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 
'testing-debug'), (500, 'stable-updates'), (500, 'oldoldstable'), (500, 
'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.13.0-trunk-amd64 (SMP w/4 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_US:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages chromium depends on:
ii  chromium-common      61.0.3163.100-2
ii  libasound2           1.1.3-5
ii  libatk1.0-0          2.26.0-2
ii  libavcodec57         7:3.3.4-1
ii  libavformat57        7:3.3.4-1
ii  libavutil55          7:3.3.4-1
ii  libc6                2.24-17
ii  libcairo2            1.14.10-1
ii  libcups2             2.2.4-7
ii  libdbus-1-3          1.11.16+really1.10.22-1
ii  libevent-2.1-6       2.1.8-stable-4
ii  libexpat1            2.2.3-1
ii  libflac8             1.3.2-1
ii  libfontconfig1       2.12.3-0.2
ii  libfreetype6         2.8-0.2
ii  libgcc1              1:7.2.0-5
ii  libgdk-pixbuf2.0-0   2.36.5-2
ii  libglib2.0-0         2.54.0-1
ii  libgtk2.0-0          2.24.31-2
ii  libharfbuzz0b        1.4.2-1
ii  libicu57             57.1-6
ii  libjpeg62-turbo      1:1.5.2-2
ii  liblcms2-2           2.8-4
ii  libminizip1          1.1-8+b1
ii  libnspr4             2:4.16-1
ii  libnss3              2:3.32-2
ii  libopus0             1.2~alpha2-1
ii  libpango-1.0-0       1.40.12-1
ii  libpangocairo-1.0-0  1.40.12-1
ii  libpng16-16          1.6.32-1
ii  libpulse0            11.0-2
ii  libre2-3             20170101+dfsg-1
ii  libsnappy1v5         1.1.7-1
ii  libstdc++6           7.2.0-5
ii  libvpx4              1.6.1-3
ii  libwebp6             0.6.0-3
ii  libwebpdemux2        0.6.0-3
ii  libwebpmux3          0.6.0-3
ii  libx11-6             2:1.6.4-3
ii  libx11-xcb1          2:1.6.4-3
ii  libxcb1              1.12-1
ii  libxcomposite1       1:0.4.4-2
ii  libxcursor1          1:1.1.14-3
ii  libxdamage1          1:1.1.4-3
ii  libxext6             2:1.3.3-1+b2
ii  libxfixes3           1:5.0.3-1
ii  libxi6               2:1.7.9-1
ii  libxml2              2.9.4+dfsg1-4
ii  libxrandr2           2:1.5.1-1
ii  libxrender1          1:0.9.10-1
ii  libxslt1.1           1.1.29-2.1
ii  libxss1              1:1.2.2-1+b2
ii  libxtst6             2:1.2.3-1
ii  zlib1g               1:1.2.8.dfsg-5

Versions of packages chromium recommends:
ii  fonts-liberation  1:1.07.4-2

Versions of packages chromium suggests:
ii  chromium-driver    61.0.3163.100-2
pn  chromium-l10n      <none>
pn  chromium-shell     <none>
pn  chromium-widevine  <none>

-- Configuration Files:
/etc/apparmor.d/usr.bin.chromium changed [not included]

-- no debconf information
>From 3d35e9547fae383afd004608c9da646377caab66 Mon Sep 17 00:00:00 2001
Message-Id: <3d35e9547fae383afd004608c9da646377caab66.1506853631.git....@sigxcpu.org>
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <a...@sigxcpu.org>
Date: Sat, 30 Sep 2017 11:26:15 +0200
Subject: [PATCH] Add apparmor profile

The profile is based on the Ubuntu one and the one provided by Daniel
Richard G.
---
 debian/apparmor/usr.bin.chromium | 304 +++++++++++++++++++++++++++++++++++++++
 debian/chromium.install          |   2 +
 debian/control                   |   1 +
 debian/rules                     |   1 +
 4 files changed, 308 insertions(+)
 create mode 100644 debian/apparmor/usr.bin.chromium

diff --git a/debian/apparmor/usr.bin.chromium b/debian/apparmor/usr.bin.chromium
new file mode 100644
index 0000000..472664d
--- /dev/null
+++ b/debian/apparmor/usr.bin.chromium
@@ -0,0 +1,304 @@
+# Author: Jamie Strandboge <ja...@canonical.com>
+#include <tunables/global>
+
+# Debian compatibility aliases
+# https://bugs.debian.org/742829
+#
+alias /etc/chromium-browser/ -> /etc/chromium/,
+alias /usr/bin/chromium-browser -> /usr/bin/chromium,
+alias /usr/lib/chromium-browser/chromium-browser-sandbox -> /usr/lib/chromium/chrome-sandbox,
+alias /usr/lib/chromium-browser/chromium-browser -> /usr/lib/chromium/chromium,
+alias /usr/lib/chromium-browser/ -> /usr/lib/chromium/,
+
+# We need 'flags=(attach_disconnected)' in newer chromium versions
+/usr/lib/chromium-browser/chromium-browser 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>
+
+  # Browser specific abstratctions
+  #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>
+
+  # 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,
+
+  @{PROC}/[0-9]*/fd/ r,
+  @{PROC}/filesystems r,
+  @{PROC}/ r,
+  @{PROC}/vmstat 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,
+  owner @{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,
+  @{PROC}/@{pid}/task/@{tid}/status rw,
+
+  # Newer chromium needs these now
+  /etc/udev/udev.conf r,
+  /sys/devices/**/uevent r,
+  /sys/devices/system/cpu/cpu*/{cpufreq,policy*}/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]*/**/vendor r,
+  /sys/devices/pci[0-9]*/**/subsystem_vendor r,
+  /sys/devices/pci[0-9]*/**/subsystem_device 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-browser/*.pak mr,
+  /usr/lib/chromium-browser/locales/* mr,
+
+  # Noisy
+  deny /usr/lib/chromium-browser/** w,
+
+  capability sys_admin,
+  capability sys_chroot,
+  capability sys_ptrace,
+
+  # Allow ptracing ourselves
+  ptrace (trace) peer=@{profile_name},
+
+  # 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-browser/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-browser/chromium-browser ix,
+  /usr/lib/chromium-browser/chromium-browser-sandbox cx -> chromium_browser_sandbox,
+  /usr/lib/chromium-browser/chrome-sandbox cx -> chromium_browser_sandbox,
+
+  # Allow communicating with sandbox
+  unix (receive, send) peer=(label=/usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox),
+
+  /{usr/,}bin/ps Uxr,
+  /usr/lib/chromium-browser/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,
+
+  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-browser/xdg-settings r,
+    /usr/share/applications/*.desktop r,
+    /usr/share/applications/gnome-mimeapps.list r,
+
+    # Checking default browser
+    /{usr/,}bin/grep ixr,
+    /{usr/,}bin/readlink ixr,
+    /{usr/,}bin/sed ixr,
+    /{usr/,}bin/which ixr,
+    /{usr/,}bin/tr ixr,
+    /{usr/,}bin/head 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,
+  }
+
+
+  # Site-specific additions and overrides. See local/README for details.
+  #include <local/usr.bin.chromium-browser>
+
+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-browser/chromium-browser,
+
+    unix (receive, send) peer=(label=/usr/lib/chromium-browser/chromium-browser),
+    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-browser r,
+    /usr/lib/chromium-browser/chromium-browser Px,
+    /usr/lib/chromium-browser/chromium-browser-sandbox r,
+    /usr/lib/chromium-browser/chrome-sandbox mr,
+
+    /dev/null rw,
+
+    owner /tmp/** rw,
+  }
+}
diff --git a/debian/chromium.install b/debian/chromium.install
index 6b20df4..039b43c 100644
--- a/debian/chromium.install
+++ b/debian/chromium.install
@@ -19,3 +19,5 @@ debian/chromium.desktop usr/share/applications
 debian/apikeys etc/chromium.d
 debian/extensions etc/chromium.d
 debian/default-flags etc/chromium.d
+
+debian/apparmor/usr.bin.chromium etc/apparmor.d
diff --git a/debian/control b/debian/control
index 695d483..6e75760 100644
--- a/debian/control
+++ b/debian/control
@@ -9,6 +9,7 @@ Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-chromium/pkg-chromium.git
 Homepage: http://www.chromium.org/Home
 Build-Depends:
  debhelper (>= 10),
+ dh-apparmor,
  python3,
  pkg-config,
  ninja-build,
diff --git a/debian/rules b/debian/rules
index 8da3679..fe0f6e2 100755
--- a/debian/rules
+++ b/debian/rules
@@ -130,6 +130,7 @@ override_dh_auto_install-arch:
 	    mkdir -p $$dst; \
 	    cp $$file $$dst/chromium.$$ext; \
 	    done
+	dh_apparmor --profile-name=usr.bin.chromium -p chromium
 
 override_dh_fixperms:
 	dh_fixperms --exclude chrome-sandbox
-- 
2.14.1

Reply via email to