1、为什么要使用高级权限?
通俗来说,我不给普通用户root账号和密码,但是我要普通用户可以执行root用户的文件或者脚本。比如:我管理着几个大型的数据库系 统,而对它们进行备份需要有系统管理权限。我写了几个脚本,并设置了它们的 g u i d,这样 我指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份 登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其 他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。
suid 4 u+s
sgid 2 g+s
sbit 1 o+t
2、SUID(s)
即Set User ID,当s这个标志出现在文件所有者的x权限上时,“-rwsr--r-- 1 root root 32 3月 5 14:55 t.sh”,此时就称之为SUID。
注意:
- SUID权限仅对二进制程序(binary program)有效
- 执行者对于该程序需要具有x的可执行权限,没有x权限,一切都将毫无意义
- 本权限仅在执行该程序的过程中有效(run-time)
- 执行者将具有该程序拥有者(owner)的权限
这个SUID只能运行在二进制的程序上(系统中的一些命令),不能用在脚本上(script),因为脚本还是把很多的程序集合到一起来执行,而不是脚本自身在执行。同样,这个SUID也不能放到目录上,放上也是无效的。
案例:
(1)root用户下新建一个profile文件,将其权限设置为640
(2)登陆alex用户,验证是否有权限打开profile文件
(3)现在的需求是,不把root账号给alex用户,同样让其可以打开该文件(要有读的权限)。使用SUID实现,chmod 4744 profile,但是前提是要给读的权限,否则无效。此时可以打开profile文件,如果想要让alex具有写等权限,只需要添加w即可。
3、SGID(s)
即Set Group ID,把这个s放到文件的所属用户组x位置上的话,就是SGID。也就是让属组内的用户临时获取root权限。
注意:
1、SGID对二进制程序有用;
2、程序执行者对于该程序来说,需具备x的权限;
3、SGID主要用在目录上;
SGID和SUID一样,只是SGID是获得该程序所属用户组的权限。如果用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同。
4、SBIT(t)
SBIT(Sticky Bit)目前只针对目录有效,用户只能删除自己的文件。当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
注意:
某些情况下会出现大写的S和T
如果你本来是小的s和t,但是此时去掉了文件或者目录的执行权限,那么
这时候的小s和小t就变成了大S和大T了,因为如果没有了x权限,根据我们上面讲的内容,这个特 殊的权限就相当于一个空的权限,没有意义。
也就是说,如果你看到特殊权限位置上变成了大写的了,那么,就说明,这里的权限已经不起作用了。