你提到的 “CentOS context”,通常是指 SELinux 的 security context(安全上下文) 配置。下面我按常见使用场景给你讲清楚怎么配置。
在 CentOS(带 SELinux)中,每个文件 / 进程 / 端口都有一个安全上下文,格式通常是:
user:role:type:level
例如:
system_u:object_r:httpd_sys_content_t:s0
ls -Z /var/www/html/index.html
ps -Z
semanage port -l
chcon -t httpd_sys_content_t /data/web/index.html
示例:让 Nginx 访问目录
chcon -R -t httpd_sys_content_t /data/web
⚠️ chcon 修改的是当前状态,文件系统 relabel 后会失效。
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
restorecon -Rv /data/web
✅ 这样重启或 relabel 都不会丢
semanage fcontext -a -t httpd_sys_content_t "/webroot(/.*)?"
restorecon -Rv /webroot
semanage fcontext -a -t var_log_t "/mylog(/.*)?"
restorecon -Rv /mylog
例如让 Apache 监听 8081:
semanage port -a -t http_port_t -p tcp 8081
查看:
semanage port -l | grep http
ausearch -m avc -ts recent
audit2why < /var/log/audit/audit.log
audit2allow -a
getenforce
setenforce 0 # 临时
永久修改:
vi /etc/selinux/config
SELINUX=enforcing
| 场景 | Context 类型 |
|---|---|
| Web 目录 | httpd_sys_content_t |
| 可写 Web 目录 | httpd_sys_rw_content_t |
| FTP 目录 | public_content_t |
| MySQL 数据 | mysqld_db_t |
| Nginx | httpd_t |
如果你指的是 其他 context(如 systemd、PAM、Docker、Kubernetes),告诉我具体场景,我可以给你更针对性的配置示例。