Ubuntu默认安全框架:AppArmor
Ubuntu系统默认采用AppArmor(Application Armor)作为安全模块,通过为应用程序定义安全配置文件(Profile),限制其可访问的文件、网络端口、系统能力等资源,实现进程与资源的隔离。AppArmor的配置基于路径,策略生效后,违规行为会被记录到系统日志(/var/log/syslog或/var/log/kern.log)。
使用以下命令确认AppArmor是否启用及运行状态:
sudo apparmor_status
输出示例:
apparmor module is loaded.
12 profiles are loaded.
12 profiles are in enforce mode.
...
AppArmor的配置文件位于/etc/apparmor.d/目录,文件名通常与应用程序的二进制路径相关(如/usr/sbin/nginx的配置文件为usr.sbin.nginx)。
#include <tunables/global>
/usr/sbin/nginx {
#include <abstractions/apache2-common> # 包含通用规则
#include <abstractions/base>
capability net_bind_service, # 允许绑定网络端口
/etc/nginx/** r, # 允许读取/etc/nginx目录下的所有文件
/usr/sbin/nginx mr, # 允许读取和执行nginx二进制文件
/var/log/nginx/** rw, # 允许读写/var/log/nginx目录下的文件
}
关键符号说明:r=读、w=写、x=执行、m=内存映射。sudo apparmor_parser -r /etc/apparmor.d/<profile_name> # 重新加载(replace)
sudo apparmor_parser -R /etc/apparmor.d/<profile_name> # 卸载(remove)
/etc/apparmor.d/force-complain文件(存在则全局进入complain模式),或使用aa-complain命令针对特定应用程序:sudo aa-complain /usr/sbin/nginx # 将nginx设置为complain模式
sudo aa-enforce /usr/sbin/nginx # 切回enforce模式
apparmor_status命令查看各Profile的模式状态。当应用程序因AppArmor限制无法正常运行时,需通过日志分析违规原因:
sudo dmesg | grep apparmor # 查看内核日志中的AppArmor拒绝信息
sudo journalctl -f -u apparmor # 实时查看apparmor服务的日志(需systemd)
日志示例:
apparmor="DENIED" operation="open" profile="/usr/sbin/nginx" name="/var/www/html/test.txt" pid=1234 comm="nginx"
根据日志提示,编辑对应Profile添加允许规则(如上述/var/www/html/** r),然后重新加载配置。
若需使用SELinux(Security-Enhanced Linux,基于标签的安全模块),需先卸载AppArmor(避免冲突),再安装SELinux相关组件:
sudo systemctl stop apparmor
sudo apt purge apparmor # 卸载AppArmor
sudo apt install selinux-basics selinux-policy-default auditd # 安装SELinux
sudo selinux-activate # 添加内核启动参数并创建自标签文件
/etc/selinux/config文件,将SELINUX=设置为enforcing(强制模式)、permissive(宽容模式)或disabled(禁用),重启系统生效。ls -Z # 查看文件/目录的安全上下文
ps -eZ # 查看进程的安全上下文
chcon临时修改(重启或restorecon会还原),restorecon恢复默认上下文:sudo chcon -t httpd_sys_content_t /var/www/html/test.txt # 临时修改
sudo restorecon -v /var/www/html/test.txt # 恢复默认
注意事项: