Linux中文档与目录的特殊权限

Linux中,文件或目录除了rwx及隐藏权限外,还有一些特殊的权限,这些权限包括 SUID/SGID/SBIT,系统中就直接存在这样的例子:

clip_image002

上例中,/tmp目录本身的权限中可以看到,不仅仅是rwx权限,而是有了t权限;而/usr/bin/passwd文件,也不仅仅有rwx权限,而是有了s权限。s、t就代表了不同的特殊权限。下面一一介绍这三种特殊权限。

SUID

SUID即Set UID的简写。当s标志出现在文件的owner权限组合中的x位时,比如上图中passwd文件的权限(-rwsr-xr-x),此时就被称为SUID的特殊权限。那该权限是什么意思呢?

举例来说,Linux为了提高本地用户账号信息的安全性,特别指定了/etc/shadow以加密密码的方式来存储用户的账户信息,同时这个文件的默认权限是-r--------,限定只有root用户才能“强制”储存,其他用户没有任何权限。可是你会发现,普通用户也是可以修改我们自己的用户密码的,那普通用户哪来的权限?这就是SUID特殊权限的作用。

SUID表示当请求执行包含SUID特殊权限的程序时,能够暂时拥有该程序所有者(对程序)的存取权限。假设普通用户A通过passwd命令更新自己的密码,而/usr/bin/passwd的所有者是root (root,root),也就是说,当A请求执行passwd命令时,实际上是暂时获得root(对/usr/bin/passwd)的执行权限,并进一步更新/etc/shadow的内容。

但如果该用户A使用cat去读取/etc/shadow时,就会被拒绝了,因为cat没有SUID的特殊权限,所以,A执行cat /etc/shadow时,是不能执行的。

需要注意的是,Linux规定SUID仅对系统中的二进制可执行文件设置有效,而且不可对Shell Script施加设置,毕竟Shell 脚本只是对二进制可执行文件的调度组合,最终也是要遵从binary file的权限设置。

SGID

相对于SUID,当所有者所在的用户组(group)的权限组合中可执行位(x)被s所取代时(例如---rws---),便构成SGID(即Set GID)的权限设置。SGID可以针对二进制文件或目录进行设置:

a.二进制可执行文件:则当请求执行该文件(程序)时,请求执行者所在的用户组 (即effective group)将暂时获得该程序(binary file)所属的用户组ID(group ID)的存取权限。

b.目录:假设目录A,此时在A目录下创建的文件或子目录所属的用户组ID,将自动被赋予A目录的组ID

SGID主要用于多人组成的项目开发上,一般比较少用到。

SBIT

我们认为,当文件系统“其他(others)”的权限组合中可执行位(x)被t所取代时(例如------rwt),便构成SBIT(Sticky Bit)的权限设置。SBIT顾名思义可以起到限制访问的作用,是容易理解而好用的设置,它只对目录有效。

当对一个目录A施加了SBIT设定以后,并且使用者对A目录有wx权限时,则使用者在A目录下所创建的个人文档(含目录)只有使用者本身或root可以执行删除、更名、移动等操作(是否可读依实际权限r而定),而不可修改其他用户的文件或目录。

最常见的就是在/tmp目录下了,各用户都可以在此目录下创建文件或子目录,但只能修改自己的文件或目录,而不能更改其它用户的。如:

clip_image004

上例中,root用户创建了新文件testroot,并赋予所有权限。用户zhang对/tmp也有r和w的权限,但zhang却没有权限删除root创建的testroot文件,就是因为/tmp的t权限的效果。

注意:SBIT一般仅针对目录施加有意义。

设置权限

特殊权限的设置也是使用数字的方式。以下是SUID/SGID/SBIT约定对应的八进制数值:

SUID为4

SGID为2

SBIT为1

设置时使用chmod命令,同时把表示特殊权限的数字放在其他三位数字权限的前面,如:

clip_image006

上图设置了SUID。

clip_image007

上图设置了SGID。

clip_image008

上图设置了SBIT。

需要注意的是,SUID只针对二进制文件设置,而SBIT只针对目录设置有意义,上例中并没有特殊强调。

有一种特殊情况,比如:

clip_image009

上图中,设置apple的普通权限为666,即所有人都没有x权限,此时,却设置了所有的特殊权限,那么,这样的特殊权限为“空权限”,表现样式为S和T都为大写。

你可能感兴趣的:(linux,style,target,title,blank)