一般来讲unix/linux文件的权限是三个用户(owner,group,others),都是rwx,这是大家比较熟悉的,其实还有三个特殊的权限,SUID,SGID,SBIT三个,先看一下,
怎么权限位中会出现t和s呢?详解如下:
一 SetUID:当s这个标志出现在文件所有者的x权限上时,如上图/usr/bin/passwd 的权限状态”rwsr-xr-x”,此时就称为Set UID,简称SUID的特殊权限。
SUID的限制与功能:
- SUID权限仅对二进制程序有效;
- 执行者对于该程序需要具有X的可执行权限;
- 本权限仅在执行程序的过程中有效;
- 执行者将具有该程序的所有者权限;
这么说可能不会明白,但是举个例子就容易明白了,如果需要修改自己用户的密码怎么办(我自己的用户名为kinglong),直接passwd就可以啊。但是与密码有关的文件/etc/shadow文件只有root用户才有写的权限,怎么回事?
1 kinglong对于/usr/bin/passwd这个程序来说是具有x权限的(作为others),表示kinglong可以执行/usr/bin/passwd;
2 passwd的拥有者是root这个帐号;
3 kinglong执行passwd的过程中,会暂时获得root的权限;
4 /etc/shadow可以被kinglong这个一般用户所执行的passwd所修改;
二 Set GID
当s标志位在用户组的x时则称为Set GID, SGID。
SGID有如下的功能:
1 SGID对二进制程序有作用;
2 程序执行者对于该程序来说,需具备X的权限;
3 执行者在执行的过程中将会获得该程序用户组的支持;
以locate命令来举例说明,/usr/bin/locate(即locate)命令会去查询/var/lib/mlocate/mlocate.db这个 文件,但是kinglong这个用户对于mlocate.db并没有读的权限,如下图:
没有mlocate.db的读权限,但能去读mlocate.db文件,怎么回事呢?这就是SGID的功能,普通用户对locate具有组x权限,那么在执行locate过程中,将获得组的用户权限的支持,如上图,那么locate会获得root用户组的权限,当然可以读mlocate.db文件了。
除了二进制文件外,SGID对于目录也具有作用,
1 用户若对于次目录具有r与x的权限时,该用户能够进入此目录;
2 用户在次目录下的有效用户组(effective group)将会变成该目录的用户组;
3 若用户在次目录下具有w的权限,则用户所创建的新文件的用户组与此目录的用户组相同;
三 最后一个Sticky Bit
这个Sticky Bit(有时也称黏住位)目前只针对目录有效,对于文件没有效果。对于目录的作用是:
1 当用户对于次目录具有w,x权限,即具有写入的权限时;
2 当用户在该目录下创建文件或目录时,仅自己与root用户才具有删除的权利;
举例来说吧:当甲这个用户于A目录是具有用户组或其他人的身份,并且拥有该目录w的权限,这表示甲用户对于该目录内的文件或目录具有删除, 重命名, 移动的权限。不过如果将目录A加上了SBIT的权限项目时,则甲只能够针对自己创建的目录或文件进行删除,重命名,移动等操作,而无法删除他人的文件。
例如/tmp目录:
/tmp目录是“drwxrwxrwt”,在这样的权限下,任何人都能够创建,修改文件,但仅该文件/目录的拥有者或root能够删除自己的目录或文件。
SUID/SGID/SBIT权限设置
一般文件的权限是:rwx分别对应数字4:2:1
其实这三个也一样:SUID:4 SGID:2 SBIT: 1
在temp下练习一下