是否可以不使用 sudo 进入 chroot?如果可以,怎么做?我试过谷歌搜索,但得到的结果都是关于 crouton 的。
答案1
您可以查看施鲁特 软件包。它提供了一种授予用户访问系统上一个或多个 chroot 权限的方法。配置允许每个 chroot 仅由特定用户或组访问,并允许根据需要将主机系统中的目录绑定安装到每个 chroot 中。
配置完成后,没有 root 权限的普通用户也可以轻松运行
schroot -c chroot1 -- cmd ...
有关如何配置 schroot 的更多描述和示例,请阅读
答案2
目前,无需 root 权限即可使用以下unshare
命令进行chroot挂载命名空间。
普通取消共享
假设你想 chroot 到~/Projects/my-backup
目录,并在其中运行~/Projects/my-backup/bin/bash
二进制文件。因此你运行:
$ unshare -mr chroot ~/Projects/my-backup/ /bin/bash
这里:
-m
意味着你可以mount --bind
在新的 chroot 中使用(请注意,挂载对外界不可见,仅对你的 chroot 可见)-r
让它看起来像你是 chroot 中的 rootchroot …
是常见的 chroot 命令。
可能的陷阱:
确保正确设置了环境变量。例如,从 Archlinux chroot 到 Ubuntu 时,我收到类似这样的错误
bash: ls: command not found
。结果发现,我的$PATH
不包含/bin/
(在 Archlinux 上,它是 的符号链接/usr/bin/
),所以我必须运行:PATH=$PATH:/bin/ unshare -mr chroot ~/Projects/my-backup/ /bin/bash
请注意,
/proc
或/dev
文件系统将不会被填充,因此运行需要它们的二进制文件将失败。有一个--mount-proc
选项,但非 root 用户似乎无法访问它。chown
newuidmap
除非您使用和newgidmap
命令进行一些复杂的设置,否则它将无法工作。
Buildah 取消分享
与普通命令相比,它的优势unshare
在于它负责chown
命令开始工作所需的设置。您只需确保已为您的用户定义了/etc/subuid
范围/etc/subgid
。
你按如下方式运行它:
$ buildah unshare chroot ~/Projects/my-backup/ /bin/bash
答案3
有很多方法可以做到这一点,有些比较简单,有些比较困难。有些比较安全,有些不太安全。而且,关于所有选项,还有各种意见。
在我看来,chroot 是最不安全的,维护起来也最麻烦。虽然有一些脚本和软件包可以减少维护工作量,但在我看来,它们仍然是最不安全的。chroot 没有真正的方法来管理资源分配。
接下来是 LXC,您可以使用图形工具管理 LXC,图形工具 (virt-manager) 和 Web 工具都存在。在我看来,LXC 的问题在于它发展迅速。尽管 LXC 比 chroot 更安全,分配资源也更容易,尽管这样做有点复杂,需要了解 cgroups。
我建议使用 openvz。openvz 的问题在于它不支持 Ubuntu 主机。但是,您可以使用 Fedora、CENTOS、RHEL 或 Proxmox。Proxmix 基于 Debian,因此与 Ubuntu 最相似。所有这些操作系统都有图形工具来管理客户机和分配资源。Proxmox 是基于 Web 的,一旦 Proxmox 项目认为 LXC 足够稳定,可用于“生产”环境,它就会过渡到 LXC。
您可以使用 XEN、vbox 或 kvm,但所有这些选项的开销都比 chroot/lxc/openzv 要高一些。管理起来更容易,因为它们都有图形工具,都是安全的,都允许资源分配。
在我看来,Proxmox 是最简单、最安全的选择。第二个选择是在 Ubuntu 上使用 virt-manager 的 LXC。
答案4
您可以为它们安装一个 lxc 容器,其中包含所有需要的程序,包括 shell、minecraft 服务器和 ssh-daemon 或完整的 linux 系统。
您必须以 root 身份启动带有 sshd 和 minecraft-server 的容器,但其用户将被限制为您的lxc.rootfs
。
如果您有足够的 IP 地址,您可以为每个 IP 地址分配一个,否则您可以在互斥端口上启动 sshd 和 minecraft 服务器。