在 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 |
|| ||