精准定位 AppArmor 限制,保障调度器 man 命令在 Ubuntu 系统下顺利运行
在调度平台部署过程中,用户通常依赖 man 命令查看各类命令文档及用法说明。但在 Ubuntu 系统中,某些安全机制可能会意外阻碍此类操作,影响用户体验。本篇将介绍一个典型问题的发现与解决过程,展现我们团队在复杂系统环境下的快速响应与问题定位能力。
❗问题现象
在一台 Ubuntu 系统的调度器管理节点中,执行如下命令时出现错误:
root@ghmgt01:~# man chosts
No manual entry for chosts
而环境变量 MANPATH 已正确指向:
echo $MANPATH
:/opt/skyformai/share/man
并通过 cat /var/log/syslog 分析日志后,我们推测可能与 AppArmor 安全模块有关。
🔍问题分析
Ubuntu 默认启用了 AppArmor,一个基于强制访问控制(MAC, Mandatory Access Control)的内核安全模块。
AppArmor 的核心机制是在内核级别为每个进程应用安全策略。即便通过systemctl stop apparmor 停止服务,也不会自动卸载这些策略。换句话说:
服务停了 ≠ 策略失效
这就是为什么即便关闭 AppArmor 服务,man 命令仍然无法访问调度器的手册页。
✅解决方案
为彻底解除 AppArmor 对 man 命令的限制,我们采用了精准卸载策略+重载机制:
# 1. 将 man 的 AppArmor 配置软链接到 disable 目录中
sudo ln -s /etc/apparmor.d/usr.bin.man /etc/apparmor.d/disable/
# 2. 从内核中卸载该策略(注意此步才是真正“解绑限制”)
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.man
# 3. 重新加载 AppArmor服务配置(非重启系统)
sudo systemctl reload apparmor
执行完上述步骤后,man aip 等调度器相关命令手册恢复正常:
man aip
# --> 显示完整手册页内容
🔧解决原理解析
- AppArmor 策略一旦被 apparmor_parser 加载,会常驻内核;
- 单纯关闭服务不会清除内核中的策略;
- apparmor_parser -R 才是真正从内核中卸载该策略;
- disable/ 目录中的配置文件将被 AppArmor 忽略,即防止其下次重启后重新加载。
📌总结
本案例再次验证了我们平台在多系统兼容性、系统安全策略处理、以及非重启级修复能力方面的技术积累与响应速度。无论是初次部署还是后期运维,我们都能确保调度器以最佳状态运行,助力用户高效使用。
如需了解更多调度器配置细节或 AppArmor 策略优化建议,欢迎与我们技术团队联系。
- 2022-03-22
- 2022-03-22
- 2022-03-22
- 2022-03-22
- 2022-03-18
- 2022-03-18