在 CentOS(以及 RHEL 系列)里,“context”通常指 SELinux 安全上下文(security context)。下面按常见需求,系统讲一下如何批量修改 SELinux context。
ls -Z /path
ps -Z
chcon -R -t httpd_sys_content_t /var/www/html
常见示例:
httpd_sys_content_tvar_log_tbin_t⚠️ chcon 只是临时修改,系统 reload policy 或 restorecon 会还原。
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
restorecon -Rv /data/web
说明:
semanage fcontext:写入 SELinux 策略数据库(永久)restorecon:应用 contextfor dir in /data/a /data/b /data/c; do
semanage fcontext -a -t httpd_sys_content_t "$dir(/.*)?"
restorecon -Rv "$dir"
done
如果有大量路径,可写脚本:
while read path context; do
semanage fcontext -a -t "$context" "$path(/.*)?"
done < context.list
restorecon -Rv /data
context.list 示例:
/data/a httpd_sys_content_t
/data/b httpd_sys_content_t
semanage permissive -a httpd_t
或运行:
runcon -t httpd_t /path/to/script
确认:
semanage fcontext -l | grep /data
说明用了 chcon 而非 semanage
matchpathcon /data/web
| 需求 | 命令 |
|---|---|
| 临时 | chcon |
| 永久 | semanage fcontext + restorecon |
| 批量 | for / while + restorecon |
如果你指的是 CentOS 的“context”不是 SELinux(比如 Docker、Kubernetes、systemd 或用户权限 context),可以告诉我具体场景,我给你更精准的方案。