权限管理--文件特殊权限
在多用户多任务的Linux系统里,每个进程的运行都与运行的用户和组相关联。除了进 程识别号(PID)以外,在进程控制块(PCB)中每个进程还有另外4个用户和用户组相关的 识别号。他们分别是:实际用户识别号(real user ID,RUID)、实际组识别号(real group ID,RGID)、有效用户识别号(effect user ID,EUID)、有效组识别号(effect group ID,EGID)。 EUID和EGID的作用在于确定一个进程对其访问的文件的权限和优先权。一般情况下, EUID、EGID与RUID和RGID相同。设置了SUID和SGID情况除外。
1.SUID权限:
当一个具有执行权限的文件(没有执行权限不成功,权限位会变成大写,代表权限未生效)设置SUID权限后,用户执行这个文件时将以文件所有者的身份执行。
特点:①只有可以执行的二进制程序才能设定SUID权限 ②命令执行者要对该程序拥有x(执行)权
③命令执行者在执行该程序时获得该程序文件属主的身份
④SUID权限只在该程序执行过程中有效,就是说身份改变只在执行过程中有效。
可执行文件/usr/bin/passwd所属用户是root(UID为0),此文件被设置了SUID权限。 当一个UID为1000、GID为1000的用户执行此命令时,产生的进程RUID和RGID分别是1000和 1000,EUID是0、EGID是1000。
例:经过前边对passwd命令的学习,每个用户都可以使用passwd(该命令的绝对路径 是/usr/bin/passwd)来修改自己的密码。系统用来记录用户名和密码的文件分别为/etc/passwd和/etc/shadow,命令执行最终的结果是修改/etc/shadow中对应的密码。对于这个文件,只有root用户有读权限,而普通用户在修改密码时最终也会修改这个文件。
接下来查看一下各个配置文件的权限:
查看/usr/bin/passwd权限:
例:
首先登陆普通用户u1,进行修改密码:
#修改到此步骤暂停,打开另一个终端执行pstree -Au 此命令会显示执行进程的用户。
#我们会看到以上信息,说明了:u1用户登陆,取得了一个bash的shell类型。然后 执行passwd命令。在这个命令执行过程中,执行命令的身份被切换成了root用户。 在用户权限上有一个s,这就是说明该文件设置了SUID权限。也就是说在普通用户在执 行passwd命令的时候是使用root的身份。
2.SGID权限:
⑴针对文件的作用:
只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行在执行程序的时候,组身份升级为该程序文件的属组
SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
⑵针对目录的作用:
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
SGID权限的功能和SUID类似。如果某个二进制文件的用户组权限设置了SGID权限。则在执行该文件时,用户将获得该文件所属组的权限。 SGID可以针对文件生效,也可以针对目录生效。
例:我们在使用locate命令查找文件的时候,实际上是查询了/var/lib/mlocate/mlocate.db数据库。作为普通用户,能够正常使用locate命令的原因,就在于locate命令本身具有SGID权限。
如果系统上不存在/var/lib/mlocate/mlocate.db这个文件,那么就不能执行locate这个命令。需要使用updatedb命令生成molcate.db文件后才能使用localte命令。(root才能用,普通用户无法执行)
3.Sticky BIT权限:
sticky权限只能用于设置在目录上,设置了这种权限的目录,任何用户都可以在该目录 中创建或修改文件,但只有该文件的创建者、目录的拥有者和root可以删除自己的文件。在 RedHat或CentOS系统中/tmp目录就拥有sticky权限。
SUID,SGID,SBIT设置
SUID:只能设置到可执行文件{x}
SGID:既可以设置到可执行文件{x};也可以设置到目录上
SBIT:只能设置到目录上
chmod [u g o] [+ -] s filename{file/dir}
SUID:4 chmod 4755 filename
SGID:2 chmod 2755 filename{file/dir}
SBIT:1 chmod 1755 dirname
chmod 0755 filenam
0755有时不生效
#当使用0755取消特殊权限不生效时,可以使用00755
chmod 00755 filename