标签:项目 特性 inux 强制 有用 bit file 所有者 写入
文件除了常规的权限r, w, x 还有一些特殊的权限,s与t权限,具体的用处如下
1 SetUID
当s 这个标志出现在文件所有者的x权限上时, 例如/usr/bin/passwd,
[root@oracledb ~]# ll -d /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
这个文件的权限状态为 -rwsr-xr-x 此时被称作Set UID 简称SUID 的特殊权限。 那么SUID的权限对于一个文件的特殊功能是什么呢?
SUID 仅对二进制程序有效;
执行者对于该程序需要具有x的可执行权限;
本权限仅在执行程序过程中有效;
执行者将具有该程序所有者的权限;
举个例子,我们linux系统中, 所有账号的密码都记录在/etc/shadow 这个文件中,这个文件的权限为---------- 1 root root 1401 Jun 27 16:17 /etc/shadow, 意思是这个文件仅有root可以强制写入。 既然这个文件只有root 可以修改, 那么其他账户能否自己修改自己的密码呢? 显然是可以的,结果不是很冲突麽!
表面上 /etc/shadow 明明只能root强制修改,一般用户不能访问,为什么一般用户还能够修改这个文件内的密码呢?这就是SUID的功能,
如果普通用户执行cat命令去读取/etc/shadow时,能够读取吗?显然不能,因为cat 不具有SUID权限。
此外SUID仅可用在二进制程序上,不能够用在shell script上。
2 Set GID
当s 标志在文件所有者的x 项目为SUID, 那 s 在用户的 x 时称为Set GID即 SGID. 举个例子来说明
[root@oracledb ~]# ls -l /usr/bin/locate
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate
/usr/bin/locate 这个程序可以去查询 /var/lib/mlocate/mlocate.db 这个文件的内容,因为他们属于同一个用户组,如果我们使用普通账号执行locate时, 那这个账号就可以取得slocate 用户组的支持,因此它就可以访问mlocate.db的内容
[root@oracledb ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate
-rw-r----- 1 root slocate 4028188 Jun 27 03:13 /var/lib/mlocate/mlocate.db
与SUID不同的是,SGID可以针对文件或者目录来设置。如果是针对文件,SGID与SUID类似
除了二进制程序之外,SGID能够用在目录上, 当一个目录设置了SGID之后具有如下功能:
3 Sticky Bit
Sticky Bit 仅针对目录有效, 它对于目录的作用是:
举例来说, /tmp 本身的权利是 drwxrwxrwt 这样的权限下任何人都可以在 /tmp 内添加、修改文件,但仅有该文件/目录创建者与root 能够删除自己的目录或者文件,这个特性非常重要。
4 SUID/SGUID/SBIT 权限设置
如何配置文件或者目录使其具有SUID与SGID的权限呢,我们在之前的配置r, w, x的数字前面加上一个数字就可以配置权限了
举例,如果将一个文件权限改为 "-rwsr-xr-r" 时,由于s 在用户权限中,所以是SUID,在原来的基础755之前加上4即可, chmod 4755 filename
标签:项目 特性 inux 强制 有用 bit file 所有者 写入
原文地址:http://www.cnblogs.com/Latiny/p/7086529.html