SELinux的安全上下文(Security Context)是访问控制的核心标签,用于标识文件、进程等对象的安全属性。测试SELinux上下文的主要目的是验证标签是否正确,以及排查因上下文问题导致的访问拒绝。
使用getenforce
命令确认SELinux当前运行模式(Enforcing
:强制模式,会阻止违规操作;Permissive
:宽松模式,仅记录违规;Disabled
:禁用)。
getenforce
使用ls -Z
命令查看指定路径的SELinux标签,输出格式为user:role:type:level
(如system_u:object_r:httpd_sys_content_t:s0
)。
ls -Zd /var/www/html # 查看Apache默认目录的上下文
使用ps -eZ
命令过滤目标进程,查看其运行时的SELinux标签(如system_u:system_r:httpd_t:s0
表示Apache进程)。
ps -eZ | grep httpd
SELinux的拒绝事件会记录在/var/log/audit/audit.log
中,使用ausearch
和aureport
工具分析:
sudo ausearch -m avc -ts recent # 查找最近的AVC(访问控制)拒绝事件
sudo aureport -m avc # 生成AVC拒绝报告
若怀疑SELinux策略导致问题,可临时将模式设为Permissive
(不会阻止操作,仅记录),测试完成后恢复Enforcing
:
sudo setenforce 0 # 切换至Permissive模式
sudo setenforce 1 # 恢复Enforcing模式
若上下文不正确,可使用chcon
(临时修改)或semanage fcontext
(永久修改)调整:
sudo chcon -t httpd_sys_content_t /path/to/file # 临时修改文件上下文
sudo semanage fcontext -a -t httpd_sys_content_t "/path/to/dir(/.*)?" # 永久添加目录上下文规则
sudo restorecon -Rv /path/to/dir # 恢复目录默认上下文
上下文切换(Context Switch)是CPU调度的重要指标,过高的切换次数会导致CPU资源浪费,影响系统性能。测试方法分为系统级总体监控和进程级详细分析。
使用vmstat
命令查看系统每秒上下文切换次数(cs
列),以及自愿(cswch/s
)和非自愿(nvcswch/s
)切换情况:
vmstat 1 5 # 每隔1秒输出1组数据,共5组
cs
列:每秒上下文切换总次数;in
列:每秒中断次数(与上下文切换相关);r
列:就绪队列长度(等待CPU的进程数);b
列:不可中断睡眠的进程数(如等待I/O)。使用pidstat -w
命令监控指定进程或所有进程的上下文切换情况,区分自愿和非自愿切换:
pidstat -w -p 1234 1 5 # 监控PID为1234的进程,每秒1次,共5次
pidstat -w -G nginx 1 5 # 监控名为nginx的进程组
cswch/s
:每秒自愿上下文切换次数(如进程等待I/O、锁时主动让出CPU);nvcswch/s
:每秒非自愿上下文切换次数(如时间片用完被强制调度)。lmbench
是一款系统性能基准测试工具,其中的lat_ctx
命令可测量进程间上下文切换延迟(单位:微秒):
# 安装lmbench(以Ubuntu为例)
sudo apt install lmbench
# 测试两个进程间的切换延迟
./lat_ctx -s 0 2 10000 # 2个进程,循环10000次
输出结果中的latency
即为平均切换延迟。
perf
是Linux内核性能分析工具,可统计系统或进程的上下文切换次数:
# 统计系统总上下文切换次数
sudo perf stat -e context-switches -a sleep 10
# 统计指定进程的上下文切换次数
sudo perf stat -e context-switches -p 1234 sleep 10
semanage fcontext
的规则),避免误操作导致系统无法访问;fork()
、pipe()
等系统调用,结合gettimeofday()
记录时间戳,但需注意同步问题。