在上文基本权限中讲述了rwx的作用。但是或许有人在权限蓝栏看到了一个s符号,这个就是特殊权限。
文件的特殊权限包括:SUID、SGID、SBIT。
1.SUID,借出程序所有者的权限
[email protected]:/home$ ll /usr/bin/passwd -rwsr-xr-x 1 root root 54256 3月 29 2016 /usr/bin/passwd* #拥有SUID权限,第一组rwx中的x改为s
passwd命令为修改用户的密码,根据权限可以得知同一用户组或其他人都可以调用改命令。但是passwd命令需要修改/etc/shadow文件,此文件存储账号的密码。
[email protected]:/home$ ll /etc/shadow -rw-r----- 1 root shadow 1517 11月 26 20:08 /etc/shadow [email protected]:/home$
可以看到,这个被passwd所修改的文件,权限仅仅允许root用户修改。那么问题来了~
其他用户虽然可以调用passwd命令,但是不能修改/etc/shadow这个文件啊,那么密码怎么存储?
这就是SUID的作用,你不是没有权利修改/etc/shadow文件吗?我(程序所有者)给你啊。也就是说,在这个时候,其他用户调用passwd命令已经暂时获得root用户的权限,这时去修改/etc/shadow是利用root用户的权限去修改。
- SUID权限仅限二进制程序有效
- 执行者需要有x权限
- 执行者获得该程序所有者的权限
- 仅在本程序执行中拥有改权限
简单来说,这个s权限,会将程序所有者拥有的权限暂时借给其他人使用,前提是其他人拥有这个程序的x权限。
2. SGID,借出用户组的权限
[email protected]:/home$ ll drwxr-xr-x 23 hang hang 4096 11月 27 18:47 hang/ drwxr-xr-x 2 zncu zncu 4096 11月 25 20:47 zncu/ drwxrws--- 2 root znha 4096 11月 25 20:48 znha/
简单来说,SGID和SUID一个是把用户组的权限暂时借出一个是把所有者的权限暂时借出。
- SGID对二进制程序依然有效
- 程序执行者需要具有x权限
- 执行者在执行过程中暂时获得用户组的权限
但是,SGID也可以针对目录或者文件使用,上面的例子就是对目录的使用。
那么它有什么作用那?
- 用户(hang)对此目录(znha)具有r与x权限时,该用户可以进入此目录。
- 用户在此目录下的有效用户组将变成该目录的用户组。
- 若用户对此目录具有w权限时,那么用户创建的文件的用户组将为此目录的用户组。
[email protected]:/home$ groups hang #hang用户在znha用户组里,所以具有进入znha目录的权限 hang : hang znha
在此目录创建文件,观察该文件所在用户组
[email protected]:/home/znha$ touch test [email protected]:/home/znha$ ll -rw-rw-r-- 1 hang znha 0 11月 27 20:54 test #hang用户在具有SGID的目录里创建文件,该文件的用户组为znha(该目录所在用户组)[email protected]:~$ cd hang/[email protected]:~/hang$ touch test #在其他目录里创建文件,文件的用户组为hang(用户的主用户组) [email protected]:~/hang$ ll-rw-rw-r-- 1 hang hang 0 11月 27 20:56 test
可以看到,该文件的用户组问znha,而不是hang。这种特性可以使在同一用户组的多个用户拥有共同的目录,在创建文件时该用户组的所有用户都有相同的权利操作文件。
3. SBIT,对目录有效
- 当用户对于此目录具有w、x权限时,即具有写入的权限
- 用户在此目录创建文件时,只有自己和root才有权利删除(以及其他w相关操作)该文件
- 用户不允许对其他用户的文件操作
drwxrwxrwt 15 root root 4096 11月 27 21:06 tmp/ #具有SBIT权限,最后一个字母t标示。
特殊权限的设置:
SUID:4
SGID:2
SBIT:1
chmod 4777 test ,添加SUID权限。
http://www.cnblogs.com/yuhanghzsd/p/6107362.html