一、AppArmor基础概念
1.1 工作机制
plaintext
AppArmor运行模式:
模式限制级别适用场景
enforce 强制执行生产环境
complain 警告记录测试环境
disabled 禁用保护开发环境
保护范围:
-文件访问控制
-网络访问控制
-Linux能力控制
-系统调用限制
1.2 配置检查
bash
# 检查AppArmor状态
aa-status
aa-enabled
# 检查配置文件
ls /etc/apparmor.d/
# 检查内核模块
lsmod | grep apparmor
# 检查系统日志
grep audit /var/log/syslog | grep apparmor
二、配置文件编写
2.1 基础配置模板
plaintext
# /etc/apparmor.d/usr.sbin.nginx
#include<tunables/global>
profile nginx /usr/sbin/nginx {
#include<abstractions/base>
#include<abstractions/nameservice>
#include<abstractions/openssl>
# 基础权限
capability net_bind_service,
capability setuid,
capability setgid,
# 二进制文件
/usr/sbin/nginx mr,
# 配置目录
/etc/nginx/** r,
/etc/ssl/** r,
# 日志目录
/var/log/nginx/* w,
# Web目录
/var/www/** r,
# PID文件
/var/run/nginx.pid rw,
}
2.2 高级规则配置
python
def generate_apparmor_rules():
"""生成AppArmor规则"""
rules ={
'file_access':{
'read':[
'/etc/passwd r',
'/etc/group r',
'/etc/hosts r'
],
'write':[
'/var/log/app.log w',
'/tmp/app-* rw'
],
'deny':[
'/etc/shadow',
'/etc/gshadow'
]
},
'network_access':{
'tcp':[
'tcp_connect (3000, 3306)',
'tcp_bind (80, 443)'
],
'udp':[
'udp_send (53)',
'udp_receive (53)'
]
},
'capabilities':[
'net_bind_service',
'sys_resource',
'chown'
]
}
return compile_rules(rules)
三、应用场景配置
3.1 Web服务器配置
python
classWebServerProfile:
def generate_profile(self):
"""生成Web服务器配置文件"""
profile ={
'binary':'/usr/sbin/nginx',
'includes':[
'<abstractions/base>',
'<abstractions/apache2-common>',
'<abstractions/openssl>'
],
'capabilities':[
'net_bind_service',
'setuid',
'setgid'
],
'file_rules':{
'config_files':'/etc/nginx/** r',
'web_files':'/var/www/** r',
'log_files':'/var/log/nginx/* w',
'temp_files':'/tmp/nginx* rw'
},
'network_rules':{
'tcp_ports':[80,443],
'protocols':['tcp','udp']
}
}
returnself.compile_profile(profile)
3.2 数据库服务配置
plaintext
# /etc/apparmor.d/usr.sbin.mysqld
配置样例:
profile mysqld /usr/sbin/mysqld {
# 文件权限
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* w,
# 网络权限
network tcp,
# 能力限制
capability dac_override,
capability sys_resource,
# 拒绝规则
deny /etc/shadow r,
deny /etc/mysql/*.bak rw,
}
四、监控与审计
4.1 日志监控
python
classAppArmorMonitor:
def monitor_violations(self):
"""监控违规行为"""
patterns ={
'access_denied':{
'pattern':'apparmor="DENIED"',
'severity':'error'
},
'profile_loaded':{
'pattern':'apparmor="STATUS".*profile_load',
'severity':'info'
},
'profile_replaced':{
'pattern':'apparmor="ALLOWED".*profile_replace',
'severity':'warning'
}
}
log_files =[
'/var/log/syslog',
'/var/log/audit/audit.log',
'/var/log/messages'
]
for log_file in log_files:
violations =self.parse_log(log_file, patterns)
if violations:
self.handle_violations(violations)
4.2 性能监控
python
def monitor_performance():
"""监控AppArmor性能影响"""
metrics ={
'system':{
'cpu_overhead': measure_cpu_impact(),
'memory_usage': measure_memory_impact(),
'io_impact': measure_io_impact()
},
'application':{
'startup_time': measure_startup_delay(),
'response_time': measure_response_impact(),
'throughput': measure_throughput_impact()
}
}
return analyze_performance(metrics)
五、故障排查指南
5.1 常见问题处理
python
def troubleshoot_issues():
"""问题排查流程"""
checklist ={
'profile_issues':{
'check_syntax': check_profile_syntax,
'verify_paths': verify_file_paths,
'test_permissions': test_permissions
},
'system_issues':{
'check_status': check_apparmor_status,
'verify_modules': verify_kernel_modules,
'check_logs': analyze_system_logs
},
'performance_issues':{
'check_overhead': measure_overhead,
'analyze_bottlenecks': find_bottlenecks,
'optimize_rules': optimize_apparmor_rules
}
}
return execute_checklist(checklist)
5.2 调试方法
bash
# 启用调试模式
aa-complain /etc/apparmor.d/usr.sbin.nginx
# 查看详细日志
aa-logprof
# 生成新规则
aa-genprof /path/to/binary
# 测试配置
aa-verify /etc/apparmor.d/*
六、最佳实践建议
6.1 配置建议
基础原则
性能优化
plaintext
优化项目措施效果
规则组织逻辑分组提升解析速度
缓存优化预加载配置减少延迟
日志控制选择性记录降低开销
安全增强
6.2 运维建议
yaml
# 运维检查清单
daily_checks:
- name:"检查AppArmor状态"
command:"aa-status"
frequency:"daily"
- name:"检查违规日志"
command:"aa-notify -s 1"
frequency:"hourly"
- name:"验证配置完整性"
command:"aa-verify"
frequency:"daily"