文件特殊权限suid、sgid、stick_bit、硬链接、软链接

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

第二章 文件、目录管理

2.18 特殊权限之 suid

SUID的作用就是:让本来没有相应权限的用户运行这个程序时,可以访问没有权限访问的资源。passwd是一个很鲜明的例子。
suid=set uid

# umask
0022

umask的数值0022中第一位代表的就是特殊权限,包括有suid、sgid、sticky_bit。

该权限针对二进制可执行文件(x),是文件在执行阶段具有文件所有者的权限。

[root@3 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

passwd这个命令就有该权限,当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码。
passwd属性找那个显示的是rws,并非传统的rwx,用数字表示为4755。
4是如何计算来的呢?
当有特殊权限时,第一位数字可以是0,1(--t),2(-s-),3(-st),4(s--),5(s-t),6(ss-),7(sst)。passwd是s--,所以数值为4。

  • 自定义一个set uid权限:
[root@3 ~]# su - 2  临时切换到用户2
[2@3 ~]$ ls -l /root/
ls: 无法打开目录/root/: 权限不够   **此时作为普通用户,没有查看(ls)/root/目录的权限所以报错
[2@3 ~]$ exit
登出
[root@3 ~]# chmod u+s /bin/ls  给ls命令增加set uid权限
[root@3 ~]# ls -l /bin/ls
-rwsr-xr-x. 1 root root 117656 11月  6 2016 /bin/ls
[root@3 ~]# su - 2
上一次登录:三 6月  7 21:31:56 CST 2017pts/0 上
[2@3 ~]$ ls -l /root/  ls获得查看root的权限
总用量 4
-rw-------. 1 root root 1422 5月  22 01:30 anaconda-ks.cfg
[2@3 ~]$ exit
登出
[root@3 ~]# chmod u-x /bin/ls  去除所有者执行(x)权限
[root@3 ~]# ls -l /bin/ls  当所有者没有x权限之后s会变成S
-rwSr-xr-x. 1 root root 117656 11月  6 2016 /bin/ls
[root@3 ~]# chmod u-s /bin/ls
[root@3 ~]# ls -l /bin/ls
-rwxr-xr-x. 1 root root 117656 11月  6 2016 /bin/ls

注: 普通文件必须有x权限s权限才生效。

2.19 特殊命令之 sgid

sgid=set gid
该权限可以用于文件也可以用于目录。设置于可执行二进制文件时,作用和suid类似,即执行改文件的用户会临时获得改文件所属组的权限。设置在目录时,任何用户在此目录下创建的文件或目录都具有和该目录相同的所属组。
eg:

[root@2 ~]# mkdir /tmp/test
[root@2 ~]# chmod 777 !$
chmod 777 /tmp/test
[root@2 ~]# ls -ld !$
ls -ld /tmp/test
drwxrwxrwx 2 root root 6 6月   8 07:18 /tmp/test
[root@2 ~]# chmod g+s !$  给/tmp/test所属组增加s权限
chmod g+s /tmp/test
[root@2 ~]# ls -ld /tmp/test
drwxrwsrwx 2 root root 6 6月   8 07:18 /tmp/test
[root@2 ~]# useradd user1
[root@2 ~]# su - user1  临时切换到user1用户
[user1@2 ~]$ cd /tmp/test/  切换至test目录
[user1@2 test]$ mkdir adai001  在test目录下创建新目录
[user1@2 test]$ touch adai.txt  在test目录下创建新文件
[user1@2 test]$ ls -l
总用量 0
drwxrwsr-x 2 user1 root 6 6月   8 07:20 1
-rw-rw-r-- 1 user1 root 0 6月   8 07:21 2.txt
在test目录下新创建的目录或文件均和test有相同的所属组

2.20 特殊权限之 stick_bit

stick_bit可以理解为防删除位,当前只针对目录有效。一个文件是否可以被某用户删除,主要取决于该文件所在目录是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新文件。如果希望用户能够添加文件但同时不能删除该目录下的其他用户的文件,则可以对其父目录增加该权限。

语法: chmod [o] [+,-] t filename
eg: /tmp/目录就设有该权限

[root@2 ~]# useradd user2
[root@2 ~]# su - user2
[user2@2 ~]$ touch /tmp/user1.txt 在user2用户的/tmp/目录下创建文件user1.txt
[user2@2 ~]$ echo "121">!$  向user1.txt写入文件
echo "121">/tmp/user1.txt
[user2@2 ~]$ exit
登出
[root@2 ~]# useradd user3
[root@2 ~]# su - user3  切换到user3用户下
[user3@2 ~]$ rm -f /tmp/user1.txt  在user3用户下对user2用户在/tmp/目录下创建的文件实施删除工作
rm: 无法删除"/tmp/user1.txt": 不允许的操作    操作无法完成

说明: 一个文件能否被删除,取决于该文件父目录的权限,/tmp/目录是777,任何人都可以写的,所以理论上任何人都可以删除/tmp/下的所以文件,但是刚才我们做的实验却表明,user3是不可以删除user2的文件的,就是因为/tmp/目录有stick bit权限。

2.21 软链接文件

软链接: 跟硬链接不同,这个是建立一个独立的文件,而这个文件的作用是当读取这个链接文件时,它会把读取的行为转发到该文件所 link 的文件上。

那么就来举一个例子:现在有文件 a,我们做了一个软链接文件 b(只是一个链接文件,非常小), b 指向了文件 a。当读取 b 时,那么b 就会把读取的动作转发到 a 上,这样就读取到了文件 a。所以,当我们删除文件 a 时,文件 b 并不会被删除,但是再读取 b 时,会提示无法打开文件。然而,当我们删除 b 时, a 是不会有任何影响的。(b文件类似Windows的快捷方式,但是是二级快捷方式,inode硬链接是一级)

这就用到了 ln 命令:

语法 : ln [-s] [来源文件] [目的文件(快捷方式)]
ln 常用的选项就一个-s,如果不加就是建立硬链接,加上就建立软链接。

 

2.22 硬链接

>硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。进行硬链接的时候该文件的内容并没有任何变化,只是指定了相同的inode index。

  • 硬链接有两个限制:
    1)不能跨文件系统创建硬链接,因为不同的文件系统有不同的inode index;
    2)目录不能创建硬链接。
  • 创建硬链接: ln [源文件] [目标文件]

软链接和硬链接的区别

1)硬链接就是同一个文件使用了多个别名(他们有共同的 inode)。软链接就是一个普通文件,只是数据块内容有点特殊(文件用户数据块中存放的内容是另一文件的路径名的指向,类似于Windows下的快捷方式)。
2)由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。
3)硬链接不能对目录进行创建,只可对文件创建。软链接可对文件或目录创建。

转载于:https://my.oschina.net/u/3706800/blog/1593327

你可能感兴趣的:(文件特殊权限suid、sgid、stick_bit、硬链接、软链接)