文件权限是什么?用小区门禁来理解
你有没有去过高档小区?
小区门口有门禁,只有业主能进。访客、外卖小哥、快递员,各有各的权限范围。
Linux 的文件权限就是这个逻辑。每个文件都有三个角色的访问权限:
- 所有者(owner):文件的创建者,权限最大
- 所属组(group):和文件所有者同组的人
- 其他人(others):既不是所有者,也不在组里的所有人
怎么看文件权限?
在终端输入 ls -l,你会看到这样的输出:
-rwxr-xr-- 1 alice dev 4096 Aug 12 10:00 script.sh
最前面那串 -rwxr-xr-- 就是权限。拆开来看:
- rwx r-x r--
↑ ↑ ↑
文件类型 所有者 所属组 其他人
第一个字符 - 表示普通文件(如果是 d 就是目录)。后面每3个一组,分别对应所有者、所属组、其他人。
每个位置上的字母含义:
| 字母 | 含义 | 能做什么 |
|---|---|---|
r | read(读) | 查看文件内容 |
w | write(写) | 修改、删除文件 |
x | execute(执行) | 运行这个程序 |
- | 无权限 | 什么都做不了 |
举个例子:rwxr-xr--
- 所有者 alice:可以读、写、执行 ✅
- 所属组 dev:可以读、执行,但不能写 🔍▶️
- 其他人:只能读 📖
数字权限是怎么回事?
你可能会看到 chmod 755 这样的命令,755 是什么?
每个字母对应一个数字:
| 权限 | 字母 | 二进制 | 数字 |
|---|---|---|---|
| 读+写+执行 | rwx | 111 | 7 |
| 读+执行 | r-x | 101 | 5 |
| 读+写 | rw- | 110 | 6 |
| 只读 | r– | 100 | 4 |
| 写+执行 | -wx | 011 | 3 |
| 写 | -w- | 010 | 2 |
| 执行 | –x | 001 | 1 |
| 无权限 | — | 000 | 0 |
所以 755 = rwx(所有者)+ r-x(组)+ r-x(其他人)
644 = rw-(所有者)+ r--(组)+ r--(其他人)
最常见的三个数字:
| 权限 | 含义 |
|---|---|
| 777 | 所有人可读写执行(最危险,别随便用) |
| 755 | 所有者可写,其他人只读(常用在目录和脚本) |
| 644 | 所有者可读写,其他人只读(常用在普通文件) |
chmod 常用命令
修改权限
# 给所有者添加执行权限
chmod u+x script.sh
# 给所有人添加读权限
chmod a+r config.txt
# 设置文件为644(所有者读写,其他人只读)
chmod 644 index.html
# 设置目录为755(所有者全权限,其他人读和执行)
chmod 755 /var/www/html
权限修饰符:
| 符号 | 含义 |
|---|---|
u | 所有者(user) |
g | 所属组(group) |
o | 其他人(others) |
a | 所有人(all) |
+ | 添加权限 |
- | 撤销权限 |
= | 精确设置权限 |
递归修改权限
# 修改目录下所有文件为644
chmod -R 644 /path/to/dir
# 修改目录下所有目录为755
find /path/to/dir -type d -exec chmod 755 {} \;
注意:-R 是递归,会把目录下所有文件和子目录的权限都改掉。慎用。
实际场景:部署网站时该怎么设?
这是最常见的问题。以 Nginx 托管的网站为例:
# 网站根目录:755(可以浏览但不能修改)
chmod 755 /var/www/html
# 网站文件:644(可以读但不能修改)
chmod 644 /var/www/html/index.html
# 需要上传的目录:777(能读能写能执行,但危险)
chmod 777 /var/www/html/uploads
安全建议:能用 644 就别用 777。777 意味着任何人都能删除、修改你的文件,黑客最喜欢这种目录。
常见误区
误区一:chmod 777 最方便
确实方便,但安全风险极高。你的文件可能被任何人删除或植入恶意代码。
误区二:数字权限和字母权限是两回事
不是的,它们只是同一件事的两种写法。chmod 755 file 和 chmod u+rwx,g+rx,o+rx file 效果完全一样。
误区三:改了权限就万事大吉
权限只是第一道防线。更重要的是:你的服务器有没有开放不必要的端口?有没有弱密码?软件有没有及时更新?
总结
Linux 文件权限用三个字母 rwx 控制。每个角色(所有者、组、其他人)各有独立权限。
记住这三个数字就够了:
- 755:目录权限,常见于网站根目录
- 644:文件权限,常见于网页文件
- 777:危险值,尽量别用
下次遇到权限问题,先 ls -l 看看当前权限,再想清楚谁需要什么权限,最后用 chmod 精确设置。
你可以现在打开终端,cd 到你的项目目录,输入 ls -l,看看那些 rwxr-xr-x 到底是什么意思。