【linux】 unshare -user -r /bin/bash命令详解
命令解析
unshare -user -r /bin/bash
是一个 Linux 命令,它用于在新的用户命名空间中运行一个进程(在这个例子中是 /bin/bash)。以下是这个命令的详细解释:
【1. 命令解析】
-
unshare:
- unshare 是一个工具,用于从调用进程中分离某些资源的命名空间(namespace)。
- 它允许
创建新的命名空间
并在其中运行进程。
-
-user:
- 创建一个新的用户命名空间。
- 用户命名空间
允许非特权用户映射当前用户自己的用户和组 ID
。 - 在新命名空间中,当前用户可以表现为 root,即 UID 为 0。
-
-r:
- 自动将当前用户映射为新用户命名空间的 root 用户。
- 在新命名空间中,用户实际上是普通用户,但可以以 root 的身份运行。
注意:不能单独存在,依赖前面的
--user
参数 -
/bin/bash:
命令运行一个新的 Bash shell,使其在创建的用户命名空间中运行。
【2. 效果】
运行 unshare -user -r /bin/bash
后:
-
用户命名空间创建:
- 系统会创建一个新的用户命名空间。
- 在此命名空间中,当前用户的
UID 会被映射为 0
(root)。 - 但命名空间的 root
并不是真正的全局 root
,权限仅限于命名空间内部
。
-
获得伪 root 权限:
- 在新命名空间中,用户看起来是 root(UID=0)。
- 但实际上,它与真实的全局 root 不同,限制在新命名空间的范围内。
-
独立环境:
对命名空间内部的修改(如文件系统、权限等)不会影响全局系统。
unshare -user -r /bin/bash 中,如果 -r 删除, 会是什么效果 ?
会创建一个新的user namespace,但是没鸟用,等于是一个空的壳子。linux下 ,资源必须有父子关系,才能进行管理。
此时要么不用这个新的资源,要么再手动给资源添加父子关系。
unshare -user -r /bin/bash 中,如果 -user 删除, 会是什么效果
unshare -r /bin/bash
能执行吗?
这种情况下,不会创建用户命名空间,而仅执行 -r 标志的作用,但其行为依赖于是否指定了其他命名空间类型(例如 --mount、–net 等)。以下是具体分析:
-r 标志的作用:
- 如果存在用户命名空间(–user),-r 会将当前用户映射为命名空间内的 root。
- 如果没有用户命名空间,-r 是无意义的,或者可能会报错,因为没有地方可以映射 UID
注意:此命令unshare -r /bin/bash
扔能执行,可能有默认值,例如指定了 --user
或 --pid