Linux 文件权限详解:chmod、chown、umask 到底怎么用?
1. 前言
Linux 是多用户操作系统。一个文件能不能被读取、修改、执行,不只取决于文件本身,还取决于当前用户是谁、文件属于谁、文件属于哪个用户组,以及权限位如何设置。
本文围绕 Linux 权限模型展开,重点讲清楚三个命令:
chmod# 修改权限chown# 修改文件所属用户/用户组umask# 控制新建文件的默认权限2. 如何查看文件权限
使用:
ls-l示例:
-rwxr-xr--1root root1024May1810:00 run.sh重点看第一段:
-rwxr-xr--它可以拆成四部分:
- 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– |
常见权限:
chmod755run.sh# rwxr-xr-x,脚本/目录常用chmod644file.txt# rw-r--r--,普通文件常用chmod600id_rsa# rw-------,私钥常用chmod700scripts# rwx------,私有目录常用也可以使用符号方式:
chmod+x run.sh# 给所有人增加执行权限chmodu+x run.sh# 只给所属用户增加执行权限chmodg-w file.txt# 去掉用户组写权限chmodo-r secret.txt# 去掉其他用户读权限递归修改目录:
chmod-R755project但不要随便递归chmod 777,这会让所有用户都能读、写、执行,风险很高。
5. chown:修改所属用户和用户组
查看文件所属用户和用户组:
ls-lfile.txt示例:
-rw-r--r--1root root100file.txt两个root分别表示:
所属用户:root 所属用户组:root修改所属用户:
sudochownuser1 file.txt同时修改用户和用户组:
sudochownuser1:user1 file.txt递归修改目录:
sudochown-Rnginx:nginx /var/www/html常见场景:
sudochown-Rmysql:mysql /var/lib/mysqlsudochown-Rwww-data:www-data /var/www/htmlsudochownuser:user ~/.ssh/id_rsa6. umask:控制默认权限
umask决定新建文件和目录的默认权限。
查看当前 umask:
umask常见结果:
0022文件默认最大权限是666,目录默认最大权限是777。
如果 umask 是022:
新建文件权限:666 - 022 = 644 新建目录权限:777 - 022 = 755所以常见默认结果是:
-rw-r--r-- file.txt drwxr-xr-xdir临时修改 umask:
umask027这会让新建文件和目录权限更严格。
7. 为什么不建议 chmod 777
chmod 777表示:
所有用户都能读、写、执行它虽然能快速解决“Permission denied”,但安全风险很大:
- Web 目录可能被写入后门文件;
- 配置文件可能被普通用户修改;
- 脚本可能被替换;
- SSH 私钥权限过宽会被拒绝使用。
正确思路不是直接 777,而是先判断:
谁需要访问? 需要读、写还是执行? 文件所属用户和用户组是否正确?8. 常见问题排查
8.1 脚本无法执行
./run.sh报错:
Permission denied检查权限:
ls-lrun.sh添加执行权限:
chmod+x run.sh8.2 无法写入目录
查看目录权限:
ls-ld/path/to/dir目录写入通常需要:
w + x只有写权限不够,还需要执行权限才能进入和操作目录。
8.3 程序没有权限读配置文件
检查文件所属用户:
ls-lconfig.yaml如果服务以nginx用户运行,但文件只允许root读取,就会失败。
可以调整为:
sudochownroot:nginx config.yamlsudochmod640config.yaml9. 小结
Linux 权限模型可以总结为:
chmod:改权限 chown:改归属 umask:控制默认权限常用命令回顾:
ls-lls-lddirchmod755run.shchmod+x run.shchownuser:user file.txtchown-Rnginx:nginx /var/www/htmlumaskumask027理解rwx、用户、用户组、umask 之后,大多数 Linux 权限问题都可以自己定位。