升级到认证 Linux 工程师 10:AppArmor 实战指南
1. AppArmor 与 Firefox 浏览器配置练习
AppArmor 是一个强大的 Linux 安全工具,可通过配置文件对进程进行访问控制。下面将详细介绍如何为 Firefox 浏览器创建、测试和改进 AppArmor 配置文件。
1.1 练习概述
此练习分为四个部分:
- 创建 Firefox 浏览器的配置文件。
- 修改配置文件以允许 Firefox 访问本地文件系统。
- 使用浏览器插件(Java 插件)。
- 比较自己创建的配置文件与 SLES 10 中的默认配置文件。
1.2 创建 Firefox 浏览器的配置文件
步骤如下:
1. 启动 YaST,输入根密码(novell)。
2. 选择“Novell AppArmor > Add Profile Wizard”。
3. 在提示“Application to Profile”处输入“firefox”。
4. 按下“Alt + F2”,输入“firefox”并选择“Run”启动 Firefox,浏览一些网页后关闭 Firefox。
5. 在 YaST AppArmor Profile Wizard 对话框中,选择“Scan system log for AppArmor events”。
6. 创建配置文件时,需要回答几个问题:
- 对于/bin/basename等执行程序,选择“Inherit”。
- 对于文件和目录,选择合适的选项,如#include、文件名、目录或带有占位符的路径,并选择“Allow”。
7. 回到 AppArmor Profile Wizard 对话框时,选择“Finish”。
8. 使用cat /sys/kernel/security/apparmor/profiles检查 Firefox 配置文件是否处于“enforce”模式。如果不是,执行enforce firefox。
graph LR A[启动 YaST 并输入密码] --> B[选择 Add Profile Wizard] B --> C[输入 firefox] C --> D[启动 Firefox 浏览网页并关闭] D --> E[扫描系统日志] E --> F[创建配置文件并回答问题] F --> G[完成配置文件创建] G --> H[检查并设置为 enforce 模式]1.3 修改配置文件以允许 Firefox 访问本地文件系统
步骤如下:
1. 打开终端窗口,以根用户身份登录(密码 novell)。
2. 输入tail -f /var/log/audit/audit.log查看日志文件。
3. 启动 Firefox,尝试访问/usr/share/doc/packages/apparmor-docs/apparmor.7.html,此时应该无法访问。
4. 在终端窗口查看日志文件,应看到拒绝消息。
5. 按下“Ctrl + c”停止查看日志文件。
6. 在终端窗口输入complain firefox。
7. 在 Firefox 中再次尝试访问/usr/share/doc/packages/apparmor-docs/apparmor.7.html,此时应该可以访问。
8. 启动 YaST,输入根密码(novell)。
9. 选择“Novell AppArmor > Update Profile Wizard”。
10. 在界面中确保更新的是 Firefox 配置文件,找到/usr/share/doc/packages/apparmor-docs/apparmor.7.html条目,连续三次选择“Glob”按钮,创建suggestion /usr/share/doc/**,并选择“Allow”。
11. 处理完日志文件中的所有条目后,选择“Finish”。
12. 在终端窗口输入enforce firefox,将 Firefox 配置文件重新设置为“enforce”模式。
13. 在 Firefox 中尝试访问/usr/share/doc/下的文件,应该可以访问,但访问文件系统其他位置的文件应该仍然无法访问。
14. 关闭 Firefox。
15. 关闭 YaST。
| 步骤 | 操作 |
|---|---|
| 1 | 打开终端并以根用户登录 |
| 2 | 查看日志文件 |
| 3 | 启动 Firefox 尝试访问本地文件 |
| 4 | 查看拒绝消息 |
| 5 | 停止查看日志 |
| 6 | 设置为 complain 模式 |
| 7 | 再次尝试访问本地文件 |
| 8 | 启动 YaST |
| 9 | 选择更新配置文件向导 |
| 10 | 更新配置文件并允许访问 |
| 11 | 完成更新 |
| 12 | 设置为 enforce 模式 |
| 13 | 测试访问权限 |
| 14 | 关闭 Firefox |
| 15 | 关闭 YaST |
1.4 使用浏览器插件(Java 插件)
步骤如下:
1. 打开终端窗口,以根用户身份登录(密码 novell)。
2. 输入yast -i java-1_4_2-sun-plugin安装 Java 浏览器插件,根据提示插入适当的介质,安装完成后不要关闭控制台窗口。
3. 按下“Alt + F2”,输入“firefox”并选择“Run”启动 Firefox。
4. 访问http://java.sun.com/products/plugin/1.4/demos/plugin/applets.html并选择一个演示,此时演示应该无法正常工作。
5. 在控制台窗口输入genprof firefox,当提示使用应用程序功能时,再次选择一个演示,此时演示应该可以正常工作。
6. 关闭 Firefox。
7. 返回控制台窗口,按下“s”扫描日志文件,当出现java_vm条目时,选择“i”(inherit)。
8. 根据提示,用“Glob”和“Accept”回答后续问题。
9. 回答完所有问题后,按下“f”完成。
10. 再次启动 Firefox,选择另一个 Java 演示,此时应该可以正常工作。
graph LR A[打开终端并以根用户登录] --> B[安装 Java 插件] B --> C[启动 Firefox 访问演示页面] C --> D[演示无法工作] D --> E[使用 genprof 命令] E --> F[再次选择演示并使其工作] F --> G[关闭 Firefox] G --> H[扫描日志文件并设置 inherit] H --> I[回答问题并完成] I --> J[再次启动 Firefox 测试演示]1.5 比较自己创建的配置文件与 SLES 10 中的默认配置文件
步骤如下:
1. 打开一个控制台窗口,使用cat命令查看刚刚创建的配置文件/etc/apparmor.d/usr.lib.firefox.firefox.sh。
2. 打开另一个控制台窗口,使用cat命令查看/etc/apparmor/profiles/extras/usr.lib.firefox.firefox*中的配置文件。
3. 比较两个文件,注意差异,并判断自己创建的配置文件是更严格还是更宽松。
2. 控制和监控 AppArmor
AppArmor 可以通过/etc/init.d/boot.apparmor脚本或其链接/sbin/rcapparmor进行控制。下面将介绍如何控制和监控 AppArmor。
2.1 启动和停止 AppArmor
- 要限制应用程序,AppArmor 必须在应用程序启动之前处于活动状态,因此通常在启动过程中尽早激活。
- 使用
rcapparmor stop停止 AppArmor 对应用程序的限制,此命令会卸载配置文件,但 AppArmor 内核模块apparmor和aamatch_pcre仍然保持加载状态。 - 使用
rcapparmor kill不仅会卸载配置文件,还会卸载内核模块,此时应用程序不再受到限制。 - 使用
rcapparmor start激活 AppArmor,但只有在 AppArmor 激活后启动的具有配置文件的应用程序才会受到限制。例如,如果 Squid 在 AppArmor 启动之前已经运行,即使存在 Squid 的配置文件,Squid 也不会受到限制。要将 Squid 纳入 AppArmor 的保护范围,需要在激活 AppArmor 后重启 Squid。
| 命令 | 作用 |
|---|---|
rcapparmor start | 激活 AppArmor |
rcapparmor stop | 卸载配置文件,内核模块仍加载 |
rcapparmor kill | 卸载配置文件和内核模块 |
2.2 查看 AppArmor 的状态
使用rcapparmor status命令可以获得配置文件和进程的一般概述。例如:
da10:~ # rcapparmor status apparmor module is loaded. 50 profiles are loaded. 49 profiles are in enforce mode. 1 profiles are in complain mode. Out of 69 processes running: 5 processes have profiles defined. 5 processes have profiles in enforce mode. 0 processes have profiles in complain mode.需要注意的是,重启 AppArmor 后,进程需要重新启动才能再次受到限制。可以使用cat /sys/kernel/security/apparmor/profiles查看加载的配置文件列表。
2.3 重新加载配置文件
如果手动使用编辑器修改了/etc/apparmor.d/中的配置文件(而不是使用 AppArmor 工具,如logprof),则需要重新加载相关的配置文件。可以使用以下命令:
-rcapparmor reload:重新加载配置文件。
-rcapparmor restart:与reload等效,不会停止并重新启动 AppArmor,而是重新加载配置文件。在执行rcapparmor reload之前受到限制的进程仍然会受到限制(除非删除了它们的配置文件或将其状态从“enforce”更改为“complain”)。
-enforce和complain命令可以切换配置文件的状态(从“enforce”到“complain”或反之),并重新加载相关的配置文件。
2.4 监控 AppArmor
有两种方法可以监控 AppArmor:安全事件报告和安全事件通知。
2.4.1 安全事件报告
可以通过以下两种方式启动 YaST 模块来配置和查看 AppArmor 安全事件报告:
- 启动 YaST,选择“Novell AppArmour > AppArmor Reports”。
- 以根用户身份在控制台窗口中输入yast2 SD_Report。
默认情况下,安全事件报告每天午夜生成一次。可以使用“Add”、“Edit”或“Delete”按钮来安排新的安全事件报告、编辑现有报告(例如设置接收报告的电子邮件地址)或删除事件报告。选择一个报告并选择“Run Now”,可以直接显示结果,或者在安全事件报告的情况下,首先打开一个对话框,在其中可以微调报告的内容。
graph LR A[启动 YaST 或输入命令] --> B[打开安全事件报告配置界面] B --> C[查看默认生成时间] C --> D[使用按钮进行操作] D --> E[选择报告并运行] E --> F[显示或微调报告内容]2.4.2 安全事件通知
可以通过以下两种方式配置安全事件通知:
- 启动 YaST,选择“Novell AppArmor > AppArmor Control Panel”。
- 以根用户身份在控制台窗口中输入yast2 subdomain。
在打开的对话框中,选择“Enable Security Event Notification”框中的“Configure”,然后在新打开的对话框中配置通知的频率、电子邮件地址和报告应涵盖的严重级别。选择“Ok”保存配置,然后选择“Done”关闭 AppArmor 配置窗口。
通过以上步骤,你可以全面地使用 AppArmor 来增强 Linux 系统的安全性,包括为应用程序创建和管理配置文件、控制 AppArmor 的运行状态以及监控安全事件。
3. AppArmor 总结与关键要点回顾
3.1 提升应用程序安全性
AppArmor 基于配置文件中的规则对进程施加限制。即便程序被攻破,其在读取、写入和执行操作方面也会受到约束,这对于以 root 权限运行的程序同样适用。这种特性极大地增强了系统的安全性,降低了因程序漏洞被利用而导致的潜在风险。
3.2 创建和管理 AppArmor 配置文件
- YaST 模块:主要有“Add Profile Wizard”和“Update Profile Wizard”,通过图形化界面,用户可以方便地创建和更新配置文件。
- 命令行工具:包括
autodep、genprof和logprof。这些工具为有经验的用户提供了更灵活的操作方式,可在脚本或自动化任务中使用。 - 配置文件位置:配置文件是位于
/etc/apparmor.d/的文本文件,用户可以使用任何文本编辑器进行维护。这使得用户可以根据具体需求对配置文件进行定制化修改。
| 工具类型 | 工具名称 | 作用 |
|---|---|---|
| YaST 模块 | Add Profile Wizard | 创建新的配置文件 |
| YaST 模块 | Update Profile Wizard | 更新现有配置文件 |
| 命令行工具 | autodep | 辅助配置文件创建 |
| 命令行工具 | genprof | 生成配置文件 |
| 命令行工具 | logprof | 根据日志更新配置文件 |
3.3 控制 AppArmor
- 启动和停止:AppArmor 通常在系统启动过程中早期激活。
rcapparmor start用于激活 AppArmor,但只有在其激活后启动的具有配置文件的应用程序才会受到限制;rcapparmor stop卸载配置文件,内核模块仍加载;rcapparmor kill则会卸载配置文件和内核模块。 - 查看状态:使用
rcapparmor status可获取配置文件和进程的一般概述,cat /sys/kernel/security/apparmor/profiles可查看加载的配置文件列表。 - 重新加载配置文件:
rcapparmor reload和rcapparmor restart用于重新加载配置文件,enforce和complain可切换配置文件状态并重新加载。 - 列出无配置文件进程:
unconfined命令可列出具有绑定套接字但没有加载配置文件的进程。
graph LR A[启动 AppArmor] --> B[应用程序受限制] B --> C[停止 AppArmor] C --> D[卸载配置文件或模块] E[查看状态] --> F[获取配置文件和进程信息] G[重新加载配置文件] --> H[更新配置] I[列出无配置文件进程] --> J[发现潜在风险]3.4 监控 AppArmor
- 安全事件报告:可通过 YaST 或命令行启动相关模块进行配置和查看。默认每天午夜生成报告,用户可通过按钮进行报告的安排、编辑和删除操作。
- 安全事件通知:通过 YaST 或命令行配置通知的频率、电子邮件地址和严重级别,及时获取安全事件信息。
4. 实际应用中的注意事项和技巧
4.1 配置文件创建和修改
- 在创建配置文件时,对于复杂的应用程序,如 Firefox,要仔细考虑每个执行程序和文件的访问权限。选择合适的继承或允许规则,避免过度限制或权限过大。
- 修改配置文件时,建议先在
complain模式下进行测试,观察系统的反应和日志记录,确保修改不会导致应用程序无法正常工作。
4.2 进程管理
- 重启 AppArmor 后,要注意重新启动需要受限制的进程,否则它们将不会受到 AppArmor 的约束。可以编写脚本定期检查并重启相关进程。
- 使用
unconfined命令发现无配置文件的进程后,及时评估是否需要为其创建配置文件,以提高系统的整体安全性。
4.3 监控和报告
- 定期查看安全事件报告,分析其中的信息,及时发现潜在的安全威胁。可以根据报告内容调整配置文件,进一步优化系统的安全性。
- 合理配置安全事件通知,确保重要的安全事件能够及时通知到相关人员,以便快速响应和处理。
通过全面了解和掌握 AppArmor 的使用方法,结合实际应用中的注意事项和技巧,用户可以有效地提升 Linux 系统的安全性,保护系统和数据免受潜在的安全威胁。在实际操作中,要不断实践和总结经验,根据系统的具体需求和变化,灵活调整 AppArmor 的配置和管理策略。