特殊权限/链接文件

匆匆过客 提交于 2021-01-01 03:01:04

特殊权限set_uid、set_gid、stick_bit

到目前为止我们所了解到的权限位只有三位为一段,其实还有一位权限,那就是set_uid、set_gid、stick_bit。

* set_uid:该权限针对二进制可执行文件,,使文件在执行阶段具有文件所有者的权限。比如passwd这个命令就具有该权限。当普通用户执行passwd命令时,可以临时得获得root权限,从而可以改密码。
* set_gid:该权限可以作用在文件上(二进制可执行文件),也可以作用在目录上。当作用在文件上时,其功能和set_uid一样,它会使文件在执行阶段具有文件所属组的权限。目录被设置这个权限后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
* stick_bit:可以理解为防删除位。文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能删除,同时也不能添加新的文件,如果希望用户能够添加文件但不能删除该目录下其他用的文件,则可以对父目录增加该权限。设置该权限后,就算用户对目录具有写权限,也不能删除其他用户的文件。

下面我们看下示例,比如passwd命令就设置了set_uid权限,而/tmp/目录则设置了stick_bit权限

[root@ask-01 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[root@ask-01 ~]# ls -ld /tmp/
drwxrwxrwt. 10 root root 4096 12月 22 01:48 /tmp/


这里看到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。

配置这些特殊权限的方法和之前一样,我们想给文增加set_uid,那么命令格式为:chmod u+s filename,而去掉这个权限的命令则为chmod u+s filename,同理set_gid就是chmod g+s filename,stick_bit是:chmod o+t dirname。
有时候你会发现set_uid权限为大写S,而不是小写s,比如rwS,这时因为该文件没有x权限所致,不管是大写的S还是小写的s,都表示它存在set_uid或者set_gid权限,同理sticky bit也已一样。

链接文件

链接文件分为两种,一种是软链接,一种是硬链接,现在我们就来认识一下这两种链接。

* 软连接:软连接是一个独立存在的文件,它相当于windows上的快捷方式,,当读取这个链接文件时,它会把读取的行为转发到该文件所链接的文件上。例如,现在有一个文件a,我们做了一个软连接文件b(一个很小的链接文件),b指向了a,当读取b时,b就会把读取的动作转发到a上,这样就读取了a文件。当我们删除文件a时,文件b不会被删除,但是再次打开b文件的时候,会提示无法打开文件。然而在我们删除b文件的时候,a文件是不会受到影响。
* 硬链接:当系统要读取一个文件时,会先读inode的信息,然后根据inode中的信息到块区域将数据取出,而硬链接是直接再建立一个inode链接到文件放置的区域,既进行硬链接时该文件内容没有任何变化,只有增加了一个指向这个文件的inode,并不会额外占用磁盘空间,硬链接有两个限制:(1)不能跨文件系统,因为不用的文件系统有不同的inode table;(2)不能链接目录。

这样看来,似乎硬链接更为安全,因为删除任何一个硬链接文件,还会有其他文件指向那个inode,既然inode存在,那文件的数据块也就存在,可是因为硬链接限制太多了,所以用途上比较受限,而软连接的使用方向较广。现在我们可以学习怎么创建软硬链接,这里我们需要使用的命令为:ln(link)

ln命令的格式为:ln [-s][来源文件][目的文件],该命令常用的参数是-s,如果不加-s选项就是建立硬链接,加-s就是软连接。示例

[root@ask-01 Ask]# cp /etc/passwd /home/Ask/asklinux1/asklinux2/
[root@ask-01 asklinux2]# du -sk //du ,命令用来计算文件或目录的大小,-k表示以KB为单位,这里的4,就是4KB
4 .
[root@ask-01 asklinux2]# ln passwd passwd-herd
[root@ask-01 asklinux2]# ll
总用量 8
-rw-r--r--. 2 root root 1088 12月 22 03:02 passwd
-rw-r--r--. 2 root root 1088 12月 22 03:02 passwd-herd
[root@ask-01 asklinux2]# du -sk
4 .








ll命令等于ls -l。一开始目录下面只有一个passwd文件,目录总大小为4KB,做了硬链接后,虽然两个文件的大小都为1088B,但目录的总大小并没有变化。我们不妨先删除源文件,然后比较一下。

[root@ask-01 asklinux2]# rm -f passwd
[root@ask-01 asklinux2]# ll
总用量 4
-rw-r--r--. 1 root root 1088 12月 22 03:02 passwd-herd
[root@ask-01 asklinux2]# !du
du -sk
4 .
上例中,删除源文件passwd后,文件大小依旧不变。这说明硬链接文件并不会复制数据块,额外占用磁盘空间。接下来看硬链接的另外一个限制——不允许目录做硬链接。
[root@ask-01 asklinux1]# mkdir asklinux3
[root@ask-01 asklinux1]# ln asklinux3 asklinux4
ln: "asklinux3": 不允许将硬链接指向目录









接下来我们看下软链接的一些特性。

[root@ask-01 asklinux2]# cp /etc/passwd /home/Ask/asklinux1/asklinux2/
[root@ask-01 asklinux2]# ls
passwd
[root@ask-01 asklinux2]# ln -s passwd passwd-soft
[root@ask-01 asklinux2]# ll
总用量 4
-rw-r--r--. 1 root root 1088 12月 22 03:18 passwd
lrwxrwxrwx. 1 root root 6 12月 22 03:19 passwd-soft -> passwd
[root@ask-01 asklinux2]# head -n1 passwd-soft
root:x:0:0:root:/root:/bin/bash
[root@ask-01 asklinux2]# head -n1 passwd
root:x:0:0:root:/root:/bin/bash
[root@ask-01 asklinux2]# rm -f passwd
[root@ask-01 asklinux2]# head -n1 passwd-soft
head: 无法打开"passwd-soft" 读取数据: 没有那个文件或目录
[root@ask-01 asklinux2]# ll
总用量 0
lrwxrwxrwx. 1 root root 6 12月 22 03:19 passwd-soft -> passwd
















上例中,如果删除源文件,则不能读取软链接文件,而且使用命令ll查看,发现颜色也有所变化,这说明目录不可以做硬链接,但可以做软链接

[root@ask-01 asklinux1]# ls asklinux3
[root@ask-01 asklinux1]# ln -s asklinux3 asklinux4
[root@ask-01 asklinux1]# ls -ld asklinux3 asklinux4
drwxr-xr-x. 2 root root 6 12月 22 03:15 asklinux3
lrwxrwxrwx. 1 root root 9 12月 22 03:31 asklinux4 -> asklinux3



注:本文笔记摘录于《跟阿铭学习Linux(第三版)》请勿转载!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!