第五章 文件权限与归属,特殊权限

  • 内容
  • 评论
  • 相关

文件权限与归属

Linux中一切都是文件,但是每个文件类型不同,有不同的字符来区分。

 -:普通文件。

d:目录文件。

l:链接文件。

b:块设备文件。

c:字符设备文件。

p:管道文件。

下面是 个普通文件,所有者读写权限,所属组读权限,其他用户读权限

文件的特殊权限

SUID,SGID,SBIT特殊权限,提供rwx无法满足的灵活需求,是一种对文件权限的特殊功能,可以与一般权限同时使用。

SID

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

列如,所有用户都可以执行passwd命令来修改自己的密码,而密码保存在/etc/shadow文件中,这个文件的默认权限是000,也就是 除了root,其他用户没查看或编辑 的权限。但是用来passwd命令时如果加上SUID特殊权限,就可以让普通用户临时获得程序所有者身份,把变更的密码也如shadows中。

passwd属性是rws,x改成s就意味着文件被赋予SUID权限。如果原本的文件权限是rw,加上了x执行权限,就会变成大写的S。

SGID

SGID主要实现如下两种功能:

  • 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
  • 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

SGID的第一种功能是参考SUID而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。

每个文件都有其归属的所有者和所属组,当创建或传送一个文件后,这个文件就会自动归属于执行这个操作的用户(即该用户是文件的所有者)。如果现在需要在一个部门内设置共享目录,让部门内的所有人员都能够读取目录中的内容,那么就可以创建部门共享目录后,在该目录上设置SGID特殊权限位。这样,部门内的任何人员在里面创建的任何文件都会归属于该目录的所属组,而不再是自己的基本用户组。此时,我们用到的就是SGID的第二个功能,即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

在使用上述命令设置好目录的777权限(确保普通用户可以向其中写入文件),并为该目录设置了SGID特殊权限位后,就可以切换至一个普通用户,然后尝试在该目录中创建文件,并查看新创建的文件是否会继承新创建的文件所在的目录的所属组名称:

chmod和chown

chmod可以设置文件或母路的权限。chmod [参数]权限 文件或目录

我们来给文件rwxrw—权限,也就是760

除了设置文件或目录权限外,还可以设置文件或目录的所有者和所属组。命令chown。 chown[参数] 所有者:所属组 文件或目录名称。

chmod和chown 都可以在操作时加上大写的-R 表示 递归操作。

SBIT

我们使用了共享文件后,大家把文件上传上去,有些人喜欢去删除别人的文件,这时要设置SBIT(Sticky Bit)特殊权限位了(也可以称之为特殊权限位之粘滞位)。这样用户只能删除自己 创建的文件,不能删除其他人的文件。

RHEL 7系统中的/tmp作为一个共享文件夹,默认已经设置了SBIT权限。

当目录被设置SBIT特殊权限位后,文件的其他人权限部分的x执行权限就会被替换成t或者T,原本有x执行权限则会写成t,原本没有x执行权限则会被写成T。

文件能否被删除并不取决与自身的权限,而是看其所在目录是否有写入权限。我们切换到另一个普通用户,然后尝试删除其他人创建的文件,即便读写执行权限都有,但是由于SBIT的限制,依然无法删除文件

要是也想对其他目录来设置SBIT特殊权限位,用chmod命令就可以了。对应的参数o+t代表设置SBIT粘滞位权限: