为什么chroot(2)非特权用户无法使用?
我不明白互联网上的现有答案。例如这个https://lists.freebsd.org/pipermail/freebsd-security/2003-April/000123.html。
将sudo真正的工作,如果/etc/sudoers和/etc被所有者不是root?非特权用户不能只在 chroot 中创建 root 拥有的 setuid 二进制文件,是吗?
一个非特权用户究竟如何破坏 chroot 环境?
我只能想到这样的事情
ln /mnt/backup/XYZ/etc/sudoers $CHROOT/etc/sudoers
ln /usr/bin/sudo $CHROOT/usr/bin/sudo
Run Code Online (Sandbox Code Playgroud)
whereXYZ表示一些备份实例,管理员真的搞砸了并允许我的用户做一些危险的事情。但这有点特别。chroot(2)如果非特权用户可以使用它,是否还有更直接的利用方法?
我正在学习 Linux 用户命名空间,并且我观察到一种对我来说并不完全清楚的奇怪行为。
我在初始用户命名空间中创建了一系列 UID,我可以通过newuidmap命令将子用户命名空间中的 UID 映射到这些 UID 。这些是我的设置:
$ grep '^woky:' /etc/subuid
woky:200000:10000
$ id -u
1000
Run Code Online (Sandbox Code Playgroud)
然后我尝试创建一个新的用户命名空间并将其 UID 范围映射[0-10000)到[200000-210000)父用户命名空间中:
第一个终端:
$ PS1='% ' unshare -U bash
% echo $$
1337
% id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
Run Code Online (Sandbox Code Playgroud)第二个终端:
$ ps -p 1337 -o uid
UID
1000
$ newuidmap 1337 0 200000 10000
$ ps -p 1337 -o uid
UID
1000
Run Code Online (Sandbox Code Playgroud)第一个终端:
% id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
Run Code Online (Sandbox Code Playgroud)因此,即使newuidmap成功完成,新用户命名空间内部和外部的 UID 也没有更改。
然后我找到了下面这篇文章 http://www.itinken.com/blog/2016/Sep/exploring-unprivileged-containers/让我大开眼界。我已经尝试过前面的场景,但使用以下 …
我有一个变量VARNAME,其中包含另一个变量的名称。我想在不使用 的情况下分配给另一个变量eval。我怎样才能做到这一点?
我不想使用的原因eval如下。首先假设一个用于前置变量的函数foo:
% prepend_foo() { foo=("$@" $foo) }
% foo=(1 2)
% print -l $foo
1
2
% prepend_foo x 'a b c' y
% print -l $foo
x
a b c
y
1
2
%
Run Code Online (Sandbox Code Playgroud)
现在考虑一个附加到任何变量的通用函数:
% prepend() { var=$1; shift; eval "$var=($@ ${(P)var})" }
% foo=(1 2)
% print -l $foo
1
2
% prepend foo x 'a b c' y
% print -l $foo
x
a
b
c …Run Code Online (Sandbox Code Playgroud)