首页 程序笔记 适用于 Linux 系统管理员的 AppArmor 备忘单

适用于 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 备忘单/参考指南

3

站心网

你们中的许多人可能在使用基于 Debian 的系统(尤其是 Ubuntu)时听说过 AppArmor。但是,由于它不是在 GUI..

为您推荐

如何选择更适合你的 Linux 发行版?

很多人经常会问我这样一个问题:“嘿,你是用Linux的,对吧?我应该使用Linux的哪个版本?我有这个朋友推荐我_____,你觉得怎么样?”我通常会以这样的问题回复:这取决于你想做什么?今天我决定写一篇关于如何选择L..

详解:订单履约系统规划

大家好,我是汤师爷~什么是订单履约系统?订单履约是从消费者下单支付到收到商品的全流程管理过程,包括订单接收、订单派单、库存分配、仓储管理和物流配送等环节,核心目标是确保商品准时、准确地送达消费者手中。..

VS创建.NET Core项目使用Docker方式部署到Linux服务器

在 Visual Studio(VS) 中,使用 Docker 方式部署 .NET Core 项目 到 Linux 服务器,可以简化环境管理并提高部署效率。以下是完整教程:1. 在 VS 创建 .NET Core 项目并启用 Docker新建 ASP.NET Core 项目打开 Visu..

从程序媛角度去看项目管理

需求管理下图描述的是程序员从接到需求到开发环节的过程:一般我们首先会收到产品的PRD或交互稿,被询问今天什么时间点是否有空,进行需求评审。时光匆匆,回想起刚毕业那时,我望着冗长的PRD,直接跳过背景、目的等..

LinkWeChat开源系统

平台介绍LinkWeChat是一款基于企业微信的开源SCRM系统,为企业构建私域流量系统的综合解决方案,显著提升企业社交运营效率!内置功能环境部署准备工作JDK >= 1.8 (推荐1.8版本)Mysql >= 5.5.0 (推荐5.7版本)Redis >=..

每一个程序员,都希望能成为分布式系统架构师

有很多读者经常问我,程序员的学习、成长之路应该怎么规划,才能早日成为一名架构师。作为一个曾经的架构师,在我走上技术管理这条路之后,管理的团队越来越大,现在我管理的技术团队有一百多人,最大的体会就是操心..

鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?

鸿蒙(HarmonyOS)和 OpenHarmony 系统本身并不原生支持直接运行 .NET Core,但可以通过一些方法使 .NET Core 应用在其上运行。鸿蒙和 OpenHarmony 是基于 LiteOS 和 Linux 内核的多终端操作系统,因此它们的运行时..

DockerUI 中文可视化Docker管理工具使用示例

DockerUI 是由国内开发者打造的一款优秀的 Docker 可视化管理工具。该工具拥有简洁直观的UI界面,可以轻松进行Docker主机管理、集群管理,以及Docker任务的编排等操作。DockerUI不仅展示了资源利用率、系统信息和更..

Winform不同分辨率系统下界面混乱

产生界面混乱的主要原因是,winform程序的坐标是基于点(Point)的,而Point又与DPI相关。一英寸 = 96pixels96DPI是windows的默认DPI,当它被用户更改后,可能就会导致界面与设计之初产生了错乱。在网上搜索相关资料后..

CentOS7部署发布.NET Core网站Ngnix安装配置图文教程

Linux服务器部署.NET Core网站运行速度更快,最近打算把原来windows server上的网站迁到linux的云服务器上。 顺便记录一下CentOS7安装.NET运行环境,安装和配置Ngnix的过程。首先安装.NET运行时sudorpm-Uvhhttps://p..

关于项目管理的若干建议

今天整理电脑,发现自己去年年初给老板写的这个很好,拿出来和大家分享一下《关于项目管理的若干建议》1、 人尽其才,成本优先技术开发型公司最主要的管理就是人员的管理,如何最大程度的利用好现有人才,发挥其最大..

系统架构7个非功能性需求

在软件系统里面,功能性需求是面向用户、详细明确的需求,由产品人员根据市场的需要提炼出来,是产品生命周期里最重要的一环。比如电商系统里面的优惠券功能,通常包含需求:优惠券分类、细分领券人群、核销优惠券等..

初次走上技术管理岗位的思考总结

初次走上管理岗位的技术骨干,总是有很多困惑。为什么比以前写代码还累?怎么让任务安排更合理?为什么总有下属不愿意进步,每天得过且过?诸如此类的问题,本文并不能都给出解决方法。本文的目的是抛砖引玉,如果诸..

Kubernetes(k8s) Linux安装和配置

什么是Kubernetes(k8s)?Kubernetes(通常称为"k8s")是一种用于自动部署、扩展和管理容器化应用程序的开源平台。它提供了一个容器编排和管理系统,可以自动化应用程序的部署、管理和缩放,并确保它们的高可用性。在..

程序员开发人员常用工具和网站

给大家分享一些程序员开发人员常用工具和网站,我相信这里总有一款工具适合你。排名不分先后~Visual Studio CodeVisual Studio Code官网地址:https://code.visualstudio.com/Visual Studio Code重新定义和优化了代..

类似sms-activate的国外手机验证码接码平台

很多网站需要通过手机验证码才能注册成功,例如最近大火的ChatGPT的官网OpenAI只能使用国外手机号注册。这里推荐几个可以接收国外手机验证码的平台。sms-activatehttps://sms-activate.org/cn站点推荐:ChatGPT手机..

百度文心一言邀请码如何获得?

3月16日下午,百度于北京总部发布了新一代大语言模型、生成式AI产品文心一言。首批用户即可通过邀请测试码,在文心一言官网体验产品,后续将陆续开放给更多用户。邀请码申请方式请往下看。百度文心官网地址:https://..

免费申请SSL证书的网站教程推荐

现在有很多平台可以申请的免费SSL证书让你的网站提供https服务。一些云服务器平台可能也会有一些免费SSL证书的服务。免费SSL证书安全吗?免费SSL证书可以使用,并且在许多情况下是足够安全的。免费SSL证书可以通过Le..

react使用echart图文教程

可以参考ECharts官网的文档:https://echarts.apache.org/handbook/zh/basics/import在React中使用ECharts可以通过以下步骤:安装ECharts库使用npm或者yarn安装ECharts库:npm install echarts --save引入ECharts库..

量化炒股的原理是什么?量化交易策略有哪些?

量化炒股是一种利用计算机程序和数学模型来进行投资决策的方法。它的原理是通过分析历史市场数据、价格走势、技术指标等多种因素,构建数学模型,用以预测未来股市走势和行情。这些模型能够自动执行交易,以实现更高..

发表回复

返回顶部