无法使用 suid 二进制文件删除特权?
Can't drop privileges with suid binary?
我想知道是否有一种方法可以使用 suid 二进制文件(使用 Ubuntu 18.04)来删除特权。看:
# cp /bin/bash .
# chown www-data bash
# chmod 4700 bash
# ls -lh
-rws------ 1 www-data root 1,1M abr 4 2018 bash
# ./bash
# id
uid=0(root) gid=0(root) groups=0(root)
是否解释了为什么可以使用 suid 二进制文件获得特权但不能放弃特权?
您可能想知道我要完成什么,但这只是为了学习。
谢谢!
这在一般情况下有效:
# cp /usr/bin/id .
# chown www-data id
# chmod 4700 id
# ./id
uid=0(root) gid=0(root) euid=33(www-data) groups=0(root)
bash
是一个特例。来自 bash
手册的 "INVOCATION" 部分,并强调了相关部分:
If the shell is started with the effective user (group) id not equal to
the real user (group) id, and the -p
option is not supplied, no startup
files are read, shell functions are not inherited from the environment,
the SHELLOPTS
, BASHOPTS
, CDPATH
, and GLOBIGNORE
variables, if they
appear in the environment, are ignored, and the effective user id is
set to the real user id. If the -p
option is supplied at invocation,
the startup behavior is the same, but the effective user id is not
reset.
传递 -p
(特权)标志确实会抑制此行为:
# cp /bin/bash .
# chown www-data bash
# chmod 4700 bash
# ./bash -p
bash-4.4$ id
uid=0(root) gid=0(root) euid=33(www-data) groups=0(root)
就 set-uid 而言,没有特权等级——它只是将有效用户标识更改为程序所有者的用户标识。 Root 的处理方式与任何其他用户没有任何区别。
您看到的是 bash
的故意行为。 运行宁 shell 脚本 setuid 有很多安全隐患,默认情况下 bash 不允许。 bash
启动时会检查有效UID是否与真实UID相同。如果不是,则表示它是运行ning set-uid。除非它以一种允许的方式 运行 ,否则它会调用像 setuid()
这样的函数来将 back 更改为真实的 UID。
这就是这里发生的事情。 root
运行 bash
,并且 OS 将有效 UID 更改为 www-data
。 bash
检测到这一点并改回 root
。
我想知道是否有一种方法可以使用 suid 二进制文件(使用 Ubuntu 18.04)来删除特权。看:
# cp /bin/bash .
# chown www-data bash
# chmod 4700 bash
# ls -lh
-rws------ 1 www-data root 1,1M abr 4 2018 bash
# ./bash
# id
uid=0(root) gid=0(root) groups=0(root)
是否解释了为什么可以使用 suid 二进制文件获得特权但不能放弃特权?
您可能想知道我要完成什么,但这只是为了学习。
谢谢!
这在一般情况下有效:
# cp /usr/bin/id .
# chown www-data id
# chmod 4700 id
# ./id
uid=0(root) gid=0(root) euid=33(www-data) groups=0(root)
bash
是一个特例。来自 bash
手册的 "INVOCATION" 部分,并强调了相关部分:
If the shell is started with the effective user (group) id not equal to the real user (group) id, and the
-p
option is not supplied, no startup files are read, shell functions are not inherited from the environment, theSHELLOPTS
,BASHOPTS
,CDPATH
, andGLOBIGNORE
variables, if they appear in the environment, are ignored, and the effective user id is set to the real user id. If the-p
option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset.
传递 -p
(特权)标志确实会抑制此行为:
# cp /bin/bash .
# chown www-data bash
# chmod 4700 bash
# ./bash -p
bash-4.4$ id
uid=0(root) gid=0(root) euid=33(www-data) groups=0(root)
就 set-uid 而言,没有特权等级——它只是将有效用户标识更改为程序所有者的用户标识。 Root 的处理方式与任何其他用户没有任何区别。
您看到的是 bash
的故意行为。 运行宁 shell 脚本 setuid 有很多安全隐患,默认情况下 bash 不允许。 bash
启动时会检查有效UID是否与真实UID相同。如果不是,则表示它是运行ning set-uid。除非它以一种允许的方式 运行 ,否则它会调用像 setuid()
这样的函数来将 back 更改为真实的 UID。
这就是这里发生的事情。 root
运行 bash
,并且 OS 将有效 UID 更改为 www-data
。 bash
检测到这一点并改回 root
。