linux有一个强大得不要不要得特点就是文件权限优势,正常情况下,我们接触到的都是r(read),w(write),x(excute)权限,很好理解,不在多作解释,这里主要解释下linux文件得特殊权限SUID,SGID,SBIT,这三者都是作用在文件的执行权限上面。
一、SUID
可以理解为set UID,作用在所有者文件的x权限上面,简称SUID的特殊权限,该特殊权限又如下几点限制:
1. 该权限作用于二进制程序文件(binary)
2. 执行者对于该文件具有可执行权限(x)
3. 该特殊权限仅仅在运行时起作用(run-time)
4. 执行者在执行期间拥有该文件的所有者的权限
举个例子,我们知道,linux中账户的密码都保存在/etc/shadow这个文件夹中,用如下命令查看该文件的权限,可知其权限为 ———- 1 root root 意思是只有root用户可以强制写入
ls -l /etc/shadow
---------- 1 root root 892 Sep 17 21:05 /etc/shadow
现在使用passwd修改密码
[ivan@VM_122_110_centos ~]$ passwd
Changing password for user ivan.
Changing password for ivan.
(current) UNIX password:
确实是可以修改密码的。
这里可能就有一个疑问了,/etc/shadow是禁止一般用户写入的,可是我们明明可以通过自己的账户修改密码,这不是矛盾吗?
其实原因很简单,查看/usr/bin/passwd权限即可知道
[root@VM_122_110_centos /]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
可以看到passwd文件咋所有者执行权限为s,其他用户拥有该文件的x权限,在我们执行passwd命令时,我们的用户(我的用户名是上面的ivan)在run-time中“暂时”获得root权限,然后执行写入操作,从而更改密码。
二、SGID
SGID是Set GID的缩写,作用在用户组的执行权限之上,它既可以针对文件也可以针对目录。针对文件时,执行者获得用户组的执行权限。当作用于目录时,这里就有一个很牛逼的应用了,那就是文件共享。打个比方,一个工作组里面有5个用户,每个用户都有权限查看该用户组的一些文件,每个人都可以修改更新文件内容,这就需要组权限了。
1. 将该文件的权限设置为SUID
2. 用户组用户具有r和x权限时才能进入该目录
3. 某个用户进入组文件夹时,若该用户具有w权限,则其在该文件夹下面创建的文件属于组文件
三、SBIT
该权限仅仅对文件目录有效,不能作用于二进制文件,SBIT对于目录的作用是:
1. 用户对于此目录拥有w,x权限
2. 用户在该目录创建文件或目录时,仅仅自己和root可以删除文件
举个例子
1. 以root用户登陆系统,进入/tmp文件夹
2. touch test创建test文件,将其权限改为777
3. 以一般用户进入/tmp,尝试删除该文件夹
SUID,SGID,SBIT权限值设置
SUID:4
SGID:2
SBIT:1