Конфигурирование AppArmor

Автор sidbar, 28 февраля 2016, 12:28:35

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

sidbar

Пытаюсь понять AppArmor, кто хочет разобраться участвуйте, пожалуйста, в обсуждении, коментариях и дополнениях.
Пока что понял, программа работает в нескольких режимах, режиме принудительного исполнения(enforce) и режиме обучения(complain), в котором конфиг не применяется, а только фиксируется в логах. При установке надо добавить утилиты и набор базовых конфигов для программ:
aptitude install apparmor apparmor-docs apparmor-profiles apparmor-profiles-extra apparmor-utils apparmor-notify

Создать новый профиль для файрфокса:
aa-genprof /usr/lib/firefox/firefox
получаем такой профиль в /etc/apparmor.d

  /usr/lib/firefox/firefox {
  #include <abstractions/base>

  /usr/lib/firefox/firefox mr,

}

r – разрешение на чтение
m – присвоение участку памяти атрибута «исполняемый»

перезапустить профиль:
sudo apparmor_parser -r /etc/apparmor.d/usr.lib.firefox.firefox

Посмотреть какие профили активны в системе:
sudo cat /sys/kernel/security/apparmor/profiles
sudo apparmor_status


если закоментируем строку - # /usr/lib/firefox/firefox mr то программа перестанет запускаться в enforce режиме, это для проверки работы AppArmor и наглядной демонстрации команды sudo apparmor_status

добавим перевод программы в режим обучения заменив /usr/bin/firefox на /usr/bin/firefox flags=(complain) тоже самое можно сделать набрав в консоли:
aa-complain /etc/apparmor.d/usr.lib.firefox.firefox

Отключить профиль firefox:

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


Чтобы определить список незащищенных программ(активных в памяти) есть утилита
sudo aa-unconfined

профили для программ лежат в /usr/share/doc/apparmor-profiles/extras/

рабочие профили:
для skype
Открыть содержимое (спойлер)
#include <tunables/global>
/usr/bin/skype {
  #include <abstractions/audio>
  #include <abstractions/base>
  #include <abstractions/fonts>
  #include <abstractions/freedesktop.org>
  #include <abstractions/gnome>
  #include <abstractions/kde>
  #include <abstractions/ibus>
  #include <abstractions/nameservice>
  #include <abstractions/nvidia>
  #include <abstractions/user-tmp>
  #include <abstractions/X>
  #include <abstractions/ssl_certs>

  @{PROC}/sys/kernel/{ostype,osrelease} r,
  @{PROC}/[0-9]*/net/arp r,

  owner @{PROC}/[0-9]*/net/dev r,
  /sys/devices/virtual/net/ppp*/flags r,

  owner @{PROC}/[0-9]*/auxv r,
  owner @{PROC}/[0-9]*/cmdline r,
  owner @{PROC}/[0-9]*/task/ r,
  owner @{PROC}/[0-9]*/task/[0-9]*/stat r,
  owner @{PROC}/[0-9]*/fd/ r,

  /sys/devices/**/power_supply/**/online r,
  /sys/devices/system/cpu/ r,
  /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_{cur_freq,max_freq} r,

  /dev/ r,
  /dev/video* mrw,
  /dev/snd/* m,
  owner /dev/shm/pulse-shm* m,
  owner /run/shm/pulse-shm* m,

  /var/cache/libx11/compose/* r,
  /var/lib/dbus/machine-id r,

  @{HOME}/.kde/share/config/kioslaverc r,

  /usr/bin/skype mr,
  /etc/xdg/sni-qt.conf rk,
  /etc/xdg/Trolltech.conf rk,
  /usr/share/skype/** kr,
  /usr/share/skype/**/*.qm mr,
  /usr/share/skype/sounds/*.wav kr,
  /usr/share/glib-2.0/schemas/gschemas.compiled mr,
  @{HOME}/.Skype/ rw,
  @{HOME}/.Skype/** krw,
  @{HOME}/.config/* kr,

  # Recent skype builds have an executable stack, so it tries to mmap certain
  # files. Let's deny them for now.
  deny /etc/passwd m,
  deny /etc/group m,
  deny /usr/share/fonts/** m,
  deny /usr/share/texmf/fonts/** m,
  # Should not be needed on 12.04 and later
  /usr/lib/*-linux-gnu*/pango/** mr,

  @{HOME}/.mozilla/ r,
  @{HOME}/.mozilla/*/ r,
  @{HOME}/.mozilla/*/*/ r,
  @{HOME}/.mozilla/*/*/bookmarkbackups/ r,
  @{HOME}/.mozilla/*/*/chrome/ r,
  @{HOME}/.mozilla/*/*/extensions/ r,
  @{HOME}/.mozilla/*/*/prefs.js r,
}
[свернуть]
iceweasel
Открыть содержимое (спойлер)
# Author: Jamie Strandboge <jamie@canonical.com>

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

#include <tunables/global>

# We want to confine the binaries that match:
#  /@MOZ_LIBDIR@/@MOZ_APP_NAME@
#  /@MOZ_LIBDIR@/iceweasel
# but not:
#  /@MOZ_LIBDIR@/iceweasel.sh
/usr/lib/iceweasel/iceweasel {
  #include <abstractions/audio>
  #include <abstractions/cups-client>
  #include <abstractions/dbus-session>
  #include <abstractions/gnome>
  #include <abstractions/nameservice>
  #include <abstractions/p11-kit>

  # Addons
  /usr/share/xul-ext/** r,
  # 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,

  # should maybe be in abstractions
  /usr/lib/iceweasel/iceweasel ixr,
  /etc/ r,
  /etc/mime.types r,
  /etc/mailcap r,
  /etc/xdg/*/applications/defaults.list    r, # for all derivatives
  /usr/share/*/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 @{HOME}/.gstreamer*/{,**} rw,
  owner /tmp/** m,
  owner /var/tmp/** m,
  /tmp/.X[0-9]*-lock r,

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

  # iceweasel specific
  /etc/iceweasel*/ r,
  /etc/iceweasel*/** 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 /@MOZ_ADDONDIR@/** 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 iceweasel and iceweasel.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,
  owner @{HOME}/.thumbnails/*/*.png r,

  /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{,-*}/** ixr,

  # allow access to documentation and other files the user may want to look
  # at in /usr and /opt
  /usr/lib/{,**} rm,
  /usr/share/iceweasel/{,**} r,
  /usr/share/mozilla/{,**} r,
  /usr/{local/,}share/glib-2.0/{,**} r,
  /usr/share/xulrunner{,-*}/{,**} r,
  /usr/share/mime/{,**} r,
  /usr/share/gstreamer*/{,**} r,
  /usr/share/hunspell/{,**} r,

  # so browsing directories works

  # Default profile allows downloads to ~/Downloads and uploads from ~/Public
  owner @{HOME}/Downloads/ r,
  owner @{HOME}/Downloads/** rwk,

  # per-user iceweasel configuration
  owner @{HOME}/.cache/{iceweasel,mozilla}/{,**} rw,
  owner @{HOME}/.cache/dconf/user rw,
  owner @{HOME}/.cache/dconf/ rw,
  owner @{HOME}/.config/dconf/user r,
  owner @{HOME}/.{iceweasel,mozilla}/ rw,
  owner @{HOME}/.{iceweasel,mozilla}/** rw,
  owner @{HOME}/.{iceweasel,mozilla}/**/*.{db,parentlock,sqlite}* k,
  owner @{HOME}/.{iceweasel,mozilla}/plugins/** rm,
  owner @{HOME}/.{iceweasel,mozilla}/**/plugins/** rm,
  owner @{HOME}/.config/ibus/bus/ w,
  owner @{HOME}/.gnome2/iceweasel*-bin-* rw,

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

  # Site-specific additions and overrides. See local/README for details.
}
[свернуть]
icedove
Открыть содержимое (спойлер)
# Falcon Peregrinus
# Public Domain
# It's an icedove profile, partially rewritten for more cleaner style, taken somewhere from
# gist.
#include <tunables/global>

/usr/lib/icedove/icedove-bin {
  #include <abstractions/base>
  #include <abstractions/fonts>
  #include <abstractions/gnome>
  #include <abstractions/nameservice>

  /etc/icedove/{,**} r,
  owner @{HOME}/.Xauthority r,
  owner @{HOME}/.icedove/{,**} rwk,
  owner @{HOME}/Downloads/{,**} rwk,
  owner @{HOME}/.cache/event-sound-cache* rwk,
  /proc/filesystems r,
  /usr/lib/iceweasel/{,**} px,
  /usr/lib/icedove/{,**} r,
  /usr/share/hunspell/{,**} r,
  /usr/share/icedove/{,**} r,
  /usr/share/mozilla/{,**} r,
  /usr/share/xul-ext/{,**} r,
  /usr/share/myspell/{,**} r,
  /usr/share/mime/{,**} r,

  # Self-restarts.
  /usr/lib/icedove/icedove-bin ix,

  # Upgrade to icedove 3.0.4.

  owner @{HOME}/.icedove/{,**} rwk,
  owner @{HOME}/.mozilla/extensions/{,**} rwk,
  owner @{HOME}/.local/share/icons/{,**} r,
  owner @{HOME}/.esd_auth r,
  /etc/{mime.types,mailcap,rpc,mtab} r,
  /usr/share/hunspell/{,*} r,
  /usr/bin/sensible-browser rix,

  owner @{HOME}/.local/share/mime/* r,

  # Generic plugins.
  /usr/lib/nspluginwrapper/plugins/*.so rm,
}
[свернуть]
deluge
Открыть содержимое (спойлер)
# Last Modified: Fri Apr 19 00:20:59 2013
#include <tunables/global>

/usr/bin/deluge{,-gtk} {
  #include <abstractions/base>
  #include <abstractions/python>
  #include <abstractions/audio>
  #include <abstractions/gnome>
  #include <abstractions/dbus-session>
  #include <abstractions/nameservice>

  /usr/bin/deluge{,-gtk} ixr,
  /usr/bin/python2.7 ix,
  /usr/bin/{,**} r,
  /usr/share/GeoIP/{,**} r,
  owner @{HOME}/.config/deluge/{,**} rwk,
  owner @{HOME}/Downloads/{,**} rwk,

}
[свернуть]
Если есть желающие поделиться своими наработками и секретами в управлении этой полезной утилиты, буду очень рад видеть ваши сообщения, всех благ!
Devuan GNU/Linux