一、特殊权限set uid、set gid、stick bit

1、set uid权限

该权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限。典型的文件是 /usr/bin/passwd.。如果一般用户执行该文件, 则在执行过程中, 该文件可以临时获得root权限, 从而可以更改用户的密码。
特殊权限set uid、set gid、stick bit和软链接与硬链接

我们可以看到passwd文件权限中有s,所以普通用户就能够自行修改自己的密码了。
如果一个文件需要配置set uid特殊权限,那么如何设置呢,方法其实和chmod用法类似:

chmod u+s test //为test文件加上setuid标志. (setuid 只对文件有效)

不要特殊权限的话就使用u-s即可。
例如:普通用户无法查看使用ls查看/root,那么我们设置ls命令set uid权限,普通用户就可以查看了。
普通用户没有权限:
特殊权限set uid、set gid、stick bit和软链接与硬链接

设置好set uid权限之后:
特殊权限set uid、set gid、stick bit和软链接与硬链接_第1张图片
有时候,会发现set uid上的权限为大写S,而不是小写s,这是因为该文件没有x权限所致,不管是大写S还是小写s,都表示存在set uid权限。

2、set gid权限

当作用在文件上时,作用和suid类似,让执行该文件的用户临时拥有属组的权限,目录被设置该位后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。格式为:

chmod g+s test //test目录设置set gid权限

删除set gid权限用g-s即可。

3、sticky bit权限

该位可以理解为防删除位。一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位。设置该位后, 就算用户对目录具有写权限, 也不能删除该文件。
比如/tmp文件,其他用户权限有个t,这就是sticky bit权限:
特殊权限set uid、set gid、stick bit和软链接与硬链接
做个简单的示例:
1、普通用户无法删除文件。
特殊权限set uid、set gid、stick bit和软链接与硬链接_第2张图片
2、如果该目录有写权限,是可以往里面添加内容的:
特殊权限set uid、set gid、stick bit和软链接与硬链接_第3张图片
设置该权限的格式为:

chmod o+t test //为test目录加上sticky标志 (sticky只对目录有效)


二、软链接和硬链接

1、硬链接:当系统要读取一个文件时,就会先去读inode table,然后再去根据inode中的信息到块区域去将数据取出来。而hard link 是直接再建立一个inode链接到文件放置的块区域。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode, hard link 有两个限制:(1)不能跨文件系统,因为不同的文件系统有不同的inode table; (2) 不能链接目录。
2、软链接: 跟软链接不同,这个是建立一个独立的文件,而这个文件的作用是当读取这个链接文件时,它会把读取的行为转发到该文件所link的文件上。这样讲,也许比较绕口,那么就来举一个例子:现在有文件a,我们做了一个软链接文件b(只是一个链接文件,非常小),b指向了文件a。当读取b时,那么b就会把读取的动作转发到a上,这样就读取到了文件a。所以,当你删除文件a时,文件b并不会被删除,但是再读取b时,会提示无法打开文件。而,当你删除b时,a是不会有任何影响的。

建立软链接和硬链接使用ln命令,格式为:

ln [-s] [来源文件] [目的文件] //ln 常用的选项就一个 ‘-s’, 如果不加就是建立硬链接,加上就建立软链接。

建立硬链接:
特殊权限set uid、set gid、stick bit和软链接与硬链接_第4张图片
删除源文件1.txt之后,文件大小依旧不变。说明硬链接文件并不会复制数据块,占用空间。
特殊权限set uid、set gid、stick bit和软链接与硬链接_第5张图片

建立软链接:
特殊权限set uid、set gid、stick bit和软链接与硬链接_第6张图片
如果删除源文件,则不能读取软链接文件:
特殊权限set uid、set gid、stick bit和软链接与硬链接_第7张图片