特殊权限set_uid 、set_gid 、stick_bit 、 软链接文件 、 硬连接文件

1.set uid、set gid和sticky bit

set uid :该权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限。比如,passwd这个命令就具有该权限。当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码。

set gid:该权限可以作用在文件上(二进制可执行文件),也可以作用在目录上。当作用在文件上时,其功能和set uid一样,它会使文件在执行阶段具有文件所属组的权限。目录被设置这个权限后,任何用户在目录下创建的文件都具有和改目录所属的组相同的组。

sticky bit:可以理解为防删除位。文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能删除,同时也不能添加新的文件。如果希望用户能添加文件但不能删除该目录下其他用户的文件,则可以对父目录增加该权限。设置该权限后,就算用户对目录具有写权限,也不能删除其他用户的文件。

例如,passwd命令设置了set uid权限,而/tmp/目录则设置了sticky bit权限。下面我们来看看它们的权限,示例命令如下:

可以发现,passwd命令显示的是rws而非传统的rwx,用数字表示为4755.、/tmp/显示的rwt而非rwx,用数字表示为1777。那么,这个4和1是如何计算出来的呢?当有特殊权限时,第一位数字可以是0、1(--t)、2(-s-)、3(-st)、4(s--)、5(s-t)、6(ss-)或7(sst)。再回过头来看passwd,它是s--,所以是4;而/tmp/是--t,所以是1.

配置这些特殊权限的方法和之前一样。比如,我想给一个文件增加set uid权限,那么命令为chmod u+s filename,而去掉这个权限的命令为chmod u-s filename。同理,想设置set gid权限的命令为chmod g+s dirname,设置sticky bit权限的命令为chmod 0+t dirname。

set_uid上的权限为大写的S,而不是小写s,比如rwS,这是因为该文件没有x权限所致,不管是大写的S还是小写的s,都表示它存在set_uid或者set_gid权限,同理sticky bit也一样。

2.硬链接

当系统要读取一个文件时,会先读inode 信息,然后再根据inode中的信息到块区域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块区域,即进行硬链接时改问件内容没有任何变化,只是增加了一个指向文件的inode,并不会额外占用磁盘空间。硬链接有两个限制:(1)不能跨文件系统,因为不同的文件系统有不同的inode;(2)不能链接目录。

软连接:是建立一个独立的文件,当读取这个链接文件时,它会把读取行为转发到该文件所链接的文件上。

ln:[-s] [来源文件][目的文件] 软连接

ln: 硬链接

做了硬链接后,目录总大小没有发生变化。硬链接文件不会复制数据块,额外占用磁盘空间。

不允许目录做硬链接

删除源文件,不能读取软连接文件。

目录可以做软链接

猜你喜欢

转载自my.oschina.net/u/3866192/blog/1825703