适用于 Linux 系统管理员的 AppArmor 备忘单
你们中的许多人可能在使用基于 Debian 的系统(尤其是 Ubuntu)时听说过 AppArmor。但是,由于它不是在 GUI 中显示的应用程序,因此一些用户可能不熟悉它。
Application Armor 缩写为AppArmor 是Linux系统上的一个安全模块。它是 Linux 内核使用的强制访问控制 (MAC) 系统,用于限制程序配置文件上配置的程序的功能。这些配置文件可以允许或拒绝诸如网络访问、原始套接字访问、文件读取、写入和执行权限等功能。这些配置文件通常在系统启动时加载到内核。 AppArmor 配置文件有两种模式:强制和投诉。 强制模式强制执行配置文件中定义的策略,并使用系统日志或审核来报告任何策略违规尝试。另一方面,投诉模式不强制执行策略,而仅报告策略违规尝试。
AppArmor 技术已经存在一段时间了。它首先出现在 Immunix 中,后来集成到 Novell/SUSE、Mandriva 和 Ubuntu 系统中。 AppArmor 被认为是 SELinux 的替代品,SELinux 有时被认为难以安装和维护。与通过向文件应用标签来工作的 SELinux 不同,AppArmor 使用文件路径来工作。 AppArmor 的支持者认为它比 SELinux 更简单且更容易配置。
在今天的文章中,我们将学习适用于 Linux 系统管理员的 AppArmor 备忘单。
1.检查AppArmor状态
AppArmor 默认安装在 Ubuntu 系统上,并在系统启动时自动加载。要检查状态,请发出以下命令:
sudo apparmor_status
##OR
sudo aa-status
示例输出:
上面的输出显示了加载的配置文件和 AppArmor 模式。
2.查看AppArmor配置文件
AppArmor 有几个预加载的配置文件,位于“/etc/apparmor.d/”目录中。一些配置文件被禁用,而其他配置文件则处于活动状态。
要检查所有配置文件,您可以发出:
$ ls /etc/apparmor.d/*
/etc/apparmor.d/lsb_release
/etc/apparmor.d/nvidia_modprobe
/etc/apparmor.d/sbin.dhclient
/etc/apparmor.d/usr.bin.evince
/etc/apparmor.d/usr.bin.man
....
/etc/apparmor.d/disable:
usr.sbin.rsyslogd
/etc/apparmor.d/force-complain:
/etc/apparmor.d/local:
lsb_release usr.bin.tcpdump usr.sbin.cups-browsed
nvidia_modprobe usr.lib.libreoffice.program.oosplash usr.sbin.cupsd
README usr.lib.libreoffice.program.senddoc usr.sbin.mysqld
sbin.dhclient usr.lib.libreoffice.program.soffice.bin usr.sbin.rsyslogd
usr.bin.evince usr.lib.libreoffice.program.xpdfimport
usr.bin.man usr.lib.snapd.snap-confine.real
/etc/apparmor.d/tunables:
alias etc home.d multiarch.d securityfs xdg-user-dirs
apparmorfs global kernelvars proc share xdg-user-dirs.d
dovecot home multiarch run sys
这里的配置文件有一个命名语法。例如,/usr/bin/man 的配置文件将位于 /etc/apparmor.d/usr.bin.man 中。
禁用的配置文件位于“/etc/apparmor.d/disable”下
$ ls /etc/apparmor.d/disable/*
/etc/apparmor.d/disable/usr.sbin.rsyslogd
3. 启用/禁用 AppArmor 配置文件
虽然 AppArmor 允许您拥有多个配置文件,但它们是单独启用或禁用的。要启用或禁用配置文件,您需要安装apparmor-utils
首先更新和升级您的系统以避免“分段错误”错误。
sudo apt update && sudo apt upgrade -y
现在安装所需的实用程序
sudo apt install apparmor-utils
- 启用 AppArmor 配置文件
现在,使用具有以下语法的命令继续启用已禁用的配置文件:
##Enable a Profile
sudo aa-enforce /path/to/profile
例如,要启用 Rsyslogd 配置文件,我们可以运行:
$ sudo aa-enforce /etc/apparmor.d/usr.sbin.rsyslogd
Setting /etc/apparmor.d/usr.sbin.rsyslogd to enforce mode.
启用 HTTPD 配置文件的另一个示例。
sudo aa-enforce /usr/sbin/httpd
- 禁用 AppArmor 配置文件
要禁用配置文件,您只需使用以下命令将其切换到投诉模式:
sudo aa-complain /path/to/profile
例如:
sudo aa-complain /etc/apparmor.d/usr.sbin.rsyslogd
##OR
sudo aa-complain /usr/sbin/httpd
4. 创建 AppArmor 配置文件
AppArmor 允许用户创建自定义配置文件来保护应用程序。该配置文件通常具有适用于您的应用程序的多种配置和变量。 AppArmor 允许您从模板或交互方式开始,从而消除了麻烦。
对于交互式方法,它检查二进制文件执行的操作,并让您决定您喜欢的操作,是拒绝还是允许。
为此,您可以使用以下语法发出命令:
sudo aa-genprof /path/to/binary
例如:
sudo aa-genprof /usr/bin/scp
示例输出:
Updating AppArmor profiles in /etc/apparmor.d.
Writing updated profile for /usr/bin/scp.
Setting /usr/bin/scp to complain mode.
Before you begin, you may wish to check if a
profile already exists for the application you
wish to confine. See the following wiki page for
more information:
https://gitlab.com/apparmor/apparmor/wikis/Profiles
Profiling: /usr/bin/scp
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)inish
现在打开一个单独的终端并执行二进制文件可以执行的所有操作。例如:
scp ~/test remote_user@remote_IP:~/
执行任务后,在 AppArmor 分析窗口上按 S。在记录的动作中,设置是否忽略、允许等。
[(S)can system log for AppArmor events] / (F)inish
Reading log entries from /var/log/syslog.
Profile: /usr/bin/scp
Execute: /usr/bin/ssh
Severity: unknown
(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish
完成后,按“S”保存更改。
The following local profiles were changed. Would you like to save them?
[1 - /usr/bin/scp]
(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t
现在按“f”,您将把配置文件保存为 /etc/apparmor.d/path.to.binary。 (本例为/etc/apparmor.d/usr.bin.scp)
$ cat /etc/apparmor.d/usr.bin.scp
# Last Modified: Fri Sep 29 14:14:11 2023
#include <tunables/global>
/usr/bin/scp flags=(complain) {
#include <abstractions/base>
deny /usr/bin/ssh x,
deny owner /home/*/mysql-community-client_8.1.0-1ubuntu22.04_amd64.deb r,
/usr/bin/scp mr,
}
以上是我为 SCP 创建的示例 AppArmor 配置文件。
从模板创建配置文件
Yoi 可以创建应用程序配置文件的骨架。首先安装所需的包:
sudo apt install apparmor-easyprof
现在使用以下命令创建模板:
sudo aa-easyprof /path/to/binary
示例输出:
# vim:syntax=apparmor
# AppArmor policy for binary
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###
#include <tunables/global>
# No template variables specified
"/path/to/binary" {
#include <abstractions/base>
# No abstractions specified
# No policy groups specified
# No read paths specified
# No write paths specified
}
然后,您可以继续并根据需要编辑配置文件。
要强制执行配置文件,请使用:
sudo apparmor_parser -a /etc/apparmor.d/profile.name
还有许多其他命令可以管理 AppArmor 配置文件:
#Load a new profile in complain mode
sudo apparmor_parser -C /etc/apparmor.d/profile.name
#Replace existing profile
sudo apparmor_parser -r /etc/apparmor.d/profile.name
#Remove profile
sudo apparmor_parser -R /etc/apparmor.d/profile.name
5. 从日志修改配置文件
还可以从日志修改配置文件。该工具读取日志并询问您是否要允许某些禁止的操作。为此,请使用:
sudo aa-logprof
然后,您可以使用箭头键导航并选择所需的配置文件。
6. 查看日志
您可以从 /var/log/audit/audit.log 查看 AUDIT 和 DENIED 日志。安装所需的包:
sudo apt install apparmor-notify
继续并查看日志:
sudo aa-notify -s 1 -v
示例输出:
您还可以使用其他选项,请使用命令检查:
$ aa-notify -h
USAGE: aa-notify [OPTIONS]
Display AppArmor notifications or messages for DENIED entries.
OPTIONS:
-p, --poll poll AppArmor logs and display notifications
--display $DISPLAY set the DISPLAY environment variable to $DISPLAY
(might be needed if sudo resets $DISPLAY)
-f FILE, --file=FILE search FILE for AppArmor messages
-l, --since-last display stats since last login
-s NUM, --since-days=NUM show stats for last NUM days (can be used alone
or with -p)
-v, --verbose show messages with stats
-h, --help display this help
-u USER, --user=USER user to drop privileges to when not using sudo
-w NUM, --wait=NUM wait NUM seconds before displaying
notifications (with -p)
7. 管理AppArmor服务
AppArmor 服务可以像任何其他系统服务一样进行管理。要停止服务运行:
sudo systemctl stop apparmor
要重新启动服务:
sudo systemctl restart apparmor
检查服务的状态:
$ systemctl status apparmor
apparmor.service - Load AppArmor profiles
Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; vendor preset: enabled)
Active: active (exited) since Fri 2023-09-29 15:44:32 EAT; 3s ago
Docs: man:apparmor(7)
https://gitlab.com/apparmor/apparmor/wikis/home/
Process: 66332 ExecStart=/lib/apparmor/apparmor.systemd reload (code=exited, status=0/SUC>
Main PID: 66332 (code=exited, status=0/SUCCESS)
Ful 29 15:44:32 thor-Standard-PC-i440FX-PIIX-1996 systemd[1]: Starting Load AppArmor profiles>
Ful 29 15:44:32 thor-Standard-PC-i440FX-PIIX-1996 apparmor.systemd[66332]: Restarting AppArmor
.....
最后的想法
这标志着适用于 Linux 系统管理员的 AppArmor 备忘单指南的结束。还有其他几个命令和备忘单此处未涵盖,请随时在下面的评论中分享。
查看更多:
- 面向 Kubernetes 管理员和 CKA 考试准备的 Kubectl 备忘单
- Stratis 存储备忘单 – 参考指南
- Ansible Vault 备忘单/参考指南
更新于:4个月前
相关文章
- 【说站】linux 如何退出python
- CentOS7部署发布.NET Core网站Ngnix安装配置图文教程
- dev/hda5在linux中表示什么
- linux高并发是什么意思
- linux为什么没有病毒
- linux nobody是啥用户
- linux 命令之查看文件内容
- linux 命令之 ls 命令详解
- Linux下RabbitMQ安装和.NET Core使用RabbitMQ.Client操作
- linux shell的几种截取字符串的方法
- Linux中date命令如何格式化输出需要的时间格式
- 使用Docker Wine Qemu KVM在Linux运行Windows应用
- Debian Linux国内常用镜像源
- CentOS7安装unzip解压工具命令使用方法
- Linux使用Docker部署.NET6网站图文教程
- Linux中通过命令连接指定WiFi
- 什么是宝塔Linux
- Linux 删除文件或目录 rm 命令
- 怎样在Linux系统 Ubuntu18.04 中安装微信
- C# WebSocket Client在linux连接失败