/etc/apparmor.d/
и содержат список правил контроля доступа к ресурсам, которые может использовать каждая программа. Профили собираются и загружаются в ядро командой apparmor_parser
. Каждый профиль может быть загружен либо в режиме исполнения, либо в режиме регистрации жалоб. Режим исполнения обеспечивает соблюдение политики и сообщает о попытках нарушения, в то время как режиме регистрации жалоб не форсирует политику, но регистрирует системные вызовы, которые были отклонены.
apt install apparmor apparmor-profiles apparmor-utils
с привилегиями root.
aa-status
быстро это подтвердит:
#
aa-status
apparmor module is loaded. 32 profiles are loaded. 15 profiles are in enforce mode. /usr/bin/man [...] 17 profiles are in complain mode. /usr/sbin/dnsmasq [...] 1 processes have profiles defined. 1 processes are in enforce mode. /usr/sbin/libvirtd (468) libvirtd 0 processes are in complain mode. 0 processes are unconfined but have a profile defined.
aa-enforce
и aa-complain
, давая в качестве параметра либо путь исполняемого файла, либо путь к файлу политики. Кроме того, профиль может быть полностью отключен aa-disable
или переведён в режим аудита (в т.ч. для регистрации принятых системных вызовов) командой aa-audit
.
#
aa-enforce /usr/bin/pidgin
Setting /usr/bin/pidgin to enforce mode.
#
aa-complain /usr/sbin/dnsmasq
Setting /usr/sbin/dnsmasq to complain mode.
aa-unconfined
для перечисления программ, которые не имеют связанного профиля и выставляют открытый сетевой сокет. С опцией --paranoid
вы получаете все незавершенные процессы, которые имеют по крайней мере одно активное сетевое соединение.
#
aa-unconfined
451 /usr/bin/containerd not confined 467 /usr/sbin/sshd (sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups) not confined 892 /usr/sbin/exim4 not confined
/sbin/dhclient
(существует профиль, поставляемый с apparmor-profiles, чтобы вы могли сравнить свои результаты с официальным. Для этого мы будем использовать a-genprof dhclient
. Он пригласит вас использовать приложение в другом окне чтобы, по завершении вернуться к a-genprof
для сканирования событий AppArmor в системных журналах и конвертирования их в правила доступа. Для каждого зарегистрированного события он будет делать одно или несколько правил, которые вы можете либо одобрить, либо дополнительно отредактировать несколькими способами:
#
aa-genprof dhclient
Writing updated profile for /usr/sbin/dhclient. Setting /usr/sbin/dhclient to complain mode. Прежде чем начать, вы можете проверить, существует ли уже профиль для приложения, которое вы желаете ограничить. Смотрите следующую страницу вики для подробностей: https://gitlab.com/apparmor/apparmor/wikis/Profiles Profiling: /usr/sbin/dhclient Пожалуйста, запустите приложение для профилировки в отдельном окне и чтобы проверить его функциональность сейчас. После завершения выберите опцию "Scan" ниже чтобы просканировать системные журналы на события Apparmor. Для каждого AppArmor события, Вы можете выбрать, возможность разрешён доступ или запрещен [(S)can system log for AppArmor events] / (F)inish
S
Чтение записей журналов из /var/log/syslog. Profile: /usr/sbin/dhclientExecute: /usr/sbin/dhclient-script Severity: unknown (I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish
P
Должен ли Apparmor санировать окружение при переключении профилей? Санация окружения более безопасна, но некоторые приложения зависят от присутствия LD_PRELOAD или LD_LIBRARY_PATH. [(Y)es] / (N)oY
Запись обновлённого профиля для /usr/sbin/dhclient-script. Complain-mode изменения: Profile: /usr/sbin/dhclientCapability: net_raw Severity: 8 [1 - capability net_raw,] (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish
A
Adding capability net_raw, to profile. Profile: /usr/sbin/dhclient Capability: net_bind_service Severity: 8 [1 - #include <abstractions/nis>] 2 - capability net_bind_service, (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inishA
Adding #include <abstractions/nis> to profile. Profile: /usr/sbin/dhclientPath: /etc/ssl/openssl.cnf New Mode: owner r Severity: 2 [1 - #include <abstractions/lightdm>] 2 - #include <abstractions/openssl> 3 - #include <abstractions/ssl_keys> 4 - owner /etc/ssl/openssl.cnf r, (A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish
2
Profile: /usr/sbin/dhclient Path: /etc/ssl/openssl.cnf New Mode: owner r Severity: 2 1 - #include <abstractions/lightdm> [2 - #include <abstractions/openssl>] 3 - #include <abstractions/ssl_keys> 4 - owner /etc/ssl/openssl.cnf r, [(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)oreA
[...] Profile: /usr/sbin/dhclient-scriptPath: /usr/bin/dash New Mode: owner r Severity: unknown 1 - #include <abstractions/gvfs-open> [2 - #include <abstractions/lightdm>] 3 - #include <abstractions/ubuntu-browsers.d/plugins-common> 4 - #include <abstractions/xdg-open> 5 - owner /usr/bin/dash r, (A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish
A
Adding #include <abstractions/lightdm> to profile. Deleted 2 previous matching profile entries. = Changed Local Profiles = The following local profiles were changed. Would you like to save them? [1 - /usr/sbin/dhclient] 2 - /usr/sbin/dhclient-script (S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)tS
Writing updated profile for /usr/sbin/dhclient. Writing updated profile for /usr/sbin/dhclient-script. Profiling: /usr/sbin/dhclient Please start the application to be profiled in another window and exercise its functionality now. Once completed, select the "Scan" option below in order to scan the system logs for AppArmor events. For each AppArmor event, you will be given the opportunity to choose whether the access should be allowed or denied. [(S)can system log for AppArmor events] / (F)inishF
Setting /usr/sbin/dhclient to enforce mode. Setting /usr/sbin/dhclient-script to enforce mode. Reloaded AppArmor profiles in enforce mode. Please consider contributing your new profile! See the following wiki page for more information: https://gitlab.com/apparmor/apparmor/wikis/Profiles Finished generating profile for /usr/sbin/dhclient.
Первым обнаруженным событием является выполнение другой программы. В этом случае у вас есть несколько вариантов: вы можете запустить программу с профилем родительского процесса (выбор “Inherit”), вы можете запустить её с собственным выделенным профилем (“Profile” и выбор “Named”, отличающийся только возможностью использовать произвольное имя профиля), вы можете запустить её с подпрофилем родительского процесса (выбор “Child”), вы можете запустить её без какого-либо профиля (выбор “Unconfined”) или вы можете решить не запускать её вообще (выбор “Deny”).
Обратите внимание, что когда вы решите запустить её с выделенным профилем, который ещё не существует, инструмент создаст недостающий профиль для вас и будет вносить предложения по правилу для этого профиля в том же запуске.
| |
На уровне ядра специальные полномочия корневого пользователя были разделены на “capabilities” (возможности). Когда системный вызов требует определённой возможности, AppArmor будет проверять, позволяет ли профиль программе использовать эту возможность.
| |
Здесь программа ищет разрешения на чтение для /etc/sl/opensl.cnf . aa-genprof обнаружил, что это разрешение также было предоставлено несколькими “abstractions” и предлагает их в качестве альтернативного выбора. Абстракция предоставляет переиспользуемый набор правил доступа, объединяющий несколько ресурсов, которые обычно используются вместе. В этом конкретном случае к файлу, как правило, обращаются через функции, связанные с сервисом имен библиотеки C, и мы набираем “2” для первого выбора “#include <abstractions/openssl>”, а затем “A”, чтобы разрешить его.
| |
Notice that this access request is not part of the dhclient profile but of the new profile that we created when we allowed /usr/sbin/dhclient-script to run with its own profile.
После прохождения всех зарегистрированных событий программа предлагает сохранить все профили, которые были созданы во время запуска. В этом случае у нас есть два профиля, которые мы сохраняем одновременно выбором опции “Save” (но вы также можете сохранить их в индивидуальном порядке), прежде чем покинуть программу с “Finish”.
|
aa-genprof
на самом деле является только умной обёрткой вокруг aa-logprof
: она создаёт пустой профиль, загружает его в режиме регистрации жалоб, а затем запускает aa-logprof
, инструмент для обновления профиля на основе зарегистрированных нарушений профиля. Таким образом, позднее вы сможете повторно запустить этот инструмент, чтобы улучшить профиль, который вы только что создали.
/etc/apparmor.d/usr.sbin.dhclient
близкий к профилю, предоставляемому apparmor-profiles в /usr/share/apparmor/extra-profiles/sbin.dhclient
.
/etc/apparmor.d/usr.sbin.dhclient-script
может быть похож на /usr/share/apparmor/extra-profiles/sbin.dhclient
, предоставляемый в apparmor-profiles.