以普通用户身份执行需管理员权限的可执行文件

文章描述:-2022年3月28日发(作者:庞崇穆)以普通⽤户⾝份执⾏需管理员权限的可执⾏⽂件前⾔我们有时候在操作Linux系统的时候,往往会遇到⼀些奇怪的字符,例如对某⼀个⽂件⽬录执⾏ll时,可能会出现以下情况:[niesh@niesh ~]$ ll usrbinpasswd-rwsr-xr-x. 1 root root 6⽉ 10 2014 usrbinpasswd[niesh@niesh

-

以普通用户身份执行需管理员权限的可执行文件2022年3月28日发(作者:庞崇穆)


以普通⽤户⾝份执⾏需管理员权限的可执⾏⽂件
前⾔
我们有时候在操作Linux系统的时候,往往会遇到⼀些奇怪的字符,例如对某⼀个⽂件⽬录执⾏
ll
时,可能会出现以下情况:
[niesh@niesh ~]$ ll usrbinpasswd
-rwsr-xr-x. 1 root root 27832 6⽉ 10 2014 usrbinpasswd
[niesh@niesh ~]$ ll -d tmp
drwxrwxrwt. 15 root root 4096 7⽉ 30 16:20 tmp
以前见到的都是
r

w

x
,什么时候出来了
s

t
了?这俩是啥东东? 其实,上⾯就是Linux⽂件⽬录的特殊权限了 - SetUID、SetGID 和 SBIT;

SetUID

Linux普通⽤户可以修改⾃⼰的密码,这个是⼀个合情合理的设置;修改密码其实修改的是
etcshadow
这个⽂件;然⽽不知道你有没看过这
个⽂件的属性:
[niesh@niesh ~]$ ll etcshadow
----------. 1 root root 1476 7⽉ 30 16:15 etcshadow
我去,bug啊?很明显普通⽤户对
etcshadow
⽂件没有任何权限啊,那怎么可能修改该⽂件呢?
⼀⽅⾯我们需要修改⾃⼰的密码(就是修改
etcshadow
),另⼀⽅⾯这个⽂件对普通⽤户没任何权限,⾃相⽭盾啊?这么办呢? 其实,这⾥就
牵扯到了 SetUID 权限:修改密码的流程其实就是通过
usrbinpasswd
命令对
etcpasswd
进⾏修改,那么先让我们看⼀下这个可执⾏⽂件的属
性:
[niesh@niesh ~]$ ll usrbinpasswd
-rwsr-xr-x. 1 root root 27832 6⽉ 10 2014 usrbinpasswd
发现usrbinpasswd的权限为:-rwsr-xr-x. 在此“⽂件所有者”的第三位是s权限,也就是咱们即将要详细讲解的的setUID权限,也就是它在作
怪了!


SetUID(或者 s 权限):当⼀个具有执⾏权限的⽂件设置SetUID权限后,⽤户执⾏这个⽂件时将以⽂件所有者的⾝份执⾏。passwd命令具有
SetUID权限,所有者为root(Linux中的命令默认所有者都是root),也就是说当普通⽤户使⽤passwd更改⾃⼰密码的时候,那⼀瞬间突然
“灵魂附体” 了,实际在以passwd命令所有者root的⾝份在执⾏,root当然可以将密码写⼊etcshadow⽂件(root是⼀个bug的存在,在Linux
中就没有它不能⼲的事),命令执⾏完成后该⾝份也随之消失。

0. SetUID条件:
必须具备以下⼏个条件(前提):
1. 只有可执⾏的⼆进制程序才可以设置SetUID
2. 所有者必须对欲设置SetUID的⽂件具备 可执⾏(x) 权限
3. 命令执⾏过程中,其它⽤户获取所有者的⾝份(灵魂附体)
4. SetUID具有时间限制,即完成该程序执⾏后就消失(不能霸占住不放吧?)
1. 设置和取消SetUID
设置SetUID
chmod 4xxx < file-name > chmod u+s < file-name >
取消SetUID
chmod xxx < file-name > chmod u-s < file-name >



SetGID
其实,SetGID基本与SetUID相同,⽆⾮也就是⼀个设置所有者的权限,GID为设置所属组的特殊权限! 区别点在于:SetGID也可以设置⽬
录的相关SetGID权限!
0. SetGID条件:
针对⽂件:
可执⾏的⼆进制⽂件
命令执⾏者(即所属组)对该⽂件具备 x 权限
执⾏时,执⾏者被所属组灵魂附体
权限只在执⾏过程中有效
针对⽬录:
普通⽤户对⽬录具备
r

x
权限,才可以进⼊到该⽬录
普通⽤户在此⽬录中的有效组会变成此⽬录的所属组
如普通⽤户对该⽬录具备
w
权限,新建⽂件的所属组为该⽬录的所属组
1. 设置和取消SetGID
  设置SetGID
    chmod 2xxx
  取消SetGID
    chmod xxx

我⽤普通⽤户进⾏locate查看:
[niesh@niesh root]$ locate
usrsharemanman5
去掉locate的s权限: [root@niesh ~]# chmod g-s usrbinlocate [root@niesh ~]# ll usrbinlocate -rwx--x--x. 1 root slocate 40496 6⽉ 10
2014 usrbinlocate
[niesh@niesh root]$ locate
locate: ⽆法执⾏ stat () `varlibmlocate': 权限不够
也就是:当执⾏locate命令时,普通⽤户
niesh
⾃动升级为
slocate
的组成员。

SBIT
Stick Bit,粘滞位。
0.作⽤:
只对⽬录有效
普通⽤户对该⽬录有
w

x
权限
若没有粘滞位,则普通⽤户可以对⽬录下的⽂件⼦⽬录进⾏删除操作(因为普通⽤户对⽬录具有
w
权限),包括其它⽤户
建⽴的⽬录⽂件;但若赋了SBIT,则普通⽤户只能删除⾃⼰创建的⽂件⽬录,⽽不能删除不属于⾃⼰的⽂件⽬录!
1. 设置和取消SBIT
设置SBIT
chmod 1xxx < dir-name > chmod o+t < dir-name >
取消SBIT
chmod xxx < dir-name > chmod o-t < dir-name >

2. 例程


以tmp为例: 查看tmp的权限: [niesh@niesh tmp]$ ll -d tmp drwxrwxrwt. 8 root root 4096 7⽉ 30 19:40 tmp 会看到,tmp⽬录的权限
other部分为rwt,这个t就是我们设置的粘滞位 接下来,我们⽤其它⽤户创建两个⽂件:
[Jimmy@niesh tmp]$ touch test-file
[Jimmy@niesh tmp]$ mkdir test-dir
[Jimmy@niesh tmp]$ ll
总⽤量 0
drwxrwxr-x. 2 Jimmy Jimmy 6 7⽉ 30 19:44 test-dir
-rw-rw-r--. 1 root Jimmy 0 7⽉ 30 19:44 test-file
切换到另外⼀个⽤户
niesh
:
[niesh@niesh tmp]$ ll
总⽤量 0
drwxrwxr-x. 2 Jimmy Jimmy 6 7⽉ 30 19:44 test-dir
-rw-rw-r--. 1 root Jimmy 0 7⽉ 30 19:44 test-file

niesh
⽤户下,删除tmp⽬录下的⽂件:
[niesh@niesh tmp]$ rm -rf test-dir test-file
rm: ⽆法删除不允许的操作
⽆法删除! 然后,我们切换到root,去掉tmp的粘滞位:
[niesh@niesh tmp]$ su -
密码:
上⼀次登录:⽇ 7⽉ 30 19:43:21 CST 2017pts0 上
[root@niesh ~]# chmod o-t tmp
[root@niesh ~]# ll -d tmp
drwxrwxrwx. 9 root root 4096 7⽉ 30 19:48 tmp
最后,切换到普通⽤户
niesh
,再次删除tmp下的⽂件:
[niesh@niesh root]$ rm -rf tmptest-dir tmptest-file
[niesh@niesh root]$ ll tmp
总⽤量 0


以普通⽤户⾝份执⾏需管理员权限的可执⾏⽂件
前⾔
我们有时候在操作Linux系统的时候,往往会遇到⼀些奇怪的字符,例如对某⼀个⽂件⽬录执⾏
ll
时,可能会出现以下情况:
[niesh@niesh ~]$ ll usrbinpasswd
-rwsr-xr-x. 1 root root 27832 6⽉ 10 2014 usrbinpasswd
[niesh@niesh ~]$ ll -d tmp
drwxrwxrwt. 15 root root 4096 7⽉ 30 16:20 tmp
以前见到的都是
r

w

x
,什么时候出来了
s

t
了?这俩是啥东东? 其实,上⾯就是Linux⽂件⽬录的特殊权限了 - SetUID、SetGID 和 SBIT;

SetUID

Linux普通⽤户可以修改⾃⼰的密码,这个是⼀个合情合理的设置;修改密码其实修改的是
etcshadow
这个⽂件;然⽽不知道你有没看过这
个⽂件的属性:
[niesh@niesh ~]$ ll etcshadow
----------. 1 root root 1476 7⽉ 30 16:15 etcshadow
我去,bug啊?很明显普通⽤户对
etcshadow
⽂件没有任何权限啊,那怎么可能修改该⽂件呢?
⼀⽅⾯我们需要修改⾃⼰的密码(就是修改
etcshadow
),另⼀⽅⾯这个⽂件对普通⽤户没任何权限,⾃相⽭盾啊?这么办呢? 其实,这⾥就
牵扯到了 SetUID 权限:修改密码的流程其实就是通过
usrbinpasswd
命令对
etcpasswd
进⾏修改,那么先让我们看⼀下这个可执⾏⽂件的属
性:
[niesh@niesh ~]$ ll usrbinpasswd
-rwsr-xr-x. 1 root root 27832 6⽉ 10 2014 usrbinpasswd
发现usrbinpasswd的权限为:-rwsr-xr-x. 在此“⽂件所有者”的第三位是s权限,也就是咱们即将要详细讲解的的setUID权限,也就是它在作
怪了!


SetUID(或者 s 权限):当⼀个具有执⾏权限的⽂件设置SetUID权限后,⽤户执⾏这个⽂件时将以⽂件所有者的⾝份执⾏。passwd命令具有
SetUID权限,所有者为root(Linux中的命令默认所有者都是root),也就是说当普通⽤户使⽤passwd更改⾃⼰密码的时候,那⼀瞬间突然
“灵魂附体” 了,实际在以passwd命令所有者root的⾝份在执⾏,root当然可以将密码写⼊etcshadow⽂件(root是⼀个bug的存在,在Linux
中就没有它不能⼲的事),命令执⾏完成后该⾝份也随之消失。

0. SetUID条件:
必须具备以下⼏个条件(前提):
1. 只有可执⾏的⼆进制程序才可以设置SetUID
2. 所有者必须对欲设置SetUID的⽂件具备 可执⾏(x) 权限
3. 命令执⾏过程中,其它⽤户获取所有者的⾝份(灵魂附体)
4. SetUID具有时间限制,即完成该程序执⾏后就消失(不能霸占住不放吧?)
1. 设置和取消SetUID
设置SetUID
chmod 4xxx < file-name > chmod u+s < file-name >
取消SetUID
chmod xxx < file-name > chmod u-s < file-name >



SetGID
其实,SetGID基本与SetUID相同,⽆⾮也就是⼀个设置所有者的权限,GID为设置所属组的特殊权限! 区别点在于:SetGID也可以设置⽬
录的相关SetGID权限!
0. SetGID条件:
针对⽂件:
可执⾏的⼆进制⽂件
命令执⾏者(即所属组)对该⽂件具备 x 权限
执⾏时,执⾏者被所属组灵魂附体
权限只在执⾏过程中有效
针对⽬录:
普通⽤户对⽬录具备
r

x
权限,才可以进⼊到该⽬录
普通⽤户在此⽬录中的有效组会变成此⽬录的所属组
如普通⽤户对该⽬录具备
w
权限,新建⽂件的所属组为该⽬录的所属组
1. 设置和取消SetGID
  设置SetGID
    chmod 2xxx
  取消SetGID
    chmod xxx

我⽤普通⽤户进⾏locate查看:
[niesh@niesh root]$ locate
usrsharemanman5
去掉locate的s权限: [root@niesh ~]# chmod g-s usrbinlocate [root@niesh ~]# ll usrbinlocate -rwx--x--x. 1 root slocate 40496 6⽉ 10
2014 usrbinlocate
[niesh@niesh root]$ locate
locate: ⽆法执⾏ stat () `varlibmlocate': 权限不够
也就是:当执⾏locate命令时,普通⽤户
niesh
⾃动升级为
slocate
的组成员。

SBIT
Stick Bit,粘滞位。
0.作⽤:
只对⽬录有效
普通⽤户对该⽬录有
w

x
权限
若没有粘滞位,则普通⽤户可以对⽬录下的⽂件⼦⽬录进⾏删除操作(因为普通⽤户对⽬录具有
w
权限),包括其它⽤户
建⽴的⽬录⽂件;但若赋了SBIT,则普通⽤户只能删除⾃⼰创建的⽂件⽬录,⽽不能删除不属于⾃⼰的⽂件⽬录!
1. 设置和取消SBIT
设置SBIT
chmod 1xxx < dir-name > chmod o+t < dir-name >
取消SBIT
chmod xxx < dir-name > chmod o-t < dir-name >

2. 例程


以tmp为例: 查看tmp的权限: [niesh@niesh tmp]$ ll -d tmp drwxrwxrwt. 8 root root 4096 7⽉ 30 19:40 tmp 会看到,tmp⽬录的权限
other部分为rwt,这个t就是我们设置的粘滞位 接下来,我们⽤其它⽤户创建两个⽂件:
[Jimmy@niesh tmp]$ touch test-file
[Jimmy@niesh tmp]$ mkdir test-dir
[Jimmy@niesh tmp]$ ll
总⽤量 0
drwxrwxr-x. 2 Jimmy Jimmy 6 7⽉ 30 19:44 test-dir
-rw-rw-r--. 1 root Jimmy 0 7⽉ 30 19:44 test-file
切换到另外⼀个⽤户
niesh
:
[niesh@niesh tmp]$ ll
总⽤量 0
drwxrwxr-x. 2 Jimmy Jimmy 6 7⽉ 30 19:44 test-dir
-rw-rw-r--. 1 root Jimmy 0 7⽉ 30 19:44 test-file

niesh
⽤户下,删除tmp⽬录下的⽂件:
[niesh@niesh tmp]$ rm -rf test-dir test-file
rm: ⽆法删除不允许的操作
⽆法删除! 然后,我们切换到root,去掉tmp的粘滞位:
[niesh@niesh tmp]$ su -
密码:
上⼀次登录:⽇ 7⽉ 30 19:43:21 CST 2017pts0 上
[root@niesh ~]# chmod o-t tmp
[root@niesh ~]# ll -d tmp
drwxrwxrwx. 9 root root 4096 7⽉ 30 19:48 tmp
最后,切换到普通⽤户
niesh
,再次删除tmp下的⽂件:
[niesh@niesh root]$ rm -rf tmptest-dir tmptest-file
[niesh@niesh root]$ ll tmp
总⽤量 0

-

以普通用户身份执行需管理员权限的可执行文件

发布时间:2022-03-28 18:51:28
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 6 条评论,691人围观)

最近发表

随便看看

热门文章

标签列表