雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

适用于 Linux 系统管理员的 AppArmor 备忘单

2024-07-10 Linux 52

你们中的许多人可能在使用基于 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 备忘单/参考指南

更新于:2个月前
赞一波!3

文章评论

全部评论