【Linux进阶】拒绝Permission denied!彻底搞懂chmod与chown文件权限

简介: 本文深入解析Linux权限管理核心命令`chmod`与`chown`,教你读懂`ls -l`输出,掌握数字权限(如755、644)的含义与应用场景,理解属主与属组的作用,强调最小权限原则,拒绝滥用`chmod 777`,保障服务器安全。

前言

在Linux服务器上部署应用时,你是否遇到过这样的报错:Permission denied(权限被拒绝)?

很多新手遇到这个问题,第一反应就是简单粗暴地执行 chmod 777。虽然这能解决问题,但这就像为了进家门方便,把大门的锁直接拆了一样——极其危险

作为一个专业的开发者,我们必须深刻理解 Linux 的权限体系。今天我们就来彻底拆解 chmodchown 这两个命令。

1. 读懂 ls -l 的天书

在终端输入 ls -l,你会看到类似下面的一串字符:

Bash

drwxr-xr-x 2 root root 4096 Jan 1 12:00 my_folder
-rw-r--r-- 1 root root  123 Jan 1 12:00 config.txt

这串字符 drwxr-xr-x 到底是什么意思?我们把它拆成 4 部分来看:

  1. 第1位(文件类型):
  • d:代表目录 (Directory)
  • -:代表文件
  1. 第2-4位(属主权限 User): 文件拥有者(Owner)能做什么。
  2. 第5-7位(属组权限 Group): 和拥有者同组的用户能做什么。
  3. 第8-10位(其他权限 Others): 其他所有人能做什么。

其中,rwx 的含义如下:

  • r (Read): 读权限。
  • w (Write): 写权限(修改、删除)。
  • x (Execute): 执行权限(对于脚本是运行,对于目录是进入)。

2. chmod:修改权限的神器

chmod (Change Mode) 用于改变文件的读写执行权限。最常用的是**“数字法”**。

Linux 将权限赋予了数字含义,这是一个加法游戏

  • r = 4
  • w = 2
  • x = 1

常见的权限组合:

  • 7 (4+2+1): 读 + 写 + 执行 (最高权限)
  • 6 (4+2): 读 + 写 (不能执行)
  • 5 (4+1): 读 + 执行 (不能修改)
  • 4: 只读

记住这 3 个黄金组合:

1. chmod 755 —— 脚本和程序的标配

  • 解析: 属主(7=RWX),组用户(5=RX),其他人(5=RX)。
  • 场景: 这是一个可执行脚本,或者网站的目录。你可以任意修改,别人只能看和运行,不能乱改。

Bash

chmod 755 start.sh

2. chmod 644 —— 配置文件/网页文件的标配

  • 解析: 属主(6=RW),组用户(4=R),其他人(4=R)。
  • 场景: 比如 nginx.confindex.html。这些文件不需要执行,只需要能被读取即可。

Bash

chmod 644 index.html

3. chmod 600 —— 隐私文件的标配(如SSH密钥)

  • 解析: 属主(6=RW),其他人(0=无权限)。
  • 场景: 你的私钥文件 id_rsa。这是最高机密,除了你自己,谁都不能看,否则SSH会强制报错拒绝连接。

Bash

chmod 600 ~/.ssh/id_rsa

3. chown:物归原主

有时候权限是对的(比如755),但依然报错 Permission denied,为什么? 因为文件的主人不对

比如你用 root 账号上传了网站代码,但 Nginx 服务是用 wwwnginx 用户运行的。Nginx 想要读取文件,发现主人是 root,且 root 没给它权限,自然就报错了。

这时候需要用 chown (Change Owner) 来修改文件的拥有者。

语法: chown 用户:用户组 文件路径

实战场景:/data/wwwroot 目录下的所有文件,归还给 nginx 用户。

Bash

# -R 代表递归(Recursive),连同目录下的所有子文件一起修改
chown -R nginx:nginx /data/wwwroot

4. 警惕:为什么永远不要用 chmod 777

chmod -R 777 /var/www 是很多教程里的“大坑”。

这意味着任何人(包括黑客上传的恶意脚本)都可以在你的服务器上修改、删除、执行这个目录下的文件。如果你的网站有上传漏洞,黑客上传一个木马并执行,你的服务器就沦陷了。

原则:永远只给刚好够用的权限(Least Privilege)。

总结

  • chmod 管的是“能做什么”(读、写、执行)。
  • chown 管的是“谁能做”(你是主人吗?)。
  • r=4, w=2, x=1,口诀记心间。
  • 善用 755 (脚本/目录) 和 644 (普通文件),远离 777
相关文章
|
4月前
|
运维 监控 Shell
【自动化运维】告别手动搬运!编写Shell脚本自动备份与清理日志
本文介绍如何通过Shell脚本结合Crontab,实现服务器日志的自动备份与清理。每天凌晨2点自动压缩昨日日志并保存至备份目录,同时删除7天前的旧备份,防止磁盘占满。脚本具备目录创建、压缩打包、错误提示和日志记录功能,操作安全可靠,适合Linux运维新手实践自动化管理。
|
JavaScript Java
若依框架 - - - 自定义打印模版
若依框架 - - - 自定义打印模版
1329 0
若依框架 - - - 自定义打印模版
|
关系型数据库 MySQL 数据库
用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
855 0
|
30天前
|
存储 人工智能 监控
CoPaw是什么?与OpenClaw有什么区别?
2026年个人智能体爆发,阿里云CoPaw与开源OpenClaw成焦点。前者主打“协同工作台”,支持一键部署、长期记忆与开箱即用技能,面向职场人;后者是极客向AI实验平台,强调本地优先与高度定制。二者代表便捷性与自由度的路线之争。
3283 10
|
4月前
|
运维 网络协议 Shell
【网络运维】Ping不通?别慌!用Telnet和Netstat精准排查端口连通性
本文介绍网络排查两大利器:Telnet与Netstat。通过Ping只能检测服务器是否在线,而Telnet可测试端口连通性,区分“连接被拒”与“超时”;Netstat则用于服务端查看端口监听状态,识别如仅监听127.0.0.1导致外网无法访问的问题。结合ss命令和“三板斧”流程,快速定位网络故障。
|
7月前
|
关系型数据库 MySQL Java
SpringBoot集成Sharding-Jdbc分库分表
ShardingSphere是一套开源分布式数据库中间件解决方案,包含Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar三款产品,提供数据分片、分布式事务和数据库治理功能,适用于多样化应用场景。
1024 0
SpringBoot集成Sharding-Jdbc分库分表
|
关系型数据库 MySQL API
|
8月前
|
Oracle Java Linux
JDK
JDK
3330 0
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
2098 122
|
安全 Unix 网络安全
Permission Denied原因及解决方法
Permission Denied原因及解决方法
5931 0