文件特殊权限: SUID, SGID, SBIT
目录
SUID
SGID
SBIT
SUID/SGID/SBIT 权限设定
1、SUID
当 s 标志出现在文件owner的 x 项目时,例如 /usr/bin/passwd文件的权限状态为:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。基本上 SUID仅仅对文件 有这样的限制与功能:
- SUID 权限仅对二进制程序(binary program)有效;
- 执行者对于该程序需要具有 x 的可执行权限;
- 本权限仅在执行该程序的过程中有效 (run-time);
- 执行者将具有该程序拥有者 (owner) 的权限
另外,SUID 仅可用在 binary program 上, 不能够用在 shell script 上面!这是因为 shell script 只是将很多的 binary 执行档叫进来执行而已!所以 SUID 的权限部分,还是得要看 shell script 呼叫进来的程序的设定, 而不是 shell script 本身。当然,SUID 对于目录也是无效的~这点要特别留意。
2、SGID
当 s 标志出现在文件group的 x 项目时,例如/usr/bin/locate文件的权限状态为:『-rwx--s--x』,此时就被称为 Set GID,简称为 SGID 的特殊权限。
与 SUID 不同的是,SGID 可以针对文件或目录来设定!
对于文件,SGID有如下功能:
- SGID 对二进制程序有用;
- 程序执行者对于该程序来说,需具备 x 的权限;
- 执行者在执行的过程中将会获得该程序群组的支持!
对于目录,SGID有如下功能:
- 用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;
- 用户在此目录下的有效群组(effective group)将会变成该目录的群组;
- 用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同
针对文件举个例子:
使用/usr/bin/locate指令查找某个文件时,locate会从/var/lib/mlocate/mlocate.db文件中查找文件的位置,但locate指令和mlocate.db的权限如下:
与 SUID 非常的类似,若我使用 dmtsai 这个账号去执行 locate 时,那 dmtsai 将会取得 slocate 群
组的支持, 因此就能够去读取 mlocate.db 啦!非常有趣吧!
3、SBIT
Sticky Bit, 简称SBIT, 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是:
- 当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;
- 当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件
换句话说:当甲这个用户于 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示『甲用户对该目录内任何人建立的目录或文件均可进行 "删除/更名/搬移" 等动作。』 不过,如果将 A 目录加上了 SBIT 的权限项目时,则甲只能够针对自己建立的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。
举个例子,/tmp的权限是『drwxrwxrwt』,在这样的权限内容下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录建立者与 root 能够删除自己的目录或文件。这个特性也是挺重要的啊!做个简单测试:
- 以 root 登入系统,并且进入 /tmp 当中;
- touch test,并且更改 test 权限成为 777 ;
- 以一般使用者登入,并进入 /tmp;
- 尝试删除 test 这个文件!
- 会发现报错
4、SUID/SGID/SBIT 权限设定
SUID/SGID/SBIT的权限分别为:
- 4为 SUID
- 2为 SGID
- 1为 SBIT
uasage:
最后一个操作执行后特殊权限都是大写,是因为user, group 以及others 都没有 x 这个可执行的标志( 因为 666 嘛 ),所以,这个 S, T 代表的就是『空的』啦!除了用数字更改权限,还可以用符号法修改。