Linux文件权限chmod chown详解
为什么必须搞懂 chmod 和 chown
很多刚接触 Linux 的朋友,在做网站、搭环境时经常遇到“Permission denied”报错。
这背后就是文件权限在起作用。
Linux 用一套简单的数字组合(比如 755、644)来控制谁可以读、写、执行文件。chmod 用来改这些数字,chown 用来修改文件的所有者。
今天这篇教程就带着你从零开始,把这个知识点彻底拿下。
准备工作:先确认你的环境
在操作之前,确保你已经有 Linux 服务器(云服务器、虚拟机或 WSL 都行),并且能用普通用户登录(比如通过 SSH)。
- 查看当前用户:
whoami - 查看文件当前权限:
ls -l filename,第一列就是权限字符串,例如-rw-r--r--
如果你用的是宝塔面板,也可以直接在“文件管理器”中右键文件查看属性,但核心操作还是通过命令行更可控。
核心操作:chmod 修改文件权限
用数字法快速设置
Linux 权限用三位数字表示:所有者(Owner)、所属组(Group)、其他人(Others)。
每个位置对应一个数字:r(读=4)、w(写=2)、x(执行=1),三者相加得到最终值。
常见组合:
755:所有者可读写执行(4+2+1=7),组和他人可读和执行(4+1=5)644:所有者可读写(4+2=6),组和他人只读(4)777:所有人都有全部权限(危险,慎用)
实操命令:
# 将 index.php 设置为 755
chmod 755 index.php
# 将整个网站目录(包含子目录)递归设为 755
chmod -R 755 /www/wwwroot/example
-R 表示递归,可以一次性修改目录下所有文件和子目录。
常见场景设置
- 文件上传目录(比如 upload):需要可写入,通常设为
755或750,不要轻易用 777。 - PHP 等脚本文件:
644即可,不需要执行权限;如果一定要执行则用755。 - 配置文件(如 .env):
600只允许所有者读写,其他用户不可见。
核心操作:chown 修改文件所有者
有时我们需要把文件从 root 转给 www 用户(网站运行用户)。
命令格式:chown [所有者]:[所属组] 文件路径
示例:
# 把 test.txt 的所有者改为 www,所属组也改为 www
chown www:www test.txt
# 递归修改整个目录的所有者和组
chown -R www:www /www/wwwroot/example
注意:修改所有者一般需要 sudo 权限(root),普通用户只能改自己拥有的文件。
避坑指南:新手最容易翻车的 3 个点
- 777 用太多:很多教程直接教 chmod 777,本地测试可以,线上千万别。777 意味着任何用户都能修改你的文件,极不安全。尽量用 755 或 644。
- 忘记递归:改目录权限时若不加
-R,只修改目录本身,里面的文件还是旧权限,造成程序依然报错。 - 用户写错:用
chown时注意用户名拼写,例如www还是www-data?先执行id www或cat /etc/passwd确认用户存在。
验证效果:确保权限生效
修改完权限后,一定要验证。
# 查看文件权限和所有者
ls -l /www/wwwroot/example/index.php
输出示例:
-rwxr-xr-x 1 www www 1234 Apr 1 10:00 index.php
第一列表示权限(rwx 分别对应 4+2+1=7),第三列是所有者,第四列是所属组。
如果需要测试文件是否可写,可以用 touch 创建一个临时文件:
# 以当前用户身份尝试写入
touch test_write.txt
ls -l test_write.txt
如果报错说明权限不足,检查目录的写权限。
高频问题解答
Q:为什么 chmod 后还是 Permission denied?
A:可能原因:1) 父目录缺少执行权限(需要 x) 2) 文件被 SELinux 或 AppArmor 拦截(可用 ls -Z 查看上下文) 3) 使用了 sudo 但命令执行错误。
Q:我想给所有用户都能读,但只有特定用户能写,怎么设?
A:用 ACL(访问控制列表)实现更细粒度,基础用 chmod 655 实现所有人可读执行,所有者可写。
小结
掌握 chmod 和 chown 是 Linux 运维的必修课。
记住数字权限对应关系,合理使用 -R 递归,避免滥用 777。
当你再次遇到权限报错时,先 ls -l 查看状态,再用 chown 和 chmod 调整即可。