Linux 权限说明核心就是系统通过 rwx 三种基础权限,结合属主属组其他用户三组身份,对文件和目录做访问控制,Linux 是多用户操作系统,所有文件目录都绑定属主也就是 owner,属组也就是 group,还有其他用户 other,每一组身份都拥有读写执行三种独立权限,读权限代表可以查看内容,写权限代表可以修改新增删除,执行权限代表可以运行程序或者进入目录,这里要特别注意目录和文件的 rwx 含义不一样,很多新手最容易踩坑,文件的执行权限是运行程序脚本,目录的执行权限是允许用户 cd 进入这个目录,就算目录有读权限,缺少执行权限依然无法进入,权限一般用字母 rwx 展示,也可以转换成八进制数字,r 等于 4 w 等于 2 x 等于 1,三个数字组合就可以代表一组权限,修改权限主要使用 chmod,修改属主属组使用 chown,新建文件目录还会受 umask 掩码影响,默认权限不是固定值,在服务器部署排错的时候,绝大多数访问报错 permission denied,根源都是 linux 权限说明理解不到位,掌握这套机制之后,就可以精准控制业务程序读写文件,提升服务器安全,避免所有用户都拥有过高权限。
一 三组身份定义
1 属主 user 简写 u 文件创建者或者手动 chown 指定的所有者,拥有最高优先级权限
2 属组 group 简写 g 文件所属用户组,同组用户共享这一组权限
3 其他用户 other 简写 o 既不是属主,也不在属组里面的全部用户
4 全部身份 all 简写 a 等同于 u g o 三者总和,chmod 操作的时候可以直接对全部身份修改权限
二 rwx 权限含义 区分文件和目录
基础字母含义
r 读权限
w 写权限
x 执行权限
文件和目录权限差异表格
| 权限 | 文件含义 | 目录含义 |
|---|---|---|
| r | 可以读取文件内容 cat 查看 | 可以列出目录里面文件名称 ls 查看 |
| w | 可以修改文件内容 | 可以在目录里面新建 删除 重命名文件 |
| x | 可以运行程序 脚本 二进制程序 | 可以 cd 进入目录,访问目录内子项 |
重点补充,目录的写权限非常关键,只要用户对目录拥有 w 权限,就算用户对目录里面的文件没有写权限,依然可以删除这个文件,这个是 Linux 权限设计特点,很多人误以为文件本身权限就能阻止删除,实际删除动作是由上层目录权限决定。
三 八进制数字权限表示法
r=4 w=2 x=1,把每组身份对应的数字相加,得到三位八进制数字,分别对应属主 属组 其他用户
例子
755 属主 7=rwx 属组 5=r-x 其他 5=r-x,常用脚本目录权限
644 属主 6=rw 属组 4=r 其他 4=r,普通文本配置文件默认常用权限
700 属主 rwx 属组无权限 其他无权限,私密目录
600 属主 rw 其余全部无权限,密钥文件常用权限
四 特殊权限位 深度扩展
除了普通 rwx,Linux 还有三个特殊权限,suid sgid sticky 位
1 suid 数字 4,作用在可执行文件,普通用户运行这个程序的时候,临时获得文件属主的权限,比如 passwd 命令就带 suid
2 sgid 数字 2,作用目录的时候,新建子文件自动继承父目录的用户组
3 sticky 数字 1,典型就是 /tmp 目录,目录里面文件只有属主 root 才可以删除,其他用户不能删除别人文件,就算目录有 w 权限
五 权限相关核心命令
1 chmod 修改权限
符号写法 chmod u+x test.sh 给属主增加执行权限 chmod g-w 去掉属组写权限
数字写法 chmod 755 test.sh
递归修改 chmod R 755 /data 对目录以及内部全部文件递归修改权限,R 参数风险较高,执行前确认路径
2 chown 修改属主和属组
chown user:group 文件
chown R user:group /data 递归修改属主属组
3 umask 查看默认掩码,新建文件目录默认权限会被 umask 扣除,目录默认初始值 777,文件初始值 666,减去 umask 得到最终权限
六 查看权限方式
执行 ls l,输出第一列就是权限字段,一共 10 位
第一位代表类型 d 代表目录 - 代表普通文件 l 代表软链接
后面 9 位分成三组,前三位属主,中间三位属组,后三位其他用户
七 常见权限错误场景
1 脚本无法执行,提示 permission denied,就是缺少 x 执行权限,chmod +x 添加执行权限
2 可以 ls 看到目录内容,但是 cd 提示无法进入,缺少目录 x 执行权限
3 程序无法写入日志,是进程运行用户对日志目录缺少 w 写权限
4 公网服务器权限过大,其他用户拥有 w 权限,存在安全风险,需要收紧权限
【常见问题】
问题 1 linux 权限说明里面目录的 w 权限和文件 w 权限有什么区别
回答 1 根据 linux 权限说明,文件 w 权限只允许修改文件内部内容,目录 w 权限是允许在目录内新建 删除 重命名条目,linux 权限说明里这个设计经常被新手忽略,只要拥有目录 w 权限,就可以删除目录内文件,不受文件本身权限限制。
问题 2 linux 权限说明中 755 和 644 分别代表什么
回答 2 按照 linux 权限说明,755 代表属主 rwx,属组 r-x,其他用户 r-x,适合脚本和目录,644 代表属主 rw,属组 r,其他用户 r,适合普通配置文本文件,这两个是 linux 权限说明里面最常用的标准权限值。
问题 3 学习 linux 权限说明之后为什么修改权限还是提示 permission denied
回答 3 学习 linux 权限说明之后仍然报错 permission denied,除了文件本身权限,还要检查上层目录是否具备 x 执行权限,同时还要确认当前执行程序的运行用户,部分场景还受 selinux 安全策略影响,linux 权限说明只覆盖传统 rwx 权限,selinux 属于额外强制访问控制。
【免责申明】
本文 linux 权限说明内容仅作为技术学习参考,chmod 递归修改权限 chown 变更属主属于高风险操作,错误调整权限可能导致服务无法运行 系统文件被篡改,生产环境修改 linux 权限说明相关配置前做好备份与变更评审,操作风险由使用者自行承担。


