三二互联专业提供速度最快最稳定的美国服务器、香港服务器。中美直连,亚洲优化![ 代理登陆 ] [ 付款方式 ] [ 找回密码 ][ 电子协议责任书 ]
硬件资源保障

采用高配品牌服务器

主流强悍CPU配置

确保服务高速稳定运行

中美直连线路

中美直连亚洲优化

采用中国CN2骨干网络

保证速度飞快稳定高效

如何在AppArmor配置文件中允许程序访问特定的文件?

美国、香港服务器

如何在AppArmor配置文件中允许程序访问特定的文件?

12-29   来源:

 在 AppArmor 配置文件中允许程序访问特定文件,核心是精准指定文件路径 + 匹配所需权限,遵循「最小权限原则」—— 仅开放程序必需的文件路径和权限(如只读、读写、锁定等),拒绝所有未显式允许的访问。以下是详细的配置方法、示例和关键注意事项,适配 Ubuntu 24.04 系统。

一、核心语法:允许文件访问的基础规则
AppArmor 允许文件访问的规则格式为:[文件绝对路径] [权限标记],
关键要素说明:
要素 要求与示例
文件路径 必须用绝对路径(禁止相对路径);支持通配符简化批量文件配置
权限标记 按需组合(常用:r= 读、w= 写、k= 文件锁定、m= 内存执行)
语法规范 末尾必须加逗号(,);路径和权限之间用空格分隔;规则写在进程配置块内
常用权限组合场景:
权限组合 适用场景 示例
r 配置文件、系统库(只读) /etc/myapp/config.ini r,
rw 普通数据文件(读写) /opt/myapp/data.txt rw,
rwk 日志 / 数据库文件(需锁定) /var/log/myapp.log rwk,
mr 可执行文件(读 + 内存执行) /usr/local/bin/myapp mr,
通配符用法(批量匹配文件):
通配符 含义 示例 匹配范围
* 匹配当前目录下所有文件 /opt/myapp/*.conf r, /opt/myapp/a.conf、b.conf(不含子目录)
/** 递归匹配子目录所有文件 /opt/myapp/data/** rwk, /opt/myapp/data/ 下所有文件 / 子目录
?.log 匹配单字符前缀的日志 /var/log/myapp/?.log rwk, /var/log/myapp/1.log、2.log
二、分场景配置示例(从单文件到批量文件)
以下以自定义程序 /usr/local/bin/myapp 为例,演示不同文件访问需求的配置方法。
场景 1:允许访问单个文件(如配置文件)
需求:让 myapp 只读访问 /etc/myapp/config.ini,无其他权限。配置文件 /etc/apparmor.d/usr.local.bin.myapp 内容:
apparmor
# 关联要限制的进程
/usr/local/bin/myapp {
    # 系统核心依赖(所有程序必需)
    /lib/** r,
    /usr/lib/** r,
    /usr/local/bin/myapp mr,
 
    # 允许访问单个配置文件(只读)
    /etc/myapp/config.ini r,
 
    # 敏感目录拒绝+兜底规则(必选)
    deny /etc/shadow r,
    deny /** w,
}
场景 2:允许访问目录下所有文件(批量)
需求:让 myapp 读写 /opt/myapp/data/ 目录下所有文件(含子目录)。核心规则:
apparmor
/usr/local/bin/myapp {
    # 系统核心依赖(省略,同场景1)
 
    # 允许访问整个数据目录(递归读写+锁定)
    /opt/myapp/data/** rwk,
 
    # 敏感目录拒绝+兜底规则
    deny /etc/shadow r,
    deny /** w,
}
场景 3:允许访问特定类型文件(如日志)
需求:让 myapp 仅写入 /var/log/myapp/ 目录下的 .log 后缀文件。核心规则:
apparmor
/usr/local/bin/myapp {
    # 系统核心依赖(省略)
 
    # 允许日志目录(先开放目录本身的读写)
    /var/log/myapp/ rw,
    # 允许目录下所有.log文件(读写+锁定)
    /var/log/myapp/*.log rwk,
 
    # 敏感目录拒绝+兜底规则
    deny /etc/shadow r,
    deny /** w,
}
场景 4:允许临时文件访问(/tmp 目录)
需求:让 myapp 读写 /tmp 目录下以 myapp_ 开头的临时文件。核心规则:
apparmor
/usr/local/bin/myapp {
    # 系统核心依赖(省略)
 
    # 允许/tmp目录本身
    /tmp/ rw,
    # 允许特定前缀的临时文件
    /tmp/myapp_* rwk,
 
    # 敏感目录拒绝+兜底规则
    deny /etc/shadow r,
    deny /** w,
}
三、关键注意事项(避免配置失效 / 程序崩溃)
1. 必须使用绝对路径
错误示例(相对路径,规则无效):
apparmor
# 错误:用了相对路径
./config.ini r,
正确示例(绝对路径):
apparmor
# 正确:绝对路径
/etc/myapp/config.ini r,
2. 先开放目录,再开放文件
若程序需要访问某目录下的文件,需先开放目录本身的访问权限,再开放文件权限。错误示例(未开放目录,文件访问失败):
apparmor
# 错误:仅开放文件,未开放目录
/var/log/myapp/*.log rwk,
正确示例:
apparmor
# 正确:先开放目录,再开放文件
/var/log/myapp/ rw,
/var/log/myapp/*.log rwk,
3. 日志 / 数据库文件必须加 k 权限
程序写入日志、数据库文件时,通常需要 “文件锁定”(防止多进程写入冲突),仅加 rw 会导致写入失败,需补充 k 权限。错误示例(日志无法写入):
apparmor
/var/log/myapp.log rw,
正确示例:
apparmor
/var/log/myapp.log rwk,
4. 避免过度开放权限
禁止直接开放 /、/usr/** 等全局路径的写入权限,仅开放程序必需的最小范围。错误示例(过度开放,存在安全风险):
apparmor
# 错误:开放整个/opt目录的写入权限
/opt/** rw,
正确示例(仅开放特定子目录):
apparmor
# 正确:仅开放/opt/myapp/data目录
/opt/myapp/data/** rwk,
四、验证文件访问规则是否生效
步骤 1:加载配置文件
bash
运行
# 编译并重新加载配置文件(检查语法错误)
sudo apparmor_parser -vW /etc/apparmor.d/usr.local.bin.myapp
# 重新加载AppArmor服务
sudo systemctl reload apparmor
# 切换为强制模式(生产环境)
sudo aa-enforce /etc/apparmor.d/usr.local.bin.myapp
步骤 2:测试文件访问
故意让程序访问未授权文件(如 /root/test.txt),查看拦截日志:
bash
运行
sudo grep -i apparmor /var/log/syslog | grep myapp
若输出 apparmor="DENIED" 且目标文件是 /root/test.txt,说明规则生效。
测试授权文件的访问:运行程序,尝试读写 /etc/myapp/config.ini、/opt/myapp/data.txt 等授权文件,若能正常访问且无 DENIED 日志,说明规则配置正确。
五、调试:补充缺失的文件访问权限
若程序因权限不足崩溃,可先切换到 complain 模式(仅记录日志,不拦截),收集缺失的文件权限:
bash
运行
# 切换为投诉模式
sudo aa-complain /etc/apparmor.d/usr.local.bin.myapp
# 运行程序并触发所有业务操作
/usr/local/bin/myapp
# 查看被拒绝的文件路径和权限
sudo grep -i apparmor /var/log/syslog | grep myapp
示例日志(程序需要访问 /opt/myapp/missing.conf 但未开放):
plaintext
apparmor="DENIED" operation="open" profile="/usr/local/bin/myapp" name="/opt/myapp/missing.conf" pid=1234 comm="myapp" requested_mask="r" denied_mask="r"
根据日志中的 name(文件路径)和 requested_mask(所需权限),在配置文件中补充规则:
apparmor
/opt/myapp/missing.conf r,
总结
允许程序访问特定文件的核心步骤:
确定文件绝对路径和程序所需权限;
在配置文件的进程块内写入 路径 权限, 规则;
编译加载配置,先投诉模式调试,再强制模式上线;
验证文件访问是否正常,补充缺失的权限规则。

三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快

上一篇:如何在AppArmor配置文件中允许程序执行特定的系统调用? 下一篇:如何编写AppArmor配置文件?

美国GIA服务器三二互联版权所有 WWW.250.cc 2008-2015 All Rights Reserved
三二互联 - 专业的美国C3服务器、香港vps、抗DOOS流量清洗、云备份系统、网站加速系统、美国GIA服务器和香港云服务器产品提供商
三二互联24小时在线工单系统为您提供全面、专业、周到的技术支持与服务
咨询热线:400-679-9994(免长话费)