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

(一)特殊权限set_uid(针对文件)

set_uid:该权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限。比如,passwd这个命令就具有该权限。当普通用户执行passwd命令时,可以临时获得root权限,从而更改密码。通俗的来说,就是普通用户在编辑这个文件的时候才会获得root用户的改文件的权力。

设置这个命令的前提是这个文件需要是二进制文件,且须为可执行文件。

二进制文件:如ls命令,passwd命令这些命令的文件就是二进制文件。

更改密码的文件:/etc/shadow

# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

红色背景文件,s权限,代表set_uid权限。

如何给文件授权s权限:u代表uid

# chmod u+s /usr/bin/ls

# ls -l /usr/bin/ls

-rwsr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

此时的s为小写。

去掉这个权限:

# chmod u-s /usr/bin/ls

将命令改u-s即可。

另外一种写法:

# chmod u=rws /usr/bin/ls

# ls -l /usr/bin/ls

-rwSr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

此时的s权限为大写S,这是因为没有root没有了x权限,再命令:

# chmod u+x /usr/bin/ls

即可。大写的S变为小写的s。

目录也可以加s权限,但是目录不是可执行的文件,因此加s权限无意义。

(二)特殊权限set_gid(可作用文件,也可作用目录)

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

如何设置这个权限,命令:

# chmod g+s /usr/bin/ls

# ls -l /usr/bin/ls

-rwxr-sr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls

×××背景文件,s权限在组权限的位置段。

# mkdir 123

# chmod g+s 123

# chown :user1 123

# touch 123/678

# ls -l 123/

总用量 0

-rw-r--r--. 1 root user1 0 1月  31 20:28 678

此处,123目录下新建的678文件所属组自动改为了user1。

(三)特殊权限stick_bit(sticky bit)

stick_bit:可理解为防删除位。文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限。若没有写权限,则这个目录下的所有文件都不能删除,同时也不能添加新文件。若希望用户能添加文件但不能删除目录下其他用户的文件,则可以对父目录增加该权限。设置该权限后,用户对目录具有了写权限,但不能删除其他用户的文件。防止别人删除自己的文件,root用户除外。

当有特殊权限时,第一位数字可以是0、1(--t)、2(-s-)、3(-st)、4(s--)、5(s-t)、6(ss-)、或7(sst)。

# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

# ls -ld /tmp/

drwxrwxrwt. 14 root root 4096 1月  31 20:45 /tmp/

回顾passwd,它是s--,所以是4;而/tmp/是--t,所以是1 。

passwd用数字表示为4755;/tmp/用数字表示为1777。

格式和set_uid和set_gid同理;chmod o+t dirname。

(四)软链接文件(类似于Windows的快捷方式)

软链接文件:与硬链接不同,软链接是建立一个独立的文件,当读取这个链接文件时,它会把读取的行为转发到该文件所链接的文件上。可以节省空间,既可以链接文件,也可以链接目录。做软链接尽量使用绝对路径。可以软链接文件,也可以目录,也可以跨分区。

制作软链接的命令:

# ln -s   [源文件]    [软链接文件]

ln命令格式:ln [-n] [源文件] [目的文件]

常用选项是-s。若不加-s就是建立硬链接,加上-s就是建立软链接。

经验:若有一个服务A会一直写数据到B文件中,快把这个B文件的分区写满了,可以把B文件复制一份到根分区里,这里复制后的文件称为B1,然后再删除B文件,再建立一个软链接,将B1软链接到B来。

(五)硬链接文件

硬链接文件:当系统要读取一个文件时,会先读iNode信息,再根据iNode中的信息到块区域将数据取出来。硬链接是直接再建立一个iNode链接到文件放置的块区域,即进行硬链接时该文件内容没有任何变化,只是增加了一个指向这个文件的iNode,并不会额外占用磁盘空间。

格式同软链接格式一样。

两个限制:(仅支持文件)

1)不能跨文件系统,因为不同的文件系统有不同的iNode table;

2)不能链接目录。