当使用 doas 启动 chroot 时,如何在 chroot 中安装软件包?

当使用 doas 启动 chroot 时,如何在 chroot 中安装软件包?

在 OpenBSD 7.2 stable 上,我使用以下脚本设置了 chroot:

#!/bin/ksh

dir="/jails/$1"
mkdir -p "$dir"

tar -C "$dir" -xzf /usr/src/base/base72.tgz
tar -C "$dir" -xzf /usr/src/base/comp72.tgz
tar -C "$dir" -xzf /usr/src/base/man72.tgz
tar -C "$dir" -xzf /usr/src/base/xbase72.tgz
tar -C "$dir" -xzf /usr/src/base/xfont72.tgz
tar -C "$dir" -xzf /usr/src/base/xserv72.tgz
tar -C "$dir" -xzf /usr/src/base/xshare72.tgz

(cd "$dir/dev" && doas ./MAKEDEV all)

doas cp /etc/{doas.conf,installurl,resolv.conf,master.passwd,passwd,group} "$dir/etc/"
mkdir -p "$dir/home/evan"
chown evan:wheel "$dir/home/evan"

doas chroot "$dir" pwd_mkdb /etc/master.passwd
doas chroot "$dir" ldconfig /usr/local/lib
doas chroot "$dir" sysmerge

以用户身份登录时evan,我使用以下命令输入我的 chrootdoas chroot /jails/project /usr/bin/su - evan

我尝试运行doas pkg_add cowsay并收到此错误:

doas: not installed setuid

我缺少什么?

答案1

本着我所理解的真正的 OpenBSD 精神,我做了更多研究,并相信我找到了解决方案。

我的脚本的某些部分doas安装在 chroot 中(好),缺少setuid特殊权限(坏)。

我首先检查了主系统的权限:

$ ls -al /usr/bin | grep doas
-r-sr-xr-x  1 root  bin   28040 Sep 27 17:40 doas

然后我检查了 chroot 中的内容:

$ doas chroot /jails/project ls -al /usr/bin | grep doas
-r-xr-xr-x  1 evan  wheel   28040 Sep 27 17:40 doas

了解更多信息后特殊权限,我可以看到我需要像这样设置特殊权限:

doas chmod u+s /jails/project/usr/bin/doas

root:bin为了更好地衡量,我还将所有者更改为:

doas chown root:bin /jails/project/usr/bin/doas

现在我可以doas pkg_add cowsay在 chroot 中运行并且命令执行没有问题。


 ___________ 
< RTM FTW! >
 ----------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

相关内容