casyup.me@outlook.com

0%

other/permission

permission denied

有些时候, linux下执行/访问文件的时候, 都会报这个错

错误的原因是: 权限被拒绝, 那么linux的权限是怎么规定的?

文件权限

执行ll后, 显示的信息:

1
2
3
4
5
6
-rwxrwxr-x 1 wd wd  8419 Nov  8 10:47 a.out
-rw-rw-r-- 1 wd wd 60579 Oct 25 21:11 t
-rw-rw-r-- 1 wd wd 272 Oct 25 21:11 t.cpp
-rw-rw-r-- 1 wd wd 369 Nov 8 10:47 time.cpp
-rw-rw-r-- 1 wd wd 71784 Oct 29 11:53 t.o
-rw-rw-r-- 1 wd wd 5815 Oct 29 11:57 t.s

其中 -rw-rw-r– 这一串代表的就是linux的文件权限, 一共有10个字符

其中最开始的字符代表文件类型, 比如: - 代表一般文件, l 代表链接文件

后面9个字符分为三部分, 分别代表: user(用户), group(组), other(其他)

每个部分有3个字符, 分别表示: r(read, 可读), w(write, 可写), x(execute 可执行)

如果某一部分没有这个权限, 则用 - 占位

因此可知 -rw-rw-r– 意为:

一般文件, 拥有者可读写, 同组用户可读写, 其他用户可读

隐藏属性

除此之外, linux的文件还有隐藏的属性

1
2
3
4
5
6
7
[...]$ lsattr .
-------------e- ./t.o
-------------e- ./a.out
-------------e- ./t.s
-------------e- ./time.cpp
-------------e- ./t
-------------e- ./t.cpp

通过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的文件

以上来自鸟哥私房菜, 详细参照第二部分