linux-chmod用法解析
解析 Linux chmod 的数字模式与符号模式
在学习 AWS 认证(如 SAA)或进行 DevOps 实操时,我们经常会遇到这样一个报错:WARNING: UNPROTECTED PRIVATE KEY FILE!
这是因为 SSH 客户端要求私钥文件(.pem)必须具备严格的权限控制。解决它的核心命令就是 chmod。
本文将带你彻底搞懂 chmod 的两种操作方式:数字模式 (Numeric Mode) 与 符号模式 (Symbolic Mode)。
一、 数字模式:逻辑严密的八进制法
数字模式是 Linux 系统中最常用的方式,它通过三个(或四个)八进制数字来定义权限。
1. 核心权重计算
每一个数字代表一个特定角色的权限总和。你只需要记住 4 (读)、2 (写)、1 (执行):
| 权限 | 缩写 | 数字权重 |
|---|---|---|
| 读取 (Read) | r |
4 |
| 写入 (Write) | w |
2 |
| 执行 (Execute) | x |
1 |
| 无权限 | - |
0 |
计算公式: 最终权限 = $Read + Write + Execute$。
- 例如:
rwx= 4 + 2 + 1 = 7 - 例如:
rw-= 4 + 2 + 0 = 6 - 例如:
r--= 4 + 0 + 0 = 4
2. 三位数的含义
一个典型的数字命令如 chmod 755,其数字位置对应不同的对象:
- 第一位:文件所有者 (User/Owner)
- 第二位:所属组 (Group)
- 第三位:其他人 (Others)
典型案例:
chmod 400 my-key.pem
意味着:所有者仅读 (4),组和其他人无任何权限 (00)。这是 AWS 私钥的安全标准。
二、 符号模式:直观的语义表达
如果你不想做算术题,符号模式提供了更具可读性的方式。它的语法结构是:谁 (Who) 操作 (Operator) 权限 (Permission)。
1. 组成部分
- Who(对象):
u(用户),g(组),o(其他人),a(所有人) - Operator(操作):
+(增加),-(移除),=(精确设定/覆盖) - Permission(权限):
r(读),w(写),x(执行)
2. 常用操作对比
| 需求 | 符号命令 | 说明 |
|---|---|---|
| 增加执行权 | chmod +x script.sh |
给所有人增加执行权限 |
| 移除写权限 | chmod go-w file.txt |
移除组和其他人的写权限 |
| 精确设置权限 | chmod u=rwx,go=rx file |
所有者全开,其他人只读/执行 |
| 保护私钥 | chmod u=r,go= key.pem |
精确设置所有者只读,其余留空 |
三、 实战:为什么 AWS 私钥非要 400?
当你从 AWS 下载 .pem 文件后,默认权限通常是 0644 (针对 Linux) 或更高。
- 0644 的危险之处: 这意味着系统里的其他用户可以读取你的私钥,从而可能盗取你的服务器访问权。
- SSH 的强制校验: SSH 协议设计者为了安全性,会在连接前检查私钥权限。如果权限超过
0400(即除了所有者,其他人有任何权限),连接就会被强制中断。
解决方案对比:
- 数字法:
chmod 400 my-key.pem(最推荐,简单快捷) - 符号法:
chmod u=r,go= my-key.pem(最清晰,明确清空他人权限)
四、 总结:我该选哪种?
- 选择数字模式:当你需要快速、一次性设置完整的权限位时(如
755,644,400)。这在编写自动化脚本、Ansible 配置时是行业标准。 - 选择符号模式:当你只想微调现有权限时(如“我想给这个文件加个执行权”,即
chmod +x),或者你觉得计算数字太麻烦时。
💡 小贴士: 你可以使用 ls -l 命令来查看修改后的结果。如果看到权限位显示为 -r--------,那么恭喜你,你的私钥现在非常安全!
