• Linux 特殊文件权限


    Linux 特殊文件权限

    1. 简介

    一般情况下我们看到的文件权限例如 755

    示例:

    [root@node01 demo]# mkdir user1
    [root@node01 demo]# touch aaa
    [root@node01 demo]# ll
    总用量 0
    -rw-r--r-- 1 root root 0 87 13:09 aaa
    drwxr-xr-x 2 root root 6 87 13:08 user1
    
    rwx		当前用户权限
    r-x		当前组的权限
    r-x		其他用户权限
    
    一般情况下新建文件夹默认为 755 ,因为使用 umask 命令可以看到默认对应减少的权限 022 ,即 777 - 022
    新建文件默认权限为 644 ,即 666 - 022 (新建文件默认是没有执行权限的)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    特殊权限 则是在当前文件权限之前还有一个权限,例如7777

    第一个 7(4+2+1) 即表示特殊权限

    • suid 4 ,表示当一个二进制文件拥有 SUID 权限之后,当其他用户执行该二进制文件的时候,该二进制文件就会以他所有者的权限去执行(这个权限要慎用
    • sgid 2 ,表示要求文件夹下的新建子文件夹或者子文件继承父文件夹的属组
    • stick bit 1 ,表示粘连位,如果给文件夹赋予粘连位,则表示该文件夹下的文件或者文件夹只能由所有者及 root 去删除,其他人无法删除,常用于公共文件,防止除自己以外的用户删除自己的文件

    2. SUID

    suid 4 ,表示当一个二进制文件拥有 SUID 权限之后,当其他用户执行该二进制文件的时候,该二进制文件就会以他所有者的权限去执行

    2.1 示例:1

    当我们想要执行 shutdown 关机命令时,则需要使用 root 用户,因为当前 shutdown 命令是属于 root 用户的

    [root@node01 ~]# which shutdown
    /usr/sbin/shutdown
    [root@node01 ~]# ll /usr/sbin/shutdown
    lrwxrwxrwx. 1 root root 16 527 20:36 /usr/sbin/shutdown -> ../bin/systemctl
    [root@node01 ~]# ll /bin/systemctl
    -rwxr-xr-x. 1 root root 641808 85 2017 /bin/systemctl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    当我们使用一个普通用户去执行 shutdown 命令时会提示我们 root 用户正在登陆,并且让我们使用 systemctl poweroff -i 尝试

    [root@node01 ~]# su - user1
    上一次登录:二 82 16:28:01 CST 2022pts/0 上
    [user1@node01 ~]$ shutdown now
    User root is logged in on sshd.
    User root is logged in on sshd.
    Please retry operation after closing inhibitors and logging out other users.
    Alternatively, ignore inhibitors and users with 'systemctl poweroff -i'.
    
    [user1@node01 ~]$ systemctl poweroff -i
    ==== AUTHENTICATING FOR org.freedesktop.login1.power-off-multiple-sessions ===
    Authentication is required for powering off the system while other users are logged in.
    Authenticating as: root
    Password: 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    修改 /bin/systemctl 文件权限之后只用普通用户也可以使用 shutdown 命令了

    [root@node01 ~]# ll /bin/systemctl 
    -rwxr-xr-x. 1 root root 641808 85 2017 /bin/systemctl
    [root@node01 ~]# chmod 4755 /bin/systemctl 
    [root@node01 ~]# ll /bin/systemctl 
    -rwsr-xr-x. 1 root root 641808 85 2017 /bin/systemctl
    [root@node01 ~]# su - user1
    上一次登录:日 87 13:22:25 CST 2022pts/0 上
    [user1@node01 ~]$ shutdown -r +10		# 十分钟之后关机
    Shutdown scheduled for2022-08-07 13:50:14 CST, use 'shutdown -c' to cancel.
    [user1@node01 ~]$ shutdown -c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    2.2 示例:2

    使用普通用户去查看一个没有权限的文件,则会提示权限不够

    [root@node01 ~]# which cat
    /usr/bin/cat
    [root@node01 ~]# cp /etc/passwd /opt/demo/
    [root@node01 ~]# cd /opt/demo/
    [root@node01 demo]# ll
    总用量 60
    -rw-r--r-- 1 root root  1009 87 13:43 passwd
    [root@node01 demo]# chmod 200 passwd 
    [root@node01 demo]# ll
    总用量 60
    --w------- 1 root root  1009 87 13:43 passwd
    
    [root@node01 demo]# su - user1
    上一次登录:日 87 13:39:25 CST 2022pts/0 上
    [user1@node01 ~]$ cd /opt/demo/
    [user1@node01 demo]$ ll
    总用量 60
    --w------- 1 root root  1009 87 13:43 passwd
    [user1@node01 demo]$ cat passwd 
    cat: passwd: 权限不够
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    修改 cat 命令权限

    [root@node01 demo]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 116 2016 /usr/bin/cat
    [root@node01 demo]# chmod 4755 /usr/bin/cat 
    [root@node01 demo]# ll /usr/bin/cat
    -rwsr-xr-x. 1 root root 54080 116 2016 /usr/bin/cat
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    修改完成,再次使用 cat 命令查看

    [root@node01 demo]# su - user1
    上一次登录:日 87 13:47:51 CST 2022pts/0 上
    [user1@node01 ~]$ cd /opt/demo/
    [user1@node01 demo]$ ll
    总用量 60
    --w------- 1 root root  1009 87 13:43 passwd
    [user1@node01 demo]$ cat passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    nginx:x:1000:100::/home/nginx:/bin/bash
    user1:x:1001:1001::/home/user1:/bin/bash
    user2:x:1002:1002::/home/user2:/bin/bash
    user3:x:1003:1003::/home/user3:/bin/bash
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3. SGID

    表示要求文件夹下的新建子文件夹或者子文件继承父文件夹的属组

    示例:

    查看当前目录所属用户和组

    [root@node01 opt]# ll
    总用量 8
    drwxr-xr-x  2 user1 nginx   20 87 13:50 demo
    
    当前文件权限 755
    所属用户	user1
    所属组 	nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    修改当前文件权限

    [root@node01 opt]# chmod 2755 demo/
    [root@node01 opt]# ll
    总用量 8
    drwxr-sr-x  2 user1 nginx   20 87 13:50 demo
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    创建文件测试,新建文件默认所属组和它的父目录相同

    [root@node01 opt]# cd demo/
    [root@node01 demo]# ll
    总用量 4
    --w------- 1 root root 1009 87 13:43 passwd
    [root@node01 demo]# mkdir 123
    [root@node01 demo]# touch aaa
    [root@node01 demo]# ll
    总用量 4
    drwxr-sr-x 2 root nginx    6 87 14:02 123
    -rw-r--r-- 1 root nginx    0 87 14:02 aaa
    --w------- 1 root root  1009 87 13:43 passwd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4. Stick Bit

    表示粘连位,如果给文件夹赋予粘连位,则表示该文件夹下的文件或者文件夹只能由所有者及 root 去删除,其他人无法删除,常用于公共文件,防止除自己以外的用户删除自己的文件

    示例:

    新建一个公共目录文件夹,使用普通用户在公共目录下新建文件

    [root@node01 ~]# mkdir /opt/pub
    [root@node01 ~]# chmod 777 /opt/pub/
    [root@node01 ~]# ll -d /opt/pub/
    drwxrwxrwx 2 root root 6 87 14:06 /opt/pub/
    
    # user1 新建目录
    [root@node01 ~]# su - user1
    [user1@node01 ~]$ cd /opt/pub/
    [user1@node01 pub]$ ll
    总用量 0
    [user1@node01 pub]$ touch user1_demo1
    [user1@node01 pub]$ mkdir user1_demo2
    [user1@node01 pub]$ ll
    总用量 0
    -rw-rw-r-- 1 user1 user1 0 87 14:08 user1_demo1
    drwxrwxr-x 2 user1 user1 6 87 14:08 user1_demo2
    [user1@node01 pub]$ exit
    登出
    
    # user2 新建目录
    [root@node01 ~]# su - user2
    [user2@node01 ~]$ cd /opt/pub/
    [user2@node01 pub]$ ll
    总用量 0
    -rw-rw-r-- 1 user1 user1 0 87 14:08 user1_demo1
    drwxrwxr-x 2 user1 user1 6 87 14:08 user1_demo2
    [user2@node01 pub]$ touch user2_demo1
    [user2@node01 pub]$ mkdir user2_demo2
    [user2@node01 pub]$ ll
    总用量 0
    -rw-rw-r-- 1 user1 user1 0 87 14:08 user1_demo1
    drwxrwxr-x 2 user1 user1 6 87 14:08 user1_demo2
    -rw-rw-r-- 1 user2 user2 0 87 14:08 user2_demo1
    drwxrwxr-x 2 user2 user2 6 87 14:08 user2_demo2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    这里就有一个问题,文件分属于不用用户,但是不同用户之间可以互相删除对方的文件或者目录,这就会有问题

    [user2@node01 pub]$ whoami
    user2
    [user2@node01 pub]$ ll
    总用量 0
    -rw-rw-r-- 1 user1 user1 0 87 14:08 user1_demo1
    drwxrwxr-x 2 user1 user1 6 87 14:08 user1_demo2
    -rw-rw-r-- 1 user2 user2 0 87 14:08 user2_demo1
    drwxrwxr-x 2 user2 user2 6 87 14:08 user2_demo2
    [user2@node01 pub]$ rm -rf user1_demo1
    [user2@node01 pub]$ ll
    总用量 0
    drwxrwxr-x 2 user1 user1 6 87 14:08 user1_demo2
    -rw-rw-r-- 1 user2 user2 0 87 14:08 user2_demo1
    drwxrwxr-x 2 user2 user2 6 87 14:08 user2_demo2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    设置 粘连位 ,设置之后,用户只能删除属于自己的文件或目录

    在这里插入图片描述

    [root@node01 opt]# chmod 1777 pub/
    [root@node01 opt]# ll
    drwxrwxrwt  4 root  root    63 87 14:11 pub
    
    [root@node01 opt]# su - user1
    上一次登录:日 87 14:07:39 CST 2022pts/0 上
    [user1@node01 ~]$ cd /opt/pub/
    [user1@node01 pub]$ ll
    总用量 0
    drwxrwxr-x 2 user1 user1 6 87 14:08 user1_demo2
    -rw-rw-r-- 1 user2 user2 0 87 14:08 user2_demo1
    drwxrwxr-x 2 user2 user2 6 87 14:08 user2_demo2
    [user1@node01 pub]$ rm -rf user2_demo1
    rm: 无法删除"user2_demo1": 不允许的操作
    [user1@node01 pub]$ rm -rf user1_demo2/
    [user1@node01 pub]$ ll
    总用量 0
    -rw-rw-r-- 1 user2 user2 0 87 14:08 user2_demo1
    drwxrwxr-x 2 user2 user2 6 87 14:08 user2_demo2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

     
     
     
     
     

  • 相关阅读:
    Java,集合框架,关于Map接口与Collections工具类
    有源晶振与无源晶振的区别
    python 进阶系列 - 15讲 线程threading模块详解
    华为Auth-Http Serve任意文件读取
    【目标检测】Generalized Focal Loss V1
    Python二级 每周练习题20
    MATLAB中plot3函数用法
    夜神模拟器+Fiddler抓包测试App
    Java使用模板导出word、pdf
    java计算机毕业设计web网上办公自动化系统MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/D1179869625/article/details/126210727