main

Apparmor и TOMOYO с точки зрения удобства

Попробовал вчера настроить первое, понравилось. имхо, спроектированно намного грамотнее, чем томойо. Для человеков, так сказать. Начиная с того, что не требует настройки абсолютно всего, и заканчивая удобными профилями, в разных файлах с инклюдами. В томойо за 2 года как был один общий профиль на всех, так сейчас стало можно настроить несколько, но подключить можно всё равно, сцуко, один. Дублирование записей для каждого разрешения тоже порядком бесит.

А именно:

Полные права на один файл:

# tomoyo:
allow_read     /path/to/file
allow_write    /path/to/file
allow_truncate /path/to/file
allow_unlink   /path/to/file

# apparmor:
/path/to/file rw

Полные права на директорию и файлы в ней

tomoyo:
allow_mkdir     /path/to/dir/
allow_rmdir     /path/to/dir/
allow_mkdir     /path/to/dir/\{\*\}/
allow_rmdir     /path/to/dir/\{\*\}/
allow_read      /path/to/dir/\*
allow_write     /path/to/dir/\*
allow_truncate  /path/to/dir/\*
allow_unlink    /path/to/dir/\*
allow_read      /path/to/dir/\{\*\}/\*
allow_write     /path/to/dir/\{\*\}/\*
allow_truncate  /path/to/dir/\{\*\}/\*
allow_unlink    /path/to/dir/\{\*\}/\*

# apparmor:
/path/to/dir/ rw,
/path/to/dir/** rw,

Как говорится, комментарии излишни. Кроме того, в apparmor'e этот набор можно описать одиножды и потом включать его одной строчкой. В tomoyo придётся либо дублировать его для каждого приложения, либо дублировать на уровне профиля.

Ещё попугаю:

squid, без учёта вышестоящих уровней и глобальных правил:

# tomoyo:
<kernel> /usr/sbin/squid use_profile 3
allow_create      /var/cache/squid/\*/\*/\* 0640
allow_read/write  /var/cache/squid/\*/\*/\*
allow_unlink      /var/cache/squid/\*/\*/\*
allow_truncate    /var/cache/squid/\*/\*/\*
allow_read        /etc/squid/squid.conf
allow_read        /etc/nsswitch.conf
allow_read        /etc/passwd
allow_read        /etc/group
allow_read        /dev/urandom
allow_read/write  /var/run/squid.pid
allow_unlink      /var/run/squid.pid
allow_truncate    /var/run/squid.pid
allow_create      /var/cache/squid/swap.state.clean 0640
allow_chmod       /var/cache/squid/swap.state.clean 0640
allow_write       /var/cache/squid/swap.state.clean
allow_write       /var/cache/squid/swap.state.last-clean
allow_unlink      /var/cache/squid/swap.state.last-clean
allow_rename      /var/cache/squid/swap.state.clean /var/cache/squid/swap.state
allow_create      /var/cache/squid/swap.state.last-clean 0640
allow_read/write  /dev/tty
allow_read/write  /dev/null
allow_execute     /usr/sbin/squid
allow_read        /etc/hosts
allow_read        /etc/resolv.conf
allow_execute     /usr/lib/squid/pam_auth
allow_execute     /usr/lib/squid/unlinkd
allow_read/write  /var/cache/squid/swap.state
allow_create      /var/cache/squid/swap.state.new 0640
allow_write       /var/cache/squid/swap.state.new
allow_unlink      /var/cache/squid/swap.state.new
allow_truncate    /var/cache/squid/swap.state.new
allow_read        /proc/\$/mounts
allow_read        /etc/squid/mime.conf
allow_read        /etc/services
allow_create      /var/run/squid.pid 0644
allow_rename      /var/cache/squid/swap.state.new /var/cache/squid/swap.state
allow_read        /usr/share/squid/errors/Russian-utf8-custom/ERR_\*
allow_read        /usr/share/squid/icons/\*.gif
allow_execute     /usr/lib/squid/mysql_auth
allow_rename      /var/log/squid/\*.log.\$ /var/log/squid/\*.log.\$
allow_rename      /var/log/squid/\*.log /var/log/squid/\*.log.\$
allow_read/write  /var/log/squid/\*.log
allow_create      /var/log/squid/\*.log 0640
allow_create      /var/cache/squid/core 0600
allow_read/write  /var/cache/squid/core
allow_execute     /usr/lib/squid/squid_ldap_auth
allow_execute     /usr/lib/squid/squid_ldap_group
allow_read        /etc/squid/errorpage.css
allow_create      /var/cache/squid/swap.state.new 0644
allow_create      /var/cache/squid/\*/\*/\* 0644
allow_read        /usr/share/squid/errors/templates/ERR_\*
allow_create      /var/log/squid/cache.log 0666
allow_create      /var/cache/squid/swap.state.clean 0644
allow_create      /var/cache/squid/swap.state.last-clean 0644
allow_create      /var/log/squid/access.log 0644 </code>

vs

# apparmor:
#include <tunables/global>

/usr/sbin/squid3 flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/consoles>
  #include <abstractions/nameservice>

  capability setgid,
  capability setuid,

  /etc/squid3/* r,
  /proc/sys/kernel/ngroups_max r,
  /run/squid3.pid rw,
  /usr/lib/squid3/unlinkd rix,
  /usr/sbin/squid3 mrix,
  /usr/share/squid-langpack/** r,
  /usr/share/squid3/** r,
  /var/log/squid3/* w,
  /var/log/squid3/cache.log rw,
  /var/spool/squid3/** rw,
}

Однако, вещей подобных тонкой настройке chown'а, chmod'а, link()'а в apparmor'e нет.

Кроме того, разнится сам подход к организации безопасности. В TOMOYO он строится на защите системы "с нуля", начиная с init'а и по цепочке exec()'ов - до самого приложения. Apparmor же - это легковесная "песочница" для приложения. В отличие от того же chroot'а - работает прозрачно для файловой системы, никаких отдельно застроенных директорий в /opt и проблем с их обновлением.