在 Ubuntu 22.04 上部署 AppArmor 应用安全教程

在这篇教程中,我们将为你设置 AppArmor 以增强应用程序的安全性。

AppArmor 是一个 Linux 安全模块,允许你限制各个程序的功能。通过强制执行强制访问控制策略,AppArmor 增强了你的应用程序和系统的安全性。

AppArmor 是一个易于使用的 Linux 安全模块实现,它通过为每个程序设置的配置文件来限制应用程序的功能和权限。它提供强制访问控制(MAC)来补充更传统的 UNIX 自由访问控制(DAC)模型。

在 Ubuntu 中,AppArmor 默认安装并加载------你可以通过运行 aa-status 来检查这一点。

它使用应用程序的配置文件来确定应用程序需要哪些文件和权限。一些软件包会安装自己的配置文件,其他配置文件可以在 apparmor-profiles 软件包中找到。

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。
  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。
  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。
  • 到此为止,我们的云服务器就远程连接上了。

安装和配置步骤

第一步:更新系统

保持系统更新。

bash 复制代码
sudo apt-get update

第二步:安装 apparmor-utils

在像 Ubuntu 这样的基于 Debian 的系统上,你可以使用以下命令安装 apparmor-utils

bash 复制代码
sudo apt-get install apparmor-utils
bash 复制代码
sudo apparmor_status

注意: 默认情况下,AppArmor 安装在每个基于 Ubuntu、Debian 的系统中,但 apparmor-utils 包默认不安装。它包含命令行实用程序,你可以使用它们来更改 AppArmor 的操作模式,查找配置文件的状态,创建新的配置文件等。

第三步:了解 AppArmor 配置文件

AppArmor 使用配置文件来定义对应用程序的限制。配置文件可以处于以下三种模式之一:

  • Enforcing (强制执行):配置文件正在主动限制应用程序。
  • Complain (抱怨):违规行为会被记录但不会被强制执行。
  • Disabled (禁用):配置文件未加载。

AppArmor 配置文件是定义 Linux 系统中各个应用程序或进程的安全限制的核心组件。这些配置文件描述了应用程序可以访问哪些资源以及它可以执行哪些操作,从而将其功能限制在其操作所必需的范围内。

AppArmor 配置文件通常存储在 /etc/apparmor.d/ 中。每个配置文件都是一个文本文件,其名称是它所管理的的可执行文件的路径,斜杠被点替换(例如,/usr/bin/nginx 将会是 /etc/apparmor.d/usr.bin.nginx)。

配置文件包含指定应用程序可以执行的操作的规则,例如:

复制代码
/usr/bin/nginx {
  # 允许读取配置文件
  /etc/nginx/** r,

  # 拒绝写入配置文件
  /etc/nginx/** w,

  # 允许访问日志目录
  /var/log/nginx/** rw,
}

示例:简单的 AppArmor 配置文件

这是一个基本的 AppArmor 配置文件示例,适用于位于 /usr/bin/myapp 的假设应用程序:

复制代码
/etc/apparmor.d/usr.bin.myapp

/usr/bin/myapp {
   # 允许读取配置文件
   /etc/myapp/config r,

   # 允许写入日志文件
   /var/log/myapp/** rw,

   # 拒绝访问其他所有内容
   deny /bin/** rw,
   deny /sbin/** rw,
   deny /usr/** rw,
}

在这个配置文件中:

  • 应用程序可以从 /etc/myapp/config 读取。
  • 它可以读取和写入 /var/log/myapp/ 中的文件。
  • 它被拒绝访问文件系统的大部分其余部分,通过限制其功能来增强安全性。

这是 AppArmor 配置文件的概述。在 官方文档 页面了解有关 AppArmor 的更多信息。

要查看可用配置文件的列表,请使用以下命令:

bash 复制代码
sudo aa-status

第四步:创建一个新配置文件

你可以使用 aa-genprof 实用程序为应用程序创建一个新的配置文件。

开始为应用程序创建配置文件:

bash 复制代码
sudo aa-genprof /usr/bin/myapp

该实用程序将引导你完成整个过程。它会要求你运行该应用程序,以便它可以观察其行为并建议规则。

运行完应用程序后,返回到终端并回答提示以完善配置文件。

保存配置文件并退出。

第五步:设置配置文件模式

创建配置文件后,你可以设置其模式:

要强制执行配置文件:

bash 复制代码
sudo aa-enforce /etc/apparmor.d/usr.bin.myapp

要将配置文件设置为抱怨模式:

bash 复制代码
sudo aa-complain /etc/apparmor.d/usr.bin.myapp

第六步:管理配置文件

你可以使用以下命令手动管理配置文件:

加载配置文件:

bash 复制代码
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.myapp

卸载配置文件:

bash 复制代码
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.myapp

重新加载所有配置文件:

bash 复制代码
sudo systemctl reload apparmor

第七步:监控日志

AppArmor 将违规行为记录在 /var/log/syslog/var/log/audit/audit.log 中。你可以监控这些日志来微调你的配置文件:

bash 复制代码
sudo tail -f /var/log/syslog | grep apparmor

第八步:微调配置文件

如果你注意到问题或违规行为,你可以通过直接编辑来完善你的配置文件:

bash 复制代码
sudo nano /etc/apparmor.d/usr.bin.myapp

更改后,重新加载配置文件:

bash 复制代码
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.myapp

第九步:禁用 AppArmor(如果需要)

如果你出于任何原因需要禁用 AppArmor,你可以将所有配置文件设置为抱怨模式:

bash 复制代码
sudo aa-complain /etc/apparmor.d/*

或者,你可以通过编辑 GRUB 配置并删除 security=apparmor 选项来完全禁用 AppArmor,然后更新 GRUB 并重新启动。

结尾

AppArmor 是一个强大的工具,用于增强 Linux 系统上应用程序的安全性。通过遵循本教程,你已经学习了如何安装、配置和管理 AppArmor 配置文件,从而帮助你更好地保护你的应用程序免受潜在的安全威胁。

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site

我的博客:https://blog.ivwv.site

相关推荐
雨大王512几秒前
工业生产执行系统(MES)在汽车制造行业的应用案例
运维·人工智能
小鹿学程序4 分钟前
FileZilla连接到虚拟机
java·服务器·开发语言
skywalk81638 分钟前
webvm 用浏览器启动的虚拟环境
linux·wasm
Awkwardx13 分钟前
Linux网络编程—数据链路层
linux·运维·网络
hxmmm23 分钟前
自定义封装 vue多页项目新增项目脚手架
前端·javascript·node.js
濮水大叔27 分钟前
VonaJS是如何做到文件级别精确HMR(热更新)的?
typescript·node.js·nestjs
树下水月40 分钟前
docker 启动后 如何通过对应的进程 找docker-compose.yaml 编排文件
运维·docker·容器
凯子坚持 c1 小时前
Docker 网络管理深度解析与实践指南
运维·docker·容器
互亿无线明明1 小时前
国际金融短信:如何为跨境金融业务构建稳定安全的消息通知链路?
java·python·安全·eclipse·django·virtualenv·pygame
kevin_水滴石穿1 小时前
在镜像生成时从内网获取字体安装包并配置
linux·docker·容器