开发者

linux特殊权限使用(suid、sgid、sbit)

开发者 https://www.devze.com 2024-08-27 09:59 出处:网络 作者: 草莓田田圈~
目录一.linux特殊权限介绍二.suid1.介绍suid之前需要了解一些问题2.suid作用详解3.授权、撤销suid权限三.sgid1.sgid作用详解2.授权、撤销sgid权限四.sbit1.sticky bit 详解2.授权、撤销sbit权限五.总结一.linux特殊权
目录
  • 一.linux特殊权限介绍
  • 二.suid
    • 1.介绍suid之前需要了解一些问题
    • 2.suid作用详解
    • 3.授权、撤销suid权限
  • 三.sgid
    • 1.sgid作用详解
    • 2.授权、撤销sgid权限
  • 四.sbit
    • 1.sticky bit 详解
    • 2.授权、撤销sbit权限
  • 五.总结

    一.linux特殊权限介绍

    特殊权限

    在linux系统中,除了r读w写x执行权限外,还存在其他的权限;下图中在权限位置上有不同的字母

    linux特殊权限使用(suid、sgid、sbit)

    二.suid

    1.介绍suid之前需要了解一些问题

    普通用户是否可以修改密码

    可以修改自己密码

    /etc/shadow文件的作用是什么

    存储用户密码的文件

    /etc/shadow文件的权限是什么

    linux特殊权限使用(suid、sgid、sbit)

    普通用户是否可以修改/etc/shadow文件

    不可以修改,没有任何权限

    为什么javascript普通用户可以修改密码

    • 使用了passwd命令
    • passwd在x权限位上有s权限
    • 在使用有suid权限的文件或者命令时,会以该文件的属主身份去执行该命令

    2.suid作用详解

    概念:命令文件的x权限位变为s,那么其他用户执行命令文件时,就会以该命令文件的属主用户去执行

    • 如果属主权限位上有x,则会显示小s
    • 如果属主权限位上没有x,则会显示大S

    实例:

    设置suid,普通用户可以正常修改自己的密码,取消suid,普通账户无法修改自己的密码

    [root@localhost ~]# useradd tdm  #创建用户tdm
    [root@localhost ~]# passwd tdm   #设置密码
    Changing password for user tdm.
    New password: 
    BAD PASSWORD: The password is shorter than 7 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.   #设置密码成功
    [root@localhost ~]# su - tdjsm   #切换用户tdm
    Last login: Mon Jun  5 11:21:29 CST 2023 on pts/0
    [tdm@localhost ~]$ passwd    #修改密码
    Changing password for user tdm.
    Changing password for tdm.
    (current) Unix password: 
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.  #修改密码成功
    [tdm@localhost ~]$ exit    #退出登录
    logout
    [root@localhost ~]# chmod u-s  /bin/passwd    #修改passwd权限,取消suid权限
    [root@localhost ~]# ll  /bin/passwd     #查看命令文件权限
    -rwxr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd    #s变成了x
    [root@localhost ~]# su - tdm    #再次切换tdm账户
    Last login: Mon Jun  5 11:24:54 CST 2023 on pts/0
    [tdm@localhost ~]$ passwd    #修改密码
    Changing password for user tdm.
    Changing password for tdm.
    (current) UNIX password: 
    New password: 
    Retype new password: 
    passwd: Authentication token manipulation error  #密码修改失败

    问题:如果普通用户在编程客栈使用passwd命令时,是以root的身份去执行的,普通用户是否能修改其他账户的密码

    无法修改,只有root在使用passwd命令时后面可以接用户名称,其他账号不可以。

    [tdm@localhost ~]$ passwd test    #tdm想修改test的密码
    passwd: Only root can specify a user name.    #只用root账户后面才能接用户名称

    3.授权、撤销suid权限

    • 授权格式:chmod u+s 文件名称
    • 撤销格式:chmod u-s 文件名称
    [root@localhost ~]# touch test.txt    #创建文件
    [root@localhost ~]# ll test.txt     #查看文件属性
    -rw-r--r--. 1 root root 0 Jun  5 11:37 test.txt
    [root@localhost编程客栈 ~]# chmod u+s test.txt     #授权suid属性
    [root@localhost ~]# ll test.txt 
    -rwSr--r--. 1 root root 0 Jun  5 11:37 test.txt    #文件具有suid属性
    [root@localhost ~]# chmod u-s  test.txt    #文件取消suid属性
    [root@localhost ~]# ll test.txt 
    -rw-r--r--. 1 root root 0 Jun  5 11:37 test.txt    #文件取消suid属性
    [root@localhost ~]# chmod 4644 test.txt     #授权suid属性
    [root@localhost ~]# ll test.txt 
    -rwSr--r--. 1 root root 0 Jun  5 11:37 test.txt    #文件具有suid属性
    [root@locandroidalhost ~]# chmod 0644 test.txt     #文件取消suid属性
    [root@localhost ~]# ll test.txt 
    -rw-r--r--. 1 root root 0 Jun  5 11:37 test.txt    #文件取消suid属性

    三.sgid

    1.sgid作用详解

    概念:一般情况下是设置给目录使用的,主要目的是让彼得用户无法删除其他用户所创建的文件或目录

    • 如果属主权限位上有x,则会显示小s
    • 如果属主权限位上没有x,则会显示大S

    实例:

    给目录设置了sgid权限,在该目录下创建的文件或者目录的属组都与该目录一致

    [root@localhost opt]# mkdir abc    #创建目录abc
    [root@localhost opt]# ll
    total 0
    drwxr-xr-x. 2 root root 6 Jun  5 13:18 abc
    [root@localhost opt]# chmod  777  abc    #授予abc权限
    [root@localhost opt]# ll
    total 0
    drwxrwxrwx. 2 root root 6 Jun  5 13:18 abc
    [root@localhost opt]# su - tdm    #切换用户
    Last login: Mon Jun  5 13:15:58 CST 2023 on pts/0
    [tdm@localhost ~]$ cd  /opt/abc
    [tdm@localhost abc]$ touch  test.txt    #创建test文件
    [tdm@localhost abc]$ ll
    total 0
    -rw-rw-r--. 1 tdm tdm 0 Jun  5 13:18 test.txt    #查看文件的属主属组,都是tdm
    [root@localhost opt]# exit    #退出tdm账户
    logout
    [root@localhost opt]# chmod g+s abc/    #给目录abc授予sgid权限
    [root@localhost opt]# ll
    total 0
    drwxrwsrwx. 2 root root 22 Jun  5 13:18 abc    #目录具有sgid权限
    [root@localhost opt]# su  tdm
    [tdm@localhost opt]$ ll
    total 0
    drwxrwsrwx. 2 root root 22 Jun  5 13:18 abc
    [tdm@localhost opt]$ cd abc
    [tdm@localhost abc]$ touch test1.txt    #创建test1.txt文件
    [tdm@localhost abc]$ ll
    total 0
    -rw-rw-r--. 1 tdm root 0 Jun  5 13:21 test1.txt    #该文件的属组跟随目录的属组是root
    -rw-rw-r--. 1 tdm tdm  0 Jun  5 13:18 test.txt

    2.授权、撤销sgid权限

    • 授权格式:chmod g+s 文件名称
    • 撤销格式:chmod g-s 文件名称

    四.sbit

    1.sticky bit 详解

    • 如果属主权限位上有x,则会显示小t
    • 如果属主权限位上没有x,则会显示大T

    只作用在目录上,当一个目录没有设置sticky bit权限时,并且该目录对所有的用户都有读写执行权限时,普通用户在该目录下创建的文件或目录都会被其他用户删除

    [root@localhost opt]# ll
    total 0
    drwxrwxrwx. 2 root root 6 Jun  5 13:30 abc    #当前目录对所有用户都有读写执行权限
    [root@localhost opt]# su test    #切换至test账户
    [test@localhost opt]$ ll
    total 0
    drwxrwsrwx. 2 root root 39 Jun  5 13:21 abc
    [test@localhost opt]$ cd abc
    [test@localhost abc]$ ll
    total 0
    -rw-rw-r--. 1 tdm root 0 Jun  5 13:21 test1.txt
    -rw-rw-r--. 1 tdm tdm  0 Jun  5 13:18 test.txt
    [test@localhost abc]$ rm -f test1.txt     #删除test1文件
    [test@localhost abc]$ rm -f test.txt     #删除test文件
    [test@localhost abc]$ ll    #目录为空,文件已被删除
    total 0

    当一个目录设置了sticky bit权限时,普通用户在该目录下所创建的文件或目录,只能被该文件或目录的属主用户或者root删除,其他用户无法删除彼得用户所创建的文件或者目录

    drwxrwxrwx. 2 root root 6 Jun  5 13:30 abc
    [root@localhost opt]# chmod o+t abc    #给目录授予sbit权限
    [root@localhost opt]# ll
    total 0
    drwxrwxrwt. 2 root root 6 Jun  5 13:30 abc
    [root@localhost opt]# su test    #切换test账户
    [test@localhost opt]$ cd abc
    [test@localhost abc]$ touch test.txt    #创建文件
    [test@localhost abc]$ ll
    total 0
    -rw-rw-r--. 1 test test 0 Jun  5 13:47 test.txt
    [test@localhost abc]$ exit
    exit
    [root@localhost opt]# su tdm    #切换tdm账户
    [tdm@localhost opt]$ cd abc
    [tdm@localhost abc]$ ll
    total 0
    -rw-rw-r--. 1 test test 0 Jun  5 13:47 test.txt
    [tdm@localhost abc]$ rm -f  test.txt     #tdm账户删除test文件
    rm: cannot remove ‘test.txt': Operation not permitted    #操作不允许

    2.授权、撤销sbit权限

    • 授权格式:chmod o+t 文件名称
    • 撤销格式:chmod o-t 文件名称

    五.总结

    • SUID: user - 占据属主的执行权限位
    • s: 属主拥有 x 权限
    • S:属主没有 x 权限
    • SGID: group - 占据 group 的执行权限位
    • s: group 拥有 x 权限
    • S:group 没有 x 权限
    • Sticky: other - 占据 ohter 的执行权限位
    • t: other 拥有 x 权限
    • T:other 没有 x 权限
    类别suidsgidsbit
    字符表示SST
    出现位置用户权限位x用户组权限位x其他用户权限位x
    基本权限位sst
    数字表示法421
    八进制表示法400020001000
    生效对象用户位用户组其他用户

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号