linux特殊权限使用(suid、sgid、sbit)
目录
- 一.linux特殊权限介绍
- 二.suid
- 1.介绍suid之前需要了解一些问题
- 2.suid作用详解
- 3.授权、撤销suid权限
- 三.sgid
- 1.sgid作用详解
- 2.授权、撤销sgid权限
- 四.sbit
- 1.sticky bit 详解
- 2.授权、撤销sbit权限
- 五.总结
一.linux特殊权限介绍
特殊权限
在linux系统中,除了r读w写x执行权限外,还存在其他的权限;下图中在权限位置上有不同的字母
二.suid
1.介绍suid之前需要了解一些问题
普通用户是否可以修改密码
可以修改自己密码
/etc/shadow文件的作用是什么
存储用户密码的文件
/etc/shadow文件的权限是什么
普通用户是否可以修改/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 权限
类别 | suid | sgid | sbit |
---|---|---|---|
字符表示 | S | S | T |
出现位置 | 用户权限位x | 用户组权限位x | 其他用户权限位x |
基本权限位 | s | s | t |
数字表示法 | 4 | 2 | 1 |
八进制表示法 | 4000 | 2000 | 1000 |
生效对象 | 用户位 | 用户组 | 其他用户 |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论