当前位置:首页>Linux>linux chcon命令分享

linux chcon命令分享

  • 2026-09-02 21:44:30
linux chcon命令分享

一,什么是chcon

https://man.he.net/man1/chcon
chcon - 更改文件安全上下文

chcon 是 Linux 系统中的一个命令,全称为 "Change Context",主要用于修改文件或目录的安全上下文(Security Context),这是 SELinux(Security-Enhanced Linux)安全子系统的一个重要概念。

核心作用在 SELinux 机制下,每个文件和进程都有一个安全上下文,用来描述其访问权限和限制。安全上下文通常由四个部分组成:用户:角色:类型:级别(user:role:type:level)。chcon 命令允许管理员为文件或目录分配更具体的安全策略,从而精确控制对它们的访问权限。

二,参数

[root@localhost ~]# chcon --help 用法: chcon [选项]... CONTEXT FILE...  或:  chcon [选项]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...  或:  chcon [选项]... --reference=RFILE FILE...将每个 FILE 的 SELinux 安全上下文更改为 CONTEXT。使用 --reference 时,将每个 FILE 的安全上下文更改为与 RFILE 相同。长选项的强制参数对于短选项也是强制的。      --dereference      影响每个符号链接的引用目标(这是默认行为),                         而不是符号链接本身  -h, --no-dereference   影响符号链接本身,而不是它引用的文件  -u, --user=USER        在目标安全上下文中设置用户 USER  -r, --role=ROLE        在目标安全上下文中设置角色 ROLE  -t, --type=TYPE        在目标安全上下文中设置类型 TYPE  -l, --range=RANGE      在目标安全上下文中设置范围 RANGE      --no-preserve-root 不特殊对待 '/'(默认行为)      --preserve-root    在 '/' 上递归操作时失败      --reference=RFILE  使用 RFILE 的安全上下文,而不是指定一个 CONTEXT 值  -R, --recursive        递归操作文件和目录  -v, --verbose          为每个处理的文件输出诊断信息以下选项在同时指定 -R 选项时,修改目录层次的遍历方式。如果指定了多个,只有最后一个生效。  -H                     如果命令行参数是一个指向目录的符号链接,则遍历它  -L                     遍历遇到的每个指向目录的符号链接  -P                     不遍历任何符号链接(默认)      --help     显示此帮助信息并退出      --version  输出版本信息并退出GNU coreutils 在线帮助: <http://www.gnu.org/software/coreutils/>完整文档,请运行: info coreutils 'chcon invocation'

三,例子

修改单个文件的类型(Type)

场景:将普通文件的上下文类型修改为网络配置文件类型

# 1. 创建测试文件,并查看其默认的安全上下文[root@server ~]# touch test.txt[root@server ~]# chcon -v system_u:object_r:net_conf_t:s0 test.txt[root@server ~]# ls -Z test.txtunconfined_u:object_r:admin_home_t:s0 test.txt  # 默认类型是 admin_home_t[root@localhost ctest]# ls -Z test.txt-rw-r--r--. root root system_u:object_r:net_conf_t:s0  test.txt# 2. 使用 chcon 修改类型为 net_conf_t,-v 参数用于显示详细过程[root@server ~]# chcon -v -t net_conf_t test.txt正在更改 '/root/test.txt' 的安全上下文# 3. 验证修改结果[root@server ~]# ls -Z test.txtunconfined_u:object_r:net_conf_t:s0 test.txt    # 验证:类型已成功修改为 net_conf_t

参考已有文件修改上下文(Reference)

场景:让新创建的文件完全继承某个系统标准文件的上下文(包括用户、角色、类型等)

# 1. 创建临时文件,查看其默认上下文[root@localhost ctest]# touch temp[root@localhost ctest]# chcon -v system_u:object_r:net_conf_t:s0 temp changing security context of ‘temp’[root@localhost ctest]# ls -Z temp-rw-r--r--. root root system_u:object_r:net_conf_t:s0  temp# 2. 查看参考文件(/var/log/tallylog )的上下文[root@localhost ctest]# ls -Z /var/log/tallylog -rw-------. root root system_u:object_r:faillog_t:s0   /var/log/tallylog[root@localhost ctest]# chcon -v --reference=/var/log/tallylog  ./tempchanging security context of ‘./temp’[root@localhost ctest]# ls -Z temp-rw-r--r--. root root system_u:object_r:faillog_t:s0   temp

递归修改目录及子文件(Recursive)

场景:将自定义的 Web 目录及其内部所有文件,批量修改为允许 Nginx/Apache 访问的 Web 内容类型

# 1. 创建自定义网页目录,查看其默认上下文[root@localhost ctest]# mkdir -p /www/nginx[root@localhost ctest]# ls -Zd /www/nginxdrwxr-xr-x root root ?                                /www/nginx[root@localhost ctest]# chcon -v system_u:object_r:net_conf_t:s0 /www/nginx/changing security context of ‘/www/nginx/’[root@localhost ctest]# ls -Zd /www/nginxdrwxr-xr-x. root root system_u:object_r:net_conf_t:s0  /www/nginx# 2. 使用 -R 递归修改,参考系统默认的 nginx 目录上下文[root@localhost ctest]# chcon -Rv --reference=/var/log/tallylog  /www/nginxchanging security context of ‘/www/nginx’[root@localhost ctest]# ls -Zd /www/nginxdrwxr-xr-x. root root system_u:object_r:faillog_t:s0   /www/nginx

四,补充

作者 本文件由Russell Coker和Jim Meyering编写。

报告错误  GNU核心工具在线帮助:<https://www.gnu.org/software/coreutils/>  如发现任何翻译错误,请向<https://translationproject.org/team/>报告

版权 (C) 2020 自由软件基金会股份有限公司。许可证 GPLv3+:GNU GPL 版本 3 或更高版本 <https://gnu.org/licenses/gpl.html>。

这是自由软件:您可以自由修改和重新分发。

在法律允许的范围内,不提供任何担保。

另见 完整文档 <https://www.gnu.org/software/coreutils/chcon> 或可通过以下方式在本地获取:info '(coreutils) chcon invocation'

常见的上下文标识

服务类别
资源类型
标签名称
作用描述
Web 服务(Apache / Nginx)
进程类型 (Domain)
httpd_t
标识 Web 服务器进程,定义其整体的访问权限范围
Web 服务(Apache / Nginx)
网站目录/静态文件
httpd_sys_content_t
标识 Web 服务器可读取的静态网页文件
Web 服务(Apache / Nginx)
Web 服务日志
httpd_log_t
标识 Web 服务的日志文件
数据库服务(MySQL / MariaDB)
进程类型 (Domain)
mysqld_t
标识数据库服务进程
数据库服务(MySQL / MariaDB)
数据库数据目录
mysqld_db_t
标识数据库的数据文件,仅允许 mysqld_t 等特定进程读写
SSH 服务
进程类型 (Domain)
sshd_t
标识 SSH 服务进程
SSH 服务
SSH 可执行文件
sshd_exec_t
标识 SSH 相关的可执行程序
SSH 服务
SSH 端口
ssh_port_t
标识 SSH 服务允许绑定的网络端口
系统通用与临时资源
临时目录(/tmp)
tmp_t
标识临时文件,默认限制 httpd_t 等网络服务访问,防止越权
系统通用与临时资源
系统变量数据
var_t
标识 /var 目录下的常规变量数据文件
系统通用与临时资源
普通可执行文件
usr_t
标识 /usr 目录下的普通可执行程序
系统通用与临时资源
系统日志文件
var_log_t
标识系统级别的日志文件
系统通用与临时资源
密码文件
passwd_file_t
标识 /etc/passwd 等核心认证文件

五,总结

chcon是更改文件安全上下文,生产环境建议:如果在生产环境中需要永久保留上下文修改,建议在测试好 chcon 命令后,使用 semanage fcontext -a -t <类型> <路径> 将规则写入策略,然后再执行 restorecon -Rv <路径> 使其永久生效。

最后的最后(Last but not least),欢迎交流:

关注公众号留言,或者在下方直接留言:

最新文章

随机文章