使用 userspec 的 chroot jail 中的正确 Linux 权限是什么

使用 userspec 的 chroot jail 中的正确 Linux 权限是什么

我正在尝试设置一个 chroot jail,然后我做了:

which binary
ldd /bin/binary

然后我做了:

cp /lib64/{libs} $jail/lib64
cp /usr/lib64/{libs} $jail/usr/lib64

PS:在此设置过程中,我发现 /lib64 需要特殊权限 rx,只有 r-- 不起作用(在 chroot 内部或外部)。

将二进制文件复制到 $jail,创建 /home/jailuser 。

创建 proc、dev、sys 并安装它们。

找到 jailuser:users 的 uid 和 gid

更改主目录的所有权:

chown jailuser:users
chmod 700 (for dirs)
chmod 600 (for files)

将其他文件的所有权更改为root:root,有关权限,请参见前面。

然后root进入了监狱:

export USER=jailuser (and I did the same with LOGNAME, HOME)
cd $jail
chroot --userspec=$uid:$gid $jail $jail/binary

它确实起作用了,但是:

在我的本地机器中,只有所有非监狱用户权限均为 005 才有效。

在 KVM VPS 中尝试了相同的操作,但唯一有效的权限是 050!

请问有人知道吗:

1)为什么本地至少需要 005 才能工作,而远程至少需要 050 才能工作(两个系统相同)?

2) 有没有更好的方法在 chroot jail 中设置权限?(但保留 root:root 所有权,因此用户/进程无法修改“系统”文件)...

3)除了使用--userspec选项之外,有没有更好的方法以非特权用户身份启动这个监狱?

谢谢!

答案1

我想我明白了!我猜有时系统需要切换到 root 组内的用户,并且需要库(可能是系统或无人?),因此 lib64 和 usr/lib64 确实需要至少 050 权限。

我设置权限的最终脚本是这样的(已经测试并正常运行):

#Create vars
u=jailuser
g=users
home=/home/$u
jail=$home/jail

#Set normal home
u=jailuser
g=users
cd $home
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 700 {} +
find . -type f -exec chmod 600 {} +

#Set jail
u=root
g=root
cd $jail
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 511 {} +
find . -type f -exec chmod 100 {} +

#Set lib64
cd $jail/lib64
find . -type f -exec chmod 555 {} +

#Set usr/lib64
cd $jail/usr/lib64
find . -type f -exec chmod 555 {} +


#Set binary
chmod 511 $jail/binary

#Set etc
chmod 544 $jail/etc/passwd
chmod 544 $jail/etc/group

#Set tmp
chmod 777 $jail/tmp

#Set jailed home
u=jailuser
g=users
cd $jail$home
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 700 {} +
find . -type f -exec chmod 600 {} +

cd $home

相关内容