美文网首页
特殊权限、软链接、硬连接

特殊权限、软链接、硬连接

作者: XiaoMing丶 | 来源:发表于2018-09-18 00:26 被阅读0次

    目录

    一、 特殊权限set_uid
    二、 特殊权限set_gid
    三、 特殊权限stick_bit
    四、 软链接文件
    五、 硬连接文件

    一、 特殊权限set_uid

    set uid:该权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限。

    比如,passwd这个命令就具有这个权限。当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码。示例命令如下:

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

    这里的rws权限中的s就代表set_uid权限。

    再举一个例子:
    首先我们切换到普通用户ming,然后使用ls命令查看/root目录,发现提示权限不够,因为/root目录是比较严谨的,只有root用户才能查看。

    [root@minglinux-01 ~]# su ming
    [ming@minglinux-01 root]$ whoami
    ming
    [ming@minglinux-01 root]$ ls /root/
    ls: 无法打开目录/root/: 权限不够
    [ming@minglinux-01 root]$ ls -ld /root/
    dr-xr-x---. 7 root root 240 9月  15 00:42 /root/
    

    那此时我们给ls这个命令加上set_uid,相当于让普通用户在执行ls期间能临时拥有root用户的权限。所以ming用户再次使用ls /root/可以成功显示结果。示例命令如下:

    [root@minglinux-01 ~]# whoami
    root
    [root@minglinux-01 ~]# chmod u+s /usr/bin/ls
    [root@minglinux-01 ~]# ls -l /usr/bin/ls
    -rwsr-xr-x. 1 root root 117672 4月  11 12:35 /usr/bin/ls
    
    [ming@minglinux-01 root]$ whoami
    ming
    [ming@minglinux-01 root]$ ls /root/
    1.txt  anaconda-ks.cfg  dir1  dir2  dir3  dir4
    

    二、 特殊权限set_gid

    set gid:该权限可以作用在文件上(二进制可执行文件),也可以作用在目录上。

    1. 当作用在文件上时,它会使文件在执行阶段具有文件所属组的权限。示例如下:
    [root@minglinux-01 ~]# ls -l /usr/bin/ls
    -rwxr-xr-x. 1 root root 117672 4月  11 12:35 /usr/bin/ls
    [root@minglinux-01 ~]# chmod g+s /usr/bin/ls
    [root@minglinux-01 ~]# ls -l /usr/bin/ls
    -rwxr-sr-x. 1 root root 117672 4月  11 12:35 /usr/bin/ls
    

    我们给ls命令加了set_gid权限,即ls执行时具有文件ls所属的root组的权限,而root组对/root目录有r-x权限,所以此时ming用户也临时拥有了root组的权限,可以成功执行ls /root/命令。

    [ming@minglinux-01 root]$ ls /root
    1.txt  anaconda-ks.cfg  dir1  dir2  dir3  dir4
    
    1. 当作用在目录上时,任何用户在此目录下创建的文件都具有和该目录所属组相同的组。命令如下:
    [root@minglinux-01 ~]# mkdir 123
    [root@minglinux-01 ~]# chmod g+s 123
    [root@minglinux-01 ~]# ls -ld 123
    drwxr-sr-x. 2 root root 6 9月  18 07:10 123
    [root@minglinux-01 ~]# chown :user1 123
    [root@minglinux-01 ~]# ls -ld 123
    drwxr-sr-x. 2 root user1 6 9月  18 07:10 123
    [root@minglinux-01 ~]# mkdir 123/456
    [root@minglinux-01 ~]# ls -ld 123/456/
    drwxr-sr-x. 2 root user1 6 9月  18 07:11 123/456/
    [root@minglinux-01 ~]# touch 123/test
    [root@minglinux-01 ~]# ls -l 123/test 
    -rw-r--r--. 1 root user1 0 9月  18 07:11 123/test
    

    取消了123目录的set_gid权限后,在此目录下创建的文件和目录的所属组都变成了root组,而不是123目录所属的组。命令显示如下:

    [root@minglinux-01 ~]# chmod g-s 123
    [root@minglinux-01 ~]# ls -ld 123
    drwxr-xr-x. 4 root user1 53 9月  18 07:17 123
    [root@minglinux-01 ~]# mkdir 123/789
    [root@minglinux-01 ~]# ls -ld 123/789/
    drwxr-xr-x. 2 root root 6 9月  18 07:19 123/789/
    [root@minglinux-01 ~]# touch 123/test2
    [root@minglinux-01 ~]# ls -l 123/test2
    -rw-r--r--. 1 root root 0 9月  18 07:19 123/test2
    

    三、 特殊权限sticky_bit

    sticky bit:可以理解为防删除位。如果希望用户能够添加文件但不能删除该目录下其他用户的文件,则可以对父目录增加该权限。设置该权限后,就算用户对目录具有写权限,也不能删除其他用户的文件。
    示例:

    [root@minglinux ~]# ls -ld /tmp/
    drwxrwxrwt. 9 root root 230 9月  17 11:32 /tmp/
    
    [ming@minglinux-01 root]$ whoami
    ming
    [ming@minglinux-01 root]$ cd /tmp/
    [ming@minglinux-01 tmp]$ ls
    ls2  test  test_mv  vmware-root
    [ming@minglinux-01 tmp]$ touch ming
    [ming@minglinux-01 tmp]$ ll
    总用量 116
    -rwxr-xr-x. 1 root root 117672 9月  13 21:41 ls2
    -rw-rw-r--. 1 ming ming      0 9月  18 07:29 ming
    drwxr-xr-x. 2 root root     19 9月  12 22:18 test
    drwxr-xr-x. 3 root root     18 9月  13 23:14 test_mv
    drwx------. 2 root root      6 9月   5 17:15 vmware-root
    [ming@minglinux-01 tmp]$ vi ming
    [ming@minglinux-01 tmp]$ chmod 777 ming 
    [ming@minglinux-01 tmp]$ ll ming
    -rwxrwxrwx. 1 ming ming 35 9月  18 07:29 ming
    
    [user1@minglinux-01 tmp]$ whoami
    user1
    [user1@minglinux-01 tmp]$ rm -rf ming 
    rm: 无法删除"ming": 不允许的操作
    

    上例中可以看到,由于/tmp/具有sticky权限,所以任一用户不能删除该目录下其他用户的文件。

    • 配置特殊权限的命令总结:

    chmod u+s filename 设置set uid权限
    chmod u-s filename 删除set uid权限
    chmod g+s dirname 设置set gid权限
    chmod g-s dirname 删除set gid权限
    chmod o+t dirname 设置sticky权限
    chmod o-t dirname 删除sticky权限

    有时候,set_uid上的权限为大写的S,而不是小写的s,这是因为改文件没有x权限所致,不管是大写S还是小写s,都表示它存在set_uid或者set_gid权限,同理sticky bit也一样。

    ps:根据前面示例可以发现,passwd显示的是rws而非传统的rwx,用数字表示为4755。/tmp/显示的rwt而非rwx,用数字表示为1777。这个7和1是如何计出来的呢?当有特殊权限时,第一位数字可以是0、1(--t)、2(-s-)、3(-st)、4(s--)、5(s-t)、6(ss-)、或7(sst)。回过头来看passwd,它是s--,所以是4;而/tmp/是--t,所以是1。

    四、 软链接文件

    软链接(symbolic link):软链接建立一个独立的文件,当读取这个链接文件时,它就会把读取的行为转发到该文件所链接到的文件上。当删除链接指向的文件时,链接文件不会被删除,但无法打开;当删除链接文件时,链接指向的文件不受影响。

    五、 硬连接文件

    硬链接(hard link):当系统要读取一个文件时,会先读取inode信息,然后在根据inode中的信息到块区域将数据读取出来。而硬链接是直接再建立一个inode链接到文件放置的块区域,即进行硬链接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。硬链接有两个限制:(1)不能跨文件系统,因为不同的文件系统又不同的inode table;(2)不能链接目录。

    • ln命令
      ln即link的缩写。ln命令的格式为:ln [-s] [来源文件] [目的文件],该命令常用的选项是-s。加-s选项就是建立软链接,不加就是建立硬链接。

    硬链接相关示例命令如下:

    [root@minglinux ~]# mkdir /tmp/4_9
    [root@minglinux ~]# cd /tmp/4_9
    [root@minglinux 4_9]# cp /etc/passwd ./
    [root@minglinux 4_9]# ls -l
    总用量 4
    -rw-r--r--. 1 root root 995 9月  17 15:30 passwd
    [root@minglinux 4_9]# du -sk
    4       .
    [root@minglinux 4_9]# ln passwd passwd-hard
    [root@minglinux 4_9]# ll
    总用量 8
    -rw-r--r--. 2 root root 995 9月  17 15:30 passwd
    -rw-r--r--. 2 root root 995 9月  17 15:30 passwd-hard
    [root@minglinux 4_9]# du -sk
    4       .
    

    一开始目录下只有一个passwd文件,目录总大小为4KB。做了硬链接后,虽然两个文件的大小都为995B,但目录的总大小并没有变化。删除源文件再比较一下,命令如下:

    [root@minglinux 4_9]# rm -f passwd
    [root@minglinux 4_9]# ll
    总用量 4
    -rw-r--r--. 1 root root 995 9月  17 15:30 passwd-hard
    

    由此可知删除源文件passwd后,文件大小依旧不变。这说明硬链接文件并不会复制数据块,额外占用磁盘空间。

    硬链接不能跨分区,示例如下:

    [root@minglinux-01 ~]# ln /boot/config-3.10.0-862.el7.x86_64 /tmp/config.1
    ln: 无法创建硬链接"/tmp/config.1" => "/boot/config-3.10.0-862.el7.x86_64": 无效的跨设备连接
    

    硬链接不能链接目录,示例命令如下:

    [root@minglinux 4_9]# mkdir 123
    [root@minglinux 4_9]# ln 123 456
    ln: "123": 不允许将硬链接指向目录
    

    软链接相关示例命令:

    [root@minglinux 4_9]# mkdir 456
    [root@minglinux 4_9]# cd 456
    [root@minglinux 456]# cp /etc/passwd ./
    [root@minglinux 456]# ln -s passwd passwd-soft
    [root@minglinux 456]# ll
    总用量 4
    -rw-r--r--. 1 root root 995 9月  17 16:50 passwd
    lrwxrwxrwx. 1 root root   6 9月  17 16:50 passwd-soft -> passwd
    [root@minglinux 456]# head -1 passwd
    root:x:0:0:root:/root:/bin/bash
    [root@minglinux 456]# head -1 passwd-soft
    root:x:0:0:root:/root:/bin/bash
    [root@minglinux 456]# rm -f passwd
    [root@minglinux 456]# head -1 passwd-soft
    head: 无法打开"passwd-soft" 读取数据: 没有那个文件或目录
    [root@minglinux 456]# ll
    总用量 0
    lrwxrwxrwx. 1 root root 6 9月  17 16:50 passwd-soft -> passwd
    

    上例中可以知道,如果删除源文件,则不能读取软链接文件。另外,目录不可以做硬链接,但可以做软链接,示例命令如下:

    [root@minglinux 456]# cd ..
    [root@minglinux 4_9]# ls
    123  456  passwd-hard
    [root@minglinux 4_9]# ln 456 789
    ln: "456": 不允许将硬链接指向目录
    [root@minglinux 4_9]# ln -s 456 789
    [root@minglinux 4_9]# ls -ld 456 789
    drwxr-xr-x. 2 root root 25 9月  17 16:52 456
    lrwxrwxrwx. 1 root root  3 9月  17 16:56 789 -> 456
    

    还有需要注意的一点是做软链接尽量使用绝对路径,因为若使用路径,当源文件移动到其他目录时,软链接会出错找不到源文件。

    相关文章

      网友评论

          本文标题:特殊权限、软链接、硬连接

          本文链接:https://www.haomeiwen.com/subject/dxitnftx.html