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: 硬链接
做了硬链接后,目录总大小没有发生变化。硬链接文件不会复制数据块,额外占用磁盘空间。
不允许目录做硬链接
删除源文件,不能读取软连接文件。
目录可以做软链接