权限模型与 chmod
Linux 用三段权限描述访问控制:属主、属组、其它各有一组读、写、执行位。关键在于同一组权限位在文件与目录上含义不同:文件上的执行位表示可以运行,目录上的执行位表示可以进入和遍历,目录上的写权限表示可以创建、删除、改名其中的条目。除基本权限外还有特殊位,用数字前缀表示,分别用于提权执行、目录继承属组和目录内文件保护。理解这层语义,才能解释很多「权限看起来对但就是不行」的现象。
基本信息
| 数字法 | 三位数字对应属主、属组、其它,读 4 写 2 执行 1 |
|---|---|
| 常用取值 | 644 普通文件、755 目录与可执行文件、600 私密文件 |
| 符号法 | 按主体增减权限,如给属主加执行、去掉组的写权限 |
| 特殊位前缀 | 第四位表示提权执行、属组继承与目录内的删除保护 |
| 递归选项 | 对整个目录树批量修改,使用前必须确认范围 |
| 查看方式 | 长格式列表可同时看到权限、属主与属组 |
典型使用场景
- 私钥保护:把密钥文件权限收到仅属主可读写,否则认证会被拒绝
- 脚本授权:给部署脚本加执行权限,避免每次都用解释器调用
- 目录开放读:共享目录给出遍历与读取权限,但不开放写
- 敏感文件收敛:把含口令的配置收到仅属主可读
- 清理过宽权限:去掉组或其它用户的写权限,防止被随意篡改
- 排查访问失败:确认到底是哪一段权限缺失导致无法访问
典型用法
典型用法
chmod 600 ~/.ssh/id_ed25519 # 私钥仅属主可读写
chmod 644 /etc/app/app.conf # 配置普通权限
chmod 755 /opt/app/start.sh # 脚本可执行
chmod u+x deploy.sh # 符号法:给属主加执行
chmod g-w,o-rwx /data/share # 去掉组写权限与其它用户全部权限
chmod 1777 /data/upload # 加保护位:目录内仅属主可删自己的文件
ls -l /opt/app/start.sh # 核对结果权限位读法
| 权限位 | 文件上的含义 | 目录上的含义 |
|---|---|---|
| 读 | 可以查看内容 | 可以列出目录条目 |
| 写 | 可以修改内容 | 可以创建、删除、改名条目 |
| 执行 | 可以运行 | 可以进入与遍历 |
| 提权位 | 以属主身份运行 | 目录内新建文件继承属组 |
| 保护位 | 通常无实际效果 | 目录内仅属主可删除自己的文件 |
目录的写权限与执行权限要分开理解:只有写没有执行时,能看到条目名字却无法访问内容;只有执行没有读时,能按已知路径进入但列不出目录内容。上传目录常靠保护位让多用户共存,避免互相删除文件。
为图省事对目录树整体放开全部权限,会同时带来安全与合规问题:任何账号都能修改甚至替换程序文件。批量修改前先确认目标树里没有指向系统目录的软链接,避免顺着链接改到系统层,造成难以恢复的后果。