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

[TOC]

218 特殊权限set_uid

[root@mylinux ~]# ls -l /usr/bin/passwd (查看更改密码的命令)
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd  (这里的-rwsr-xr-x权限里面有s权限)
[root@mylinux ~]# ls -l /etc/shadow (存放root密码的位置)
----------. 1 root root 608 12月 15 11:20 /etc/shadow (存放root密码的权限为---------,只有root自己是至高无上的权限,这里想让普通用户改密码,但是又不想让用户写)

特殊权限s让普通用户拥有该命令拥有者的暂时权限

passwd能让普通用户暂时拥有root的权限,即s权限。
set_uid可以让普通用户拥有该命令拥有者的暂时权限,例如:paswd就让普通用户拥有root的权限。
但是必须要文件是一个二进制文件,下面做一个演示

[root@mylinux ~]# su - wsl (切换到一个普通用户)
[wsl@mylinux ~]$ whoami
wsl (已经是普通用户)
[wsl@mylinux ~]$ ls /root/ (我们发现查看root下面的文件已经权限不够)
ls: 无法打开目录/root/: 权限不够

用chmod u+s增加chmod u-s减少特殊权限

重现开启一个窗口切换到root用户下
[root@mylinux ~]# chmod u+s /usr/bin/ls (已经切换到root用户下,我们更改ls的权限,u+s表示文件所有者加上s权限)
[root@mylinux ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls (这里我们看到已经加上了s权限)
切换到wsl普通用户下
[wsl@mylinux ~]$ ls /root/ (我们发现已经可以查看了)
1  2.txt  2.txt~  3  4.txt  anaconda-ks.cfg  frp_0.11.0_linux_amd64
[wsl@mylinux ~]$ ls -ld /root/ 
dr-xr-x---. 7 root root 275 12月 21 17:32 /root/ (我们发现other用户的权限没有变化)
这里我们加上了s权限,因为ls所有者为root,我们相当于对所有用户对这个ls命令增加了其所有者root的暂时权限,这就是set_uid的权限

去掉权限就chmod u-s就可以了

[root@mylinux ~]# chmod u-s /usr/bin/ls (去掉s权限)
[root@mylinux ~]# chmod u=rws /usr/bin/ls (我们通过u=的模式来增加s权限)
[root@mylinux ~]# ls -l /usr/bin/ls (我们发现S权限为大写,这里是因为少了x权限)
-rwSr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls 
[root@mylinux ~]# chmod u+x /usr/bin/ls (这里我们加上x)
[root@mylinux ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls (s权限就变成了小写)

目录可以加上s权限,但是没什么意义

219 特殊权限set_gid

chmod g+s赋予普通用户该命令所属组的暂时权限

赋予普通用户该命令所属组的暂时权限,跟set_uid挺相像

[root@mylinux ~]# chmod g+s /usr/bin/ls
[root@mylinux ~]# !ls
ls -l /usr/bin/ls
-rwxr-sr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls (我们发现所属组权限里面有s权限,其余的痛set-uid一样)

对目录的更改,如果我们对目录的group权限增加s权限,再在其下面创建新的目录将会保持其目录所属组,不管在什么用户或者所属组下去更改
我们发现在更改1所属组并且对group权限添加s后,后面所创建的子目录也变成了wsl的所属组

[root@mylinux ~]# mkdir 1/
[root@mylinux ~]# chown :wsl 1/  (更改1目录所属组)
[root@mylinux ~]# chmod g+s 1/ (对1目录group组增加s权限)
[root@mylinux ~]# mkdir ./1/2 
[root@mylinux ~]# ls -ld 1/ 1/2/ 
drwxr-sr-x. 3 root wsl 15 12月 22 00:21 1/
drwxr-sr-x. 2 root wsl  6 12月 22 00:21 1/2/ (我们发现在更改1所属组并且对group权限添加s后,后面所创建的子目录也变成了wsl的所属组)
[root@mylinux ~]# mkdir 2
[root@mylinux ~]# chown :wsl 2/
[root@mylinux ~]# mkdir 2/3/
[root@mylinux ~]# ls -ld 2/ 2/3/
drwxr-xr-x. 3 root wsl  15 12月 22 00:26 2/
drwxr-xr-x. 2 root root  6 12月 22 00:26 2/3/ (同样的我们只更改目录2的所属组,再在其下面创建子目录,却子目录却没有更改为wsl所属组)

220 特殊权限stick_bit

防删除位t权限

[root@mylinux ~]# ls -ld /tmp/
drwxrwxrwt. 11 root root 4096 12月 22 23:57 /tmp/  (我们发现有一个t权限,称之为防删除位)

子目录下的文件和目录所有用户都可以创建和使用,但是删除权限只有文件或目录所有者才具备。(root超级管理员除外)
所以称之为防删除位。

221 软链接文件

我们通过实例查看ls的路径发现,在/tmp/目录下的/bin/ls指向的是/usr/bin/ls,所以这里/tmp/bin/ls所存储的就是一个绝对路径,我们可以看做是一个软链接文件,其大小根据绝对路径的长度来决定。类似快捷方式。

[root@mylinux tmp]# ls -l /bin
lrwxrwxrwx. 1 root root 7 12月 12 23:38 /bin -> usr/bin
[root@mylinux tmp]# ls -ld /usr/bin
dr-xr-xr-x. 2 root root 20480 12月 17 20:53 /usr/bin
[root@mylinux tmp]# /bin/ls
go-build209782900
systemd-private-73338a0c2b8f4ff2b37d3eb5f2d14506-chronyd.service-btN6NT
systemd-private-73338a0c2b8f4ff2b37d3eb5f2d14506-vgauthd.service-Cyqi28
systemd-private-73338a0c2b8f4ff2b37d3eb5f2d14506-vmtoolsd.service-nf6op1
[root@mylinux tmp]# /usr/bin/ls
go-build209782900
systemd-private-73338a0c2b8f4ff2b37d3eb5f2d14506-chronyd.service-btN6NT
systemd-private-73338a0c2b8f4ff2b37d3eb5f2d14506-vgauthd.service-Cyqi28
systemd-private-73338a0c2b8f4ff2b37d3eb5f2d14506-vmtoolsd.service-nf6op1

创建软连接 ln -s

软链接实例,需求想在某个地方找到另外一个地方的某个文件

[root@mylinux ~]# ls
1  1.txt  2  anaconda-ks.cfg  frp_0.11.0_linux_amd64
[root@mylinux ~]# ln -s /root/1.txt  /root/2/3/1.txt(创建软连接)
[root@mylinux ~]# cat /root/1.txt  /root/2/3/1.txt 
q w e r t
q w e r t
[root@mylinux ~]# ls -ld /root/1.txt /root/2/3/1.txt 
-rw-r--r--. 1 root root 10 12月 23 10:35 /root/1.txt
lrwxrwxrwx. 1 root root 11 12月 23 10:36 /root/2/3/1.txt -> /root/1.txt (这里我们看到/root/2/3/1.txt是/root/1.txt的软链接文件,且内容相同,相当于一个快捷键)

[root@mylinux ~]# ln -s 1.txt ./2.txt
[root@mylinux ~]# ls -l 1.txt 2.txt 
-rw-r--r--. 1 root root 10 12月 23 10:35 1.txt
lrwxrwxrwx. 1 root root  5 12月 23 10:41 2.txt -> 1.txt (也可以用相对路径做软链接,但是尽量使用绝对路径)

场景,将日志拷贝到另外的地方,在原位置留下软链接,可以更改文件的存放位置。

222 硬链接文件

创建硬连接 ln

目录不支持硬链接,只有文件才支持

[root@mylinux ~]# ls
1  1.txt  2  anaconda-ks.cfg  frp_0.11.0_linux_amd64
[root@mylinux ~]# ln /root/1.txt /root/1/1.txt (创建赢链接)
[root@mylinux ~]# ls -l /root/1.txt /root/1/1.txt 
-rw-r--r--. 2 root root 10 12月 23 10:35 /root/1/1.txt
-rw-r--r--. 2 root root 10 12月 23 10:35 /root/1.txt
[root@mylinux ~]# cat /root/1.txt /root/1/1.txt 
q w e r t
q w e r t
[root@mylinux ~]# ls -i /root/1.txt /root/1/1.txt 
33626909 /root/1/1.txt  33626909 /root/1.txt 
(我们发现文件内容相同,连iknowd号都相同,但是不好找硬链接文件位置,两个文件互为硬链接文件,都一样)

硬链接的好处在于可以删除任意一个,对另外一个不影响。
硬链接不能跨分区。

    原文作者:强出头
    原文地址: https://www.jianshu.com/p/86cc9e3a39f6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞