在 Linux 系统中,文件和目录的权限控制是系统安全与协作的根基。合理配置权限不仅能防止数据泄露与误操作,也可保障系统稳定与服务可靠性。本文将从原理出发,系统讲解两个核心命令:chmod
和 chown
,帮助读者全面掌握 Linux 文件权限控制的机制与最佳实践,从而构建安全、可控的运行环境。
一、Linux 文件权限模型:三个层次,九个标志
Linux 使用一种简洁而强大的权限模型,权限分为三类角色与三类操作:
1. 三类角色(Who)
-
Owner(文件属主)
-
Group(文件所属组)
-
Others(其他用户)
2. 三类操作权限(Permission)
-
r:read(读取)
-
w:write(写入/删除/修改)
-
x:execute(执行)
这三类角色对文件或目录的权限,用 10 位字符表示,如:
-rwxr-xr--
位数 | 含义 | 示例含义 |
---|---|---|
1 | 文件类型 - 普通文件 / d 目录 | - 表示普通文件 |
2-4 | 所有者权限 | rwx 表示可读写执行 |
5-7 | 用户组权限 | r-x 表示可读执行 |
8-10 | 其他人权限 | r-- 表示只读 |
二、chmod
命令详解:修改权限的利器
chmod
(change mode)用于更改文件或目录的权限。
1. 基本语法
chmod [选项] 模式 文件名
2. 使用方式一:符号模式(推荐)
chmod u+x script.sh # 给文件属主添加执行权限
chmod g-w report.txt # 删除用户组的写权限
chmod o=r notes.md # 将其他人权限设置为只读
符号 | 说明 |
---|---|
u | 所有者 |
g | 用户组 |
o | 其他人 |
a | 所有人(u+g+o) |
+ | 添加权限 |
- | 删除权限 |
= | 精确设定权限 |
3. 使用方式二:数字模式(效率高)
chmod 755 script.sh
数字表示权限位的组合值,采用二进制位计算:
权限 | 值(rwx) |
---|---|
r | 4 |
w | 2 |
x | 1 |
例如:
-
7
=rwx
= 4 + 2 + 1 -
5
=r-x
= 4 + 0 + 1 -
0
= 无权限
常用组合:
-
755
:属主可读写执行,组与其他人可读执行(常用于脚本) -
644
:属主可读写,组与其他人只读(常用于文本配置) -
700
:属主完全控制,其他人无法访问(用于私密数据)
4. 递归修改子目录和文件权限
chmod -R 755 /var/www/html
注意:在修改目录时,确保目录本身具有执行权限,否则无法 cd
进入。
三、chown
命令详解:更改属主属组的控制法则
chown
(change owner)用于更改文件或目录的属主(user)与所属组(group)。
1. 基本语法
chown [选项] 用户:组 文件名
例如:
chown devops:admin log.txt # 将文件属主改为 devops,组为 admin
chown alice data.csv # 只修改属主,不变更所属组
chown :wheel /usr/local/bin # 只修改所属组
2. 递归修改文件属主
chown -R root:wheel /opt/app
这在部署系统服务或迁移目录所有权时非常常见。
3. 使用用户和组 ID 设置所有权
chown 1001:1001 file.txt
适用于脚本或容器环境中,不确定用户名时用 UID 和 GID。
四、目录权限的特殊性
目录权限中,x(执行)权限的含义不同,代表的是“进入(traverse)”权限。
权限组合 | 意义说明 |
---|---|
r-- | 可列出文件名(ls ),但不能 cd 进入 |
--x | 可进入目录(cd ),但不能 ls 查看内容 |
r-x | 可进入并查看目录文件名 |
rw- | 可创建/删除文件,但不能执行 |
rwx | 完整权限,读写执行皆可 |
示例:
chmod 750 project
表示属主可完全访问,组用户可进入和读取目录,其他人无访问权限。
五、高级技巧:默认权限与安全防护
1. 设置默认权限(umask)
umask
决定新建文件/目录的默认权限:
-
文件默认权限:
666 - umask
-
目录默认权限:
777 - umask
umask 022 # 文件默认 644,目录默认 755
可以在 ~/.bashrc
中设置永久默认值。
2. 利用 chmod
配置粘滞位与特殊位
-
Sticky Bit(粘滞位):常用于
/tmp
目录,防止其他用户删除非自己文件
chmod +t /tmp
-
Setuid/Setgid:程序执行时以属主/组身份运行(如
passwd
)
chmod u+s /usr/bin/passwd
chmod g+s /shared/dir
这部分需谨慎使用,涉及提权。
六、案例解析
案例 1:Web 应用部署
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
确保 Web 服务器(如 Nginx)具有文件读取执行权限,但不允许随意写入。
案例 2:用户隔离与私有数据保护
mkdir /data/alice
chown alice:alice /data/alice
chmod 700 /data/alice
确保只有 Alice 用户可以访问该目录,保障数据隔离性。
案例 3:团队共享协作目录
mkdir /project/team
chown root:devteam /project/team
chmod 2770 /project/team # Setgid + rwx:组成员创建的文件默认归组
使用 Setgid 可保持组一致性,增强协作效率。
七、权限问题排查指南
问题现象 | 排查命令与建议 |
---|---|
文件无法执行 | ls -l 查看是否具备 x 权限 |
目录无法进入或 Permission denied | 检查父目录执行权限,逐级排查 |
文件编辑提示只读 | 是否缺少 w 权限 |
服务读取配置失败 | 服务进程用户是否有读权限 |
脚本运行提示 command not found | 可能文件无执行权限或路径错误 |
八、结语
Linux 权限系统是简洁而优雅的,它为系统提供了灵活且严密的最小授权机制(Principle of Least Privilege)。作为开发者、测试人员或系统管理员,掌握 chmod
与 chown
不仅是基础技能,更是安全意识与运维能力的体现。
在 DevOps、云计算、安全审计等现代工程背景下,合理配置与审计权限,已成为不可或缺的核心职责。愿本文助你拨开权限迷雾,构建起安全可靠的工程世界。
附录:常用命令速查表
chmod u+x file # 给属主加执行权限
chmod 644 file # 常用文件权限设置
chmod -R 755 dir/ # 批量设置目录权限
chown user:group file # 修改属主属组
chown -R root:root /etc/nginx
ls -l # 查看文件权限
umask # 查看默认权限掩码
如你想进一步探索 Linux 权限与 ACL(访问控制列表)、SELinux、容器文件系统权限映射等高级话题,欢迎继续深入交流。