Linux 文件权限详解:chmod、chown、umask 到底怎么用?

Linux 文件权限详解:chmod、chown、umask 到底怎么用?

1. 前言

Linux 是多用户操作系统。一个文件能不能被读取、修改、执行,不只取决于文件本身,还取决于当前用户是谁、文件属于谁、文件属于哪个用户组,以及权限位如何设置。

本文围绕 Linux 权限模型展开,重点讲清楚三个命令:

bash 复制代码
chmod   # 修改权限
chown   # 修改文件所属用户/用户组
umask   # 控制新建文件的默认权限

2. 如何查看文件权限

使用:

bash 复制代码
ls -l

示例:

bash 复制代码
-rwxr-xr-- 1 root root 1024 May 18 10:00 run.sh

重点看第一段:

text 复制代码
-rwxr-xr--

它可以拆成四部分:

text 复制代码
-   rwx   r-x   r--
|    |     |     |
|    |     |     └── 其他用户权限
|    |     └──────── 所属用户组权限
|    └────────────── 文件所属用户权限
└─────────────────── 文件类型

第一位表示文件类型:

符号 含义
- 普通文件
d 目录
l 软链接

后面 9 位是权限位,每 3 位一组。


3. rwx 分别表示什么

对于普通文件:

权限 含义
r 可以读取文件内容
w 可以修改文件内容
x 可以执行文件

对于目录:

权限 含义
r 可以查看目录下的文件名
w 可以创建、删除、重命名目录内文件
x 可以进入目录,访问目录内文件

目录的 x 权限非常重要。

如果目录没有 x 权限,即使有 r 权限,也可能无法进入。


4. chmod:修改权限

权限可以用数字表示:

权限 数字
r 4
w 2
x 1

三者相加得到一组权限:

数字 权限
7 rwx
6 rw-
5 r-x
4 r--

常见权限:

bash 复制代码
chmod 755 run.sh      # rwxr-xr-x,脚本/目录常用
chmod 644 file.txt    # rw-r--r--,普通文件常用
chmod 600 id_rsa      # rw-------,私钥常用
chmod 700 scripts     # rwx------,私有目录常用

也可以使用符号方式:

bash 复制代码
chmod +x run.sh       # 给所有人增加执行权限
chmod u+x run.sh      # 只给所属用户增加执行权限
chmod g-w file.txt    # 去掉用户组写权限
chmod o-r secret.txt  # 去掉其他用户读权限

递归修改目录:

bash 复制代码
chmod -R 755 project

但不要随便递归 chmod 777,这会让所有用户都能读、写、执行,风险很高。


5. chown:修改所属用户和用户组

查看文件所属用户和用户组:

bash 复制代码
ls -l file.txt

示例:

bash 复制代码
-rw-r--r-- 1 root root 100 file.txt

两个 root 分别表示:

text 复制代码
所属用户:root
所属用户组:root

修改所属用户:

bash 复制代码
sudo chown user1 file.txt

同时修改用户和用户组:

bash 复制代码
sudo chown user1:user1 file.txt

递归修改目录:

bash 复制代码
sudo chown -R nginx:nginx /var/www/html

常见场景:

bash 复制代码
sudo chown -R mysql:mysql /var/lib/mysql
sudo chown -R www-data:www-data /var/www/html
sudo chown user:user ~/.ssh/id_rsa

6. umask:控制默认权限

umask 决定新建文件和目录的默认权限。

查看当前 umask:

bash 复制代码
umask

常见结果:

bash 复制代码
0022

文件默认最大权限是 666,目录默认最大权限是 777

如果 umask 是 022

text 复制代码
新建文件权限:666 - 022 = 644
新建目录权限:777 - 022 = 755

所以常见默认结果是:

bash 复制代码
-rw-r--r-- file.txt
drwxr-xr-x dir

临时修改 umask:

bash 复制代码
umask 027

这会让新建文件和目录权限更严格。


7. 为什么不建议 chmod 777

chmod 777 表示:

text 复制代码
所有用户都能读、写、执行

它虽然能快速解决"Permission denied",但安全风险很大:

  • Web 目录可能被写入后门文件;
  • 配置文件可能被普通用户修改;
  • 脚本可能被替换;
  • SSH 私钥权限过宽会被拒绝使用。

正确思路不是直接 777,而是先判断:

text 复制代码
谁需要访问?
需要读、写还是执行?
文件所属用户和用户组是否正确?

8. 常见问题排查

8.1 脚本无法执行

bash 复制代码
./run.sh

报错:

text 复制代码
Permission denied

检查权限:

bash 复制代码
ls -l run.sh

添加执行权限:

bash 复制代码
chmod +x run.sh

8.2 无法写入目录

查看目录权限:

bash 复制代码
ls -ld /path/to/dir

目录写入通常需要:

text 复制代码
w + x

只有写权限不够,还需要执行权限才能进入和操作目录。


8.3 程序没有权限读配置文件

检查文件所属用户:

bash 复制代码
ls -l config.yaml

如果服务以 nginx 用户运行,但文件只允许 root 读取,就会失败。

可以调整为:

bash 复制代码
sudo chown root:nginx config.yaml
sudo chmod 640 config.yaml

9. 小结

Linux 权限模型可以总结为:

text 复制代码
chmod:改权限
chown:改归属
umask:控制默认权限

常用命令回顾:

bash 复制代码
ls -l
ls -ld dir
chmod 755 run.sh
chmod +x run.sh
chown user:user file.txt
chown -R nginx:nginx /var/www/html
umask
umask 027

理解 rwx、用户、用户组、umask 之后,大多数 Linux 权限问题都可以自己定位。

相关推荐
能喵烧香19 小时前
深度解析:Linux 与 Windows 超级权限账户的本质差异
linux·windows
Moshow郑锴21 小时前
Ubuntu 26.04 中文输入法 : fcitx5+Rime中州韵引擎
linux·运维·ubuntu
qq_163135751 天前
Linux 【04-more命令超详细教程】
linux
sevencheng7981 天前
【ADB】adb命令行常用按键模拟代码
linux·adb·模拟按键,返回键,音量键
暗影天帝1 天前
BPI-R3 Mini 刷 Yuzhii DHCPD U-Boot 教程
linux
小赖同学啊1 天前
智能连接器集群化高可用生产方案
linux·运维·人工智能
Cinema KI1 天前
Linux第一个系统程序-进度条
linux·服务器
Moshow郑锴1 天前
Ubuntu 26.04 更换阿里云源镜像
linux·运维·ubuntu
Jason_chen1 天前
Linux 6.2 串口机制深度解析:AI驱动的自适应通信与零信任串口安全架构
linux
ShineWinsu1 天前
对于Linux:线程概念与分页存储管理的解析
linux·运维·服务器·面试·线程·进程·虚拟空间地址