Как включить AppArmor для Firefox и Chromium


ls -la /etc/apparmor.d/
ls -la /etc/apparmor.d/disable/
ls -la /etc/apparmor.d/local/

sudo apparmor_status


sudo rm /etc/apparmor.d/disable/usr.bin.firefox
sudo apparmor_parser -a /etc/apparmor.d/usr.bin.firefox

# sudo ln -s /etc/apparmor.d/usr.bin.firefox /etc/apparmor.d/disable/
# sudo apparmor_parser -R /etc/apparmor.d/usr.bin.firefox


sudo apt install apparmor-utils apparmor-profiles
ls -la /usr/share/doc/apparmor-profiles/extras/ 


Пояснения

Для начала ознакомьтесь с вводным постом по AppArmor.
AppArmor по умолчанию включен в Ubuntu.

В самом начале состояние каталогов AppArmor следующее:

$ ls -la /etc/apparmor.d/
total 144
drwxr-xr-x   8 root root  4096 Mar 17 01:24 .
drwxr-xr-x 138 root root 12288 Mar 19 15:30 ..
drwxr-xr-x   4 root root  4096 Mar 16 23:47 abstractions
drwxr-xr-x   2 root root  4096 Mar 17 01:24 cache
drwxr-xr-x   2 root root  4096 Feb 16 02:26 disable
drwxr-xr-x   2 root root  4096 Apr  5  2016 force-complain
-rw-r--r--   1 root root   732 Aug 12  2016 lightdm-guest-session
drwxr-xr-x   2 root root  4096 Feb 16 02:36 local
-rw-r--r--   1 root root  3310 Apr 13  2016 sbin.dhclient
drwxr-xr-x   5 root root  4096 Feb 16 02:34 tunables
-rw-r--r--   1 root root  5995 Mar  9  2016 usr.bin.evince
-rw-r--r--   1 root root  6615 Feb  1 23:59 usr.bin.firefox
-rw-r--r--   1 root root 38551 Dec 21 01:04 usr.bin.webbrowser-app
-rw-r--r--   1 root root 14496 Jan 14 21:06 usr.lib.snapd.snap-confine
-rw-r--r--   1 root root   469 Feb 13  2016 usr.sbin.cups-browsed
-rw-r--r--   1 root root  5119 Mar 25  2016 usr.sbin.cupsd
-rw-r--r--   1 root root   546 Sep 19  2015 usr.sbin.ippusbxd
-rw-r--r--   1 root root  1527 Jan  5  2016 usr.sbin.rsyslogd
-rw-r--r--   1 root root  1455 Feb 21 18:58 usr.sbin.tcpdump

$ ls -la /etc/apparmor.d/disable/
total 8
drwxr-xr-x 2 root root 4096 Feb 16 02:26 .
drwxr-xr-x 8 root root 4096 Mar 17 01:24 ..
lrwxrwxrwx 1 root root   31 Mar 16 23:30 usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox
lrwxrwxrwx 1 root root   33 Mar 16 23:30 usr.sbin.rsyslogd -> /etc/apparmor.d/usr.sbin.rsyslogd

$ ls -la /etc/apparmor.d/local/
total 52
drwxr-xr-x 2 root root 4096 Feb 16 02:36 .
drwxr-xr-x 8 root root 4096 Mar 17 01:24 ..
-rw-r--r-- 1 root root 1111 Oct 13 20:07 README
-rw-r--r-- 1 root root  120 Feb 16 02:20 sbin.dhclient
-rw-r--r-- 1 root root  121 Feb 16 02:35 usr.bin.evince
-rw-r--r-- 1 root root  122 Feb 16 02:36 usr.bin.firefox
-rw-r--r-- 1 root root  129 Feb 16 02:36 usr.bin.webbrowser-app
-rw-r--r-- 1 root root  133 Feb 16 02:34 usr.lib.snapd.snap-confine
-rw-r--r-- 1 root root  128 Feb 16 02:35 usr.sbin.cups-browsed
-rw-r--r-- 1 root root  121 Feb 16 02:32 usr.sbin.cupsd
-rw-r--r-- 1 root root  124 Feb 16 02:36 usr.sbin.ippusbxd
-rw-r--r-- 1 root root  124 Feb 16 02:20 usr.sbin.rsyslogd
-rw-r--r-- 1 root root  123 Feb 16 02:34 usr.sbin.tcpdump


В самом начале статус AppArmor следующий:

$ sudo apparmor_status
apparmor module is loaded.
22 profiles are loaded.
22 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/evince
   /usr/bin/evince-previewer
   /usr/bin/evince-previewer//sanitized_helper
   /usr/bin/evince-thumbnailer
   /usr/bin/evince-thumbnailer//sanitized_helper
   /usr/bin/evince//sanitized_helper
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/cups/backend/cups-pdf
   /usr/lib/lightdm/lightdm-guest-session
   /usr/lib/lightdm/lightdm-guest-session//chromium
   /usr/lib/snapd/snap-confine
   /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/sbin/cups-browsed
   /usr/sbin/cupsd
   /usr/sbin/cupsd//third_party
   /usr/sbin/ippusbxd
   /usr/sbin/tcpdump
   webbrowser-app
   webbrowser-app//oxide_helper
0 profiles are in complain mode.
2 processes have profiles defined.
2 processes are in enforce mode.
   /sbin/dhclient (1597) 
   /usr/sbin/cups-browsed (1223) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.


AppArmor поставляется с профилем для Firefox - это файл usr.bin.firefox, находящийся в каталоге /etc/apparmor.d. По умолчанию он не включен. Нужно включить вручную.

$ sudo rm /etc/apparmor.d/disable/usr.bin.firefox
$ sudo apparmor_parser -a /etc/apparmor.d/usr.bin.firefox
$ sudo apparmor_status
apparmor module is loaded.
27 profiles are loaded.
27 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/evince
   /usr/bin/evince-previewer
   /usr/bin/evince-previewer//sanitized_helper
   /usr/bin/evince-thumbnailer
   /usr/bin/evince-thumbnailer//sanitized_helper
   /usr/bin/evince//sanitized_helper
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/cups/backend/cups-pdf
   /usr/lib/firefox/firefox{,*[^s][^h]}
   /usr/lib/firefox/firefox{,*[^s][^h]}//browser_java
   /usr/lib/firefox/firefox{,*[^s][^h]}//browser_openjdk
   /usr/lib/firefox/firefox{,*[^s][^h]}//lsb_release
   /usr/lib/firefox/firefox{,*[^s][^h]}//sanitized_helper
   /usr/lib/lightdm/lightdm-guest-session
   /usr/lib/lightdm/lightdm-guest-session//chromium
   /usr/lib/snapd/snap-confine
   /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/sbin/cups-browsed
   /usr/sbin/cupsd
   /usr/sbin/cupsd//third_party
   /usr/sbin/ippusbxd
   /usr/sbin/tcpdump
   webbrowser-app
   webbrowser-app//oxide_helper
0 profiles are in complain mode.
2 processes have profiles defined.
2 processes are in enforce mode.
   /sbin/dhclient (1597) 
   /usr/sbin/cups-browsed (1223) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.


Профиль для Chromium нужно устанавливать отдельным пакетом.

$ sudo apt install apparmor-utils apparmor-profiles
$ ls -la /usr/share/doc/apparmor-profiles/extras/
total 408
drwxr-xr-x 2 root root 4096 Mar 19 22:37 .
drwxr-xr-x 3 root root 4096 Mar 19 22:37 ..
-rw-r--r-- 1 root root 1177 Oct 13 20:07 bin.netstat
-rw-r--r-- 1 root root 1252 Oct 13 20:07 etc.cron.daily.logrotate
-rw-r--r-- 1 root root  948 Oct 13 20:07 etc.cron.daily.slocate.cron
-rw-r--r-- 1 root root  722 Oct 13 20:07 etc.cron.daily.tmpwatch
-rw-r--r-- 1 root root 1724 Oct 13 20:07 README
-rw-r--r-- 1 root root 2571 Oct 13 20:07 sbin.dhclient
-rw-r--r-- 1 root root  513 Oct 13 20:07 sbin.dhclient-script
-rw-r--r-- 1 root root 1293 Oct 13 20:07 sbin.dhcpcd
-rw-r--r-- 1 root root  675 Oct 13 20:07 sbin.portmap
-rw-r--r-- 1 root root  866 Oct 13 20:07 sbin.resmgrd
-rw-r--r-- 1 root root  482 Oct 13 20:07 sbin.rpc.lockd
-rw-r--r-- 1 root root 1006 Oct 13 20:07 sbin.rpc.statd
-rw-r--r-- 1 root root 1648 Oct 13 20:07 usr.bin.acroread
-rw-r--r-- 1 root root  784 Oct 13 20:07 usr.bin.apropos
-rw-r--r-- 1 root root 4574 Oct 13 20:07 usr.bin.evolution-2.10
-rw-r--r-- 1 root root  690 Oct 13 20:07 usr.bin.fam
-rw-r--r-- 1 root root  743 Oct 13 20:07 usr.bin.freshclam
-rw-r--r-- 1 root root 1919 Oct 13 20:07 usr.bin.gaim
-rw-r--r-- 1 root root  649 Oct 13 20:07 usr.bin.man
-rw-r--r-- 1 root root  611 Oct 13 20:07 usr.bin.mlmmj-bounce
-rw-r--r-- 1 root root 1034 Oct 13 20:07 usr.bin.mlmmj-maintd
-rw-r--r-- 1 root root 1089 Oct 13 20:07 usr.bin.mlmmj-make-ml.sh
-rw-r--r-- 1 root root  877 Oct 13 20:07 usr.bin.mlmmj-process
-rw-r--r-- 1 root root  580 Oct 13 20:07 usr.bin.mlmmj-recieve
-rw-r--r-- 1 root root  759 Oct 13 20:07 usr.bin.mlmmj-send
-rw-r--r-- 1 root root  814 Oct 13 20:07 usr.bin.mlmmj-sub
-rw-r--r-- 1 root root  796 Oct 13 20:07 usr.bin.mlmmj-unsub
-rw-r--r-- 1 root root 2013 Oct 13 20:07 usr.bin.opera
-rw-r--r-- 1 root root 1044 Oct 13 20:07 usr.bin.passwd
-rw-r--r-- 1 root root 1018 Oct 13 20:07 usr.bin.procmail
-rw-r--r-- 1 root root 2491 Oct 13 20:07 usr.bin.skype
-rw-r--r-- 1 root root  580 Oct 13 20:07 usr.bin.spamc
-rw-r--r-- 1 root root  897 Oct 13 20:07 usr.bin.svnserve
-rw-r--r-- 1 root root 1178 Oct 13 20:07 usr.bin.wireshark
-rw-r--r-- 1 root root  670 Oct 13 20:07 usr.bin.xfs
-rw-r--r-- 1 root root 1015 Oct 13 20:07 usr.lib64.GConf.2.gconfd-2
-rw-r--r-- 1 root root  857 Oct 13 20:07 usr.lib.bonobo.bonobo-activation-server
-rw-r--r-- 1 root root 1251 Oct 13 20:07 usr.lib.evolution-data-server.evolution-data-server-1.10
-rw-r--r-- 1 root root 3757 Oct 13 20:07 usr.lib.firefox.firefox
-rw-r--r-- 1 root root  386 Oct 13 20:07 usr.lib.firefox.firefox.sh
-rw-r--r-- 1 root root  654 Oct 13 20:07 usr.lib.firefox.mozilla-xremote-client
-rw-r--r-- 1 root root 1011 Oct 13 20:07 usr.lib.GConf.2.gconfd-2
-rw-r--r-- 1 root root 1600 Oct 13 20:07 usr.lib.man-db.man
-rw-r--r-- 1 root root  880 Oct 13 20:07 usr.lib.postfix.anvil
-rw-r--r-- 1 root root 2092 Oct 13 20:07 usr.lib.postfix.bounce
-rw-r--r-- 1 root root 1260 Oct 13 20:07 usr.lib.postfix.cleanup
-rw-r--r-- 1 root root  523 Oct 13 20:07 usr.lib.postfix.discard
-rw-r--r-- 1 root root  617 Oct 13 20:07 usr.lib.postfix.error
-rw-r--r-- 1 root root 1692 Oct 13 20:07 usr.lib.postfix.flush
-rw-r--r-- 1 root root  615 Oct 13 20:07 usr.lib.postfix.lmtp
-rw-r--r-- 1 root root 1830 Oct 13 20:07 usr.lib.postfix.local
-rw-r--r-- 1 root root 1879 Oct 13 20:07 usr.lib.postfix.master
-rw-r--r-- 1 root root 2434 Oct 13 20:07 usr.lib.postfix.nqmgr
-rw-r--r-- 1 root root  598 Oct 13 20:07 usr.lib.postfix.oqmgr
-rw-r--r-- 1 root root  850 Oct 13 20:07 usr.lib.postfix.pickup
-rw-r--r-- 1 root root  490 Oct 13 20:07 usr.lib.postfix.pipe
-rw-r--r-- 1 root root  700 Oct 13 20:07 usr.lib.postfix.proxymap
-rw-r--r-- 1 root root 2455 Oct 13 20:07 usr.lib.postfix.qmgr
-rw-r--r-- 1 root root  617 Oct 13 20:07 usr.lib.postfix.qmqpd
-rw-r--r-- 1 root root  671 Oct 13 20:07 usr.lib.postfix.scache
-rw-r--r-- 1 root root 2251 Oct 13 20:07 usr.lib.postfix.showq
-rw-r--r-- 1 root root 1818 Oct 13 20:07 usr.lib.postfix.smtp
-rw-r--r-- 1 root root 2099 Oct 13 20:07 usr.lib.postfix.smtpd
-rw-r--r-- 1 root root  617 Oct 13 20:07 usr.lib.postfix.spawn
-rw-r--r-- 1 root root  788 Oct 13 20:07 usr.lib.postfix.tlsmgr
-rw-r--r-- 1 root root  895 Oct 13 20:07 usr.lib.postfix.trivial-rewrite
-rw-r--r-- 1 root root  619 Oct 13 20:07 usr.lib.postfix.verify
-rw-r--r-- 1 root root  779 Oct 13 20:07 usr.lib.postfix.virtual
-rw-r--r-- 1 root root 1332 Oct 13 20:07 usr.lib.RealPlayer10.realplay
-rw-r--r-- 1 root root 1067 Oct 13 20:07 usr.NX.bin.nxclient
-rw-r--r-- 1 root root  950 Oct 13 20:07 usr.sbin.dhcpd
-rw-r--r-- 1 root root 5910 Oct 13 20:07 usr.sbin.httpd2-prefork
-rw-r--r-- 1 root root  798 Oct 13 20:07 usr.sbin.imapd
-rw-r--r-- 1 root root  648 Oct 13 20:07 usr.sbin.in.fingerd
-rw-r--r-- 1 root root 1278 Oct 13 20:07 usr.sbin.in.ftpd
-rw-r--r-- 1 root root  586 Oct 13 20:07 usr.sbin.in.ntalkd
-rw-r--r-- 1 root root  803 Oct 13 20:07 usr.sbin.ipop2d
-rw-r--r-- 1 root root  803 Oct 13 20:07 usr.sbin.ipop3d
-rw-r--r-- 1 root root 1675 Oct 13 20:07 usr.sbin.lighttpd
-rw-r--r-- 1 root root  916 Oct 13 20:07 usr.sbin.nmbd
-rw-r--r-- 1 root root  823 Oct 13 20:07 usr.sbin.oidentd
-rw-r--r-- 1 root root  728 Oct 13 20:07 usr.sbin.popper
-rw-r--r-- 1 root root 1322 Oct 13 20:07 usr.sbin.postalias
-rw-r--r-- 1 root root 1008 Oct 13 20:07 usr.sbin.postdrop
-rw-r--r-- 1 root root  821 Oct 13 20:07 usr.sbin.postmap
-rw-r--r-- 1 root root 1125 Oct 13 20:07 usr.sbin.postqueue
-rw-r--r-- 1 root root 3336 Oct 13 20:07 usr.sbin.sendmail
-rw-r--r-- 1 root root 2052 Oct 13 20:07 usr.sbin.sendmail.postfix
-rw-r--r-- 1 root root 1566 Oct 13 20:07 usr.sbin.sendmail.sendmail
-rw-r--r-- 1 root root 1136 Oct 13 20:07 usr.sbin.smbd
-rw-r--r-- 1 root root 1061 Oct 13 20:07 usr.sbin.spamd
-rw-r--r-- 1 root root 1682 Oct 13 20:07 usr.sbin.squid
-rw-r--r-- 1 root root 4197 Oct 13 20:07 usr.sbin.sshd
-rw-r--r-- 1 root root 1473 Oct 13 20:07 usr.sbin.useradd
-rw-r--r-- 1 root root 1330 Oct 13 20:07 usr.sbin.userdel
-rw-r--r-- 1 root root 1242 Oct 13 20:07 usr.sbin.vsftpd
-rw-r--r-- 1 root root 2409 Oct 13 20:07 usr.sbin.xinetd
$ sudo apparmor_status
apparmor module is loaded.
67 profiles are loaded.
30 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/evince
   /usr/bin/evince-previewer
   /usr/bin/evince-previewer//sanitized_helper
   /usr/bin/evince-thumbnailer
   /usr/bin/evince-thumbnailer//sanitized_helper
   /usr/bin/evince//sanitized_helper
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/chromium-browser/chromium-browser//browser_java
   /usr/lib/chromium-browser/chromium-browser//browser_openjdk
   /usr/lib/chromium-browser/chromium-browser//sanitized_helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/cups/backend/cups-pdf
   /usr/lib/firefox/firefox{,*[^s][^h]}
   /usr/lib/firefox/firefox{,*[^s][^h]}//browser_java
   /usr/lib/firefox/firefox{,*[^s][^h]}//browser_openjdk
   /usr/lib/firefox/firefox{,*[^s][^h]}//lsb_release
   /usr/lib/firefox/firefox{,*[^s][^h]}//sanitized_helper
   /usr/lib/lightdm/lightdm-guest-session
   /usr/lib/lightdm/lightdm-guest-session//chromium
   /usr/lib/snapd/snap-confine
   /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/sbin/cups-browsed
   /usr/sbin/cupsd
   /usr/sbin/cupsd//third_party
   /usr/sbin/ippusbxd
   /usr/sbin/tcpdump
   webbrowser-app
   webbrowser-app//oxide_helper
37 profiles are in complain mode.
   /usr/lib/chromium-browser/chromium-browser
   /usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox
   /usr/lib/chromium-browser/chromium-browser//lsb_release
   /usr/lib/chromium-browser/chromium-browser//xdgsettings
   /usr/lib/dovecot/anvil
   /usr/lib/dovecot/auth
   /usr/lib/dovecot/config
   /usr/lib/dovecot/deliver
   /usr/lib/dovecot/dict
   /usr/lib/dovecot/dovecot-auth
   /usr/lib/dovecot/dovecot-lda
   /usr/lib/dovecot/dovecot-lda///usr/sbin/sendmail
   /usr/lib/dovecot/imap
   /usr/lib/dovecot/imap-login
   /usr/lib/dovecot/lmtp
   /usr/lib/dovecot/log
   /usr/lib/dovecot/managesieve
   /usr/lib/dovecot/managesieve-login
   /usr/lib/dovecot/pop3
   /usr/lib/dovecot/pop3-login
   /usr/lib/dovecot/ssl-params
   /usr/sbin/avahi-daemon
   /usr/sbin/dnsmasq
   /usr/sbin/dnsmasq//libvirt_leaseshelper
   /usr/sbin/dovecot
   /usr/sbin/identd
   /usr/sbin/mdnsd
   /usr/sbin/nmbd
   /usr/sbin/nscd
   /usr/sbin/smbd
   /usr/sbin/smbldap-useradd
   /usr/sbin/smbldap-useradd///etc/init.d/nscd
   /usr/{sbin/traceroute,bin/traceroute.db}
   /{usr/,}bin/ping
   klogd
   syslog-ng
   syslogd
5 processes have profiles defined.
2 processes are in enforce mode.
   /sbin/dhclient (1597) 
   /usr/sbin/cups-browsed (1223) 
0 processes are in complain mode.
3 processes are unconfined but have a profile defined.
   /usr/sbin/avahi-daemon (1153) 
   /usr/sbin/avahi-daemon (1208) 
   /usr/sbin/dnsmasq (1607) 


Рассмотрим профиль для Firefox расположенный по адресу /etc/apparmor.d/disable/usr.bin.firefox

# vim:syntax=apparmor
# Author: Jamie Strandboge <jamie@canonical.com>

# Declare an apparmor variable to help with overrides
@{MOZ_LIBDIR}=/usr/lib/firefox

#include <tunables/global>

# We want to confine the binaries that match:
#  /usr/lib/firefox/firefox
#  /usr/lib/firefox/firefox
# but not:
#  /usr/lib/firefox/firefox.sh
/usr/lib/firefox/firefox{,*[^s][^h]} {
  #include <abstractions/audio>
  #include <abstractions/cups-client>
  #include <abstractions/dbus-strict>
  #include <abstractions/dbus-session-strict>
  #include <abstractions/dconf>
  #include <abstractions/gnome>
  #include <abstractions/ibus>
  #include <abstractions/nameservice>
  #include <abstractions/openssl>
  #include <abstractions/p11-kit>
  #include <abstractions/ubuntu-unity7-base>
  #include <abstractions/ubuntu-unity7-launcher>

  #include <abstractions/dbus-accessibility-strict>
  dbus (send)
       bus=session
       peer=(name=org.a11y.Bus),
  dbus (receive)
       bus=session
       interface=org.a11y.atspi**,
  dbus (receive, send)
       bus=accessibility,

  # for networking
  network inet stream,
  network inet6 stream,
  @{PROC}/[0-9]*/net/if_inet6 r,
  @{PROC}/[0-9]*/net/ipv6_route r,
  @{PROC}/[0-9]*/net/dev r,
  @{PROC}/[0-9]*/net/wireless r,
  dbus (send)
       bus=system
       path=/org/freedesktop/NetworkManager
       member=state,
  dbus (receive)
       bus=system
       path=/org/freedesktop/NetworkManager,

  # should maybe be in abstractions
  /etc/ r,
  /etc/mime.types r,
  /etc/mailcap r,
  /etc/xdg/*buntu/applications/defaults.list    r, # for all derivatives
  /etc/xfce4/defaults.list r,
  /usr/share/xubuntu/applications/defaults.list r,
  owner @{HOME}/.local/share/applications/defaults.list r,
  owner @{HOME}/.local/share/applications/mimeapps.list r,
  owner @{HOME}/.local/share/applications/mimeinfo.cache r,
  owner /tmp/** m,
  owner /var/tmp/** m,
  owner /{,var/}run/shm/shmfd-* rw,
  owner /{dev,run}/shm/org.chromium.* rwk,
  /tmp/.X[0-9]*-lock r,
  /etc/udev/udev.conf r,
  # Doesn't seem to be required, but noisy. Maybe allow 'r' for 'b*' if needed.
  # Possibly move to an abstraction if anything else needs it.
  deny /run/udev/data/** r,
  # let the shell know we launched something
  dbus (send)
     bus=session
     interface=org.gtk.gio.DesktopAppInfo
     member=Launched,

  /etc/timezone r,
  /etc/wildmidi/wildmidi.cfg r,

  # firefox specific
  /etc/firefox*/ r,
  /etc/firefox*/** r,
  /etc/xul-ext/** r,
  /etc/xulrunner-2.0*/ r,
  /etc/xulrunner-2.0*/** r,
  /etc/gre.d/ r,
  /etc/gre.d/* r,

  # noisy
  deny @{MOZ_LIBDIR}/** w,
  deny /usr/lib/firefox-addons/** w,
  deny /usr/lib/xulrunner-addons/** w,
  deny /usr/lib/xulrunner-*/components/*.tmp w,
  deny /.suspended r,
  deny /boot/initrd.img* r,
  deny /boot/vmlinuz* r,
  deny /var/cache/fontconfig/ w,
  deny @{HOME}/.local/share/recently-used.xbel r,

  # TODO: investigate
  deny /usr/bin/gconftool-2 x,

  # These are needed when a new user starts firefox and firefox.sh is used
  @{MOZ_LIBDIR}/** ixr,
  /usr/bin/basename ixr,
  /usr/bin/dirname ixr,
  /usr/bin/pwd ixr,
  /sbin/killall5 ixr,
  /bin/which ixr,
  /usr/bin/tr ixr,
  @{PROC}/ r,
  @{PROC}/[0-9]*/cmdline r,
  @{PROC}/[0-9]*/mountinfo r,
  @{PROC}/[0-9]*/stat r,
  owner @{PROC}/[0-9]*/task/[0-9]*/stat r,
  @{PROC}/[0-9]*/status r,
  @{PROC}/filesystems r,
  @{PROC}/sys/vm/overcommit_memory r,
  /sys/devices/pci[0-9]*/**/uevent r,
  /sys/devices/platform/**/uevent r,
  /sys/devices/pci*/**/{busnum,idVendor,idProduct} r,
  owner @{HOME}/.cache/thumbnails/** rw,

  /etc/mtab r,
  /etc/fstab r,

  # Needed for the crash reporter
  owner @{PROC}/[0-9]*/environ r,
  owner @{PROC}/[0-9]*/auxv r,
  /etc/lsb-release r,
  /usr/bin/expr ix,
  /sys/devices/system/cpu/ r,
  /sys/devices/system/cpu/** r,

  # about:memory
  owner @{PROC}/[0-9]*/statm r,
  owner @{PROC}/[0-9]*/smaps r,

  # Needed for container to work in xul builds
  /usr/lib/xulrunner-*/plugin-container ixr,

  # allow access to documentation and other files the user may want to look
  # at in /usr and /opt
  /usr/ r,
  /usr/** r,
  /opt/ r,
  /opt/** r,

  # so browsing directories works
  / r,
  /**/ 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,

  # per-user firefox configuration
  owner @{HOME}/.{firefox,mozilla}/ rw,
  owner @{HOME}/.{firefox,mozilla}/** rw,
  owner @{HOME}/.{firefox,mozilla}/**/*.{db,parentlock,sqlite}* k,
  owner @{HOME}/.{firefox,mozilla}/plugins/** rm,
  owner @{HOME}/.{firefox,mozilla}/**/plugins/** rm,
  owner @{HOME}/.gnome2/firefox* rwk,
  owner @{HOME}/.cache/mozilla/{,firefox/} rw,
  owner @{HOME}/.cache/mozilla/firefox/** rw,
  owner @{HOME}/.cache/mozilla/firefox/**/*.sqlite k,
  owner @{HOME}/.config/gtk-3.0/bookmarks r,
  owner @{HOME}/.config/dconf/user w,
  owner /{,var/}run/user/*/dconf/user w,
  dbus (send)
       bus=session
       path=/org/gnome/GConf/Server
       member=GetDefaultDatabase,
  dbus (send)
       bus=session
       path=/org/gnome/GConf/Database/*
       member={AddMatch,AddNotify,AllEntries,LookupExtended,RemoveNotify},

  #
  # Extensions
  # /usr/share/.../extensions/... is already covered by '/usr/** r', above.
  # Allow 'x' for downloaded extensions, but inherit policy for safety
  owner @{HOME}/.mozilla/**/extensions/** mixr,

  deny @{MOZ_LIBDIR}/update.test w,
  deny /usr/lib/mozilla/extensions/**/ w,
  deny /usr/lib/xulrunner-addons/extensions/**/ w,
  deny /usr/share/mozilla/extensions/**/ w,
  deny /usr/share/mozilla/ w,

  # Miscellaneous (to be abstracted)
  # Ideally these would use a child profile. They are all ELF executables
  # so running with 'Ux', while not ideal, is ok because we will at least
  # benefit from glibc's secure execute.
  /usr/bin/mkfifo Uxr,  # investigate
  /bin/ps Uxr,
  /bin/uname Uxr,

  /usr/bin/lsb_release Cxr -> lsb_release,
  profile lsb_release {
    #include <abstractions/base>
    #include <abstractions/python>
    /usr/bin/lsb_release r,
    /bin/dash ixr,
    /usr/bin/dpkg-query ixr,
    /usr/include/python2.[4567]/pyconfig.h r,
    /etc/lsb-release r,
    /etc/debian_version r,
    /var/lib/dpkg/** r,

    /usr/local/lib/python3.[0-4]/dist-packages/ r,
    /usr/bin/ r,
    /usr/bin/python3.[0-4] r,

    # file_inherit
    deny /tmp/gtalkplugin.log w,
  }

  # Addons
  #include <abstractions/ubuntu-browsers.d/firefox>

  # Site-specific additions and overrides. See local/README for details.
  #include <local/usr.bin.firefox>
}


Как видим в конце подключается файл /etc/apparmor.d/local/usr.bin.firefox, он предназначен для пользовательской донастройки. Его можно редактировать при необходимости.

Профиль для Chromium /etc/apparmor.d/usr.bin.chromium-browser

# Author: Jamie Strandboge <jamie@canonical.com>
#include <tunables/global>

# We need 'flags=(attach_disconnected)' in newer chromium versions
/usr/lib/chromium-browser/chromium-browser flags=(complain,attach_disconnected) {
  #include <abstractions/audio>
  #include <abstractions/cups-client>
  #include <abstractions/dbus-session>
  #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 <abstractions/ubuntu-browsers.d/chromium-browser>

  # 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}/[0-9]*/task/[0-9]*/stat r,
  owner @{PROC}/[0-9]*/cmdline r,
  owner @{PROC}/[0-9]*/io r,
  @{PROC}/[0-9]*/smaps r,
  owner @{PROC}/[0-9]*/stat r,
  @{PROC}/[0-9]*/statm r,
  owner @{PROC}/[0-9]*/status r,
  deny @{PROC}/[0-9]*/oom_{,score_}adj w,
  @{PROC}/sys/kernel/yama/ptrace_scope r,

  # Newer chromium needs these now
  /etc/udev/udev.conf r,
  /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq r,
  /sys/devices/pci[0-9]*/**/class 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]*/**/vendor r,
  /sys/devices/pci[0-9]*/**/removable r,
  /sys/devices/pci[0-9]*/**/uevent r,
  /sys/devices/pci[0-9]*/**/block/**/size r,
  /sys/devices/virtual/block/**/removable r,
  /sys/devices/virtual/block/**/uevent r,
  /sys/devices/virtual/block/**/size 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,

  # 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),

  /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 flags=(complain) {
    #include <abstractions/bash>
    #include <abstractions/gnome>

    /bin/dash ixr,

    /etc/ld.so.cache r,
    /usr/bin/xdg-settings r,
    /usr/lib/chromium-browser/xdg-settings r,
    /usr/share/applications/*.desktop r,

    # Checking default browser
    /bin/grep ixr,
    /bin/readlink ixr,
    /bin/sed ixr,
    /bin/which ixr,
    /usr/bin/basename ixr,
    /usr/bin/cut ixr,

    # Setting the default browser
    /bin/mkdir ixr,
    /bin/mv ixr,
    /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 flags=(complain) {
    #include <abstractions/base>
    #include <abstractions/python>
    /usr/bin/lsb_release r,
    /bin/dash ixr,
    /usr/bin/dpkg-query ixr,
    /usr/include/python2.[4567]/pyconfig.h r,
    /etc/lsb-release r,
    /etc/debian_version r,
    /var/lib/dpkg/** r,

    /usr/local/lib/python3.[0-4]/dist-packages/ r,
    /usr/bin/ r,
    /usr/bin/python3.[0-4] r,
  }


  # Site-specific additions and overrides. See local/README for details.
  #include <local/usr.bin.chromium-browser>

profile chromium_browser_sandbox flags=(complain) {
    # Be fanatical since it is setuid root and don't use an abstraction
    /lib/libgcc_s.so* mr,
    /lib/@{multiarch}/libgcc_s.so* mr,
    /lib{,32,64}/libm-*.so* mr,
    /lib/@{multiarch}/libm-*.so* mr,
    /lib{,32,64}/libpthread-*.so* mr,
    /lib/@{multiarch}/libpthread-*.so* mr,
    /lib{,32,64}/libc-*.so* mr,
    /lib/@{multiarch}/libc-*.so* mr,
    /lib{,32,64}/libld-*.so* mr,
    /lib/@{multiarch}/libld-*.so* mr,
    /lib{,32,64}/ld-*.so* mr,
    /lib/@{multiarch}/ld-*.so* mr,
    /lib/tls/*/{cmov,nosegneg}/libm-*.so* mr,
    /lib/tls/*/{cmov,nosegneg}/libpthread-*.so* mr,
    /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 r,

    /dev/null rw,

    owner /tmp/** rw,
  }
}




--
http://forums.opera.com/discussion/1865087/no-suid-sandbox/p1