permission denied
有些时候, linux下执行/访问文件的时候, 都会报这个错
错误的原因是: 权限被拒绝, 那么linux的权限是怎么规定的?
文件权限
执行ll后, 显示的信息:
1 | -rwxrwxr-x 1 wd wd 8419 Nov 8 10:47 a.out |
其中 -rw-rw-r– 这一串代表的就是linux的文件权限, 一共有10个字符
其中最开始的字符代表文件类型, 比如: - 代表一般文件, l 代表链接文件
后面9个字符分为三部分, 分别代表: user(用户), group(组), other(其他)
每个部分有3个字符, 分别表示: r(read, 可读), w(write, 可写), x(execute 可执行)
如果某一部分没有这个权限, 则用 - 占位
因此可知 -rw-rw-r– 意为:
一般文件, 拥有者可读写, 同组用户可读写, 其他用户可读
隐藏属性
除此之外, linux的文件还有隐藏的属性
1 | [...]$ lsattr . |
通过lsattr(attribute), 可以查询文件的隐藏属性, 其中比较重要的属性有:
a: append, 只能添加, 不能更改和删除
i: 不能删除. 改名, 设置链接, 同时也无法写入和添加数据
属性的增加和删除, 可以通过chattr + - 来设置, 如果想直接赋予一个新的属性, 可以使用 =
特殊权限
文件除此之外还有一些特殊的权限, SUID, SGID, SBIT
SUID位于user权限组: 拥有这个属性的文件, 最后一个字符位s, 例如: -rws——
SUID仅对二进制程序有效
SUID意为如果执行者拥有x权限, 当执行文件时, 执行者暂时拥有root权限
SGID位于group权限组: 拥有这个属性的文件, 最后一个字符位s, 例如: —-rws—
SGID意为如果执行者拥有x权限, 当执行文件时, 执行者暂时拥有用户组权限
SBIT位于other权限组:
SBIT仅对目录游泳: 拥有这个属性的文件, 最后一个字符位t, 例如: ——-rwt
SBIT意为: 当前面目录下, A仅仅只能删除(包括移动和重命名)A拥有的文件(文件持有者是A)
不能删除B的文件
以上来自鸟哥私房菜, 详细参照第二部分