将用户添加到 chroot 环境

将用户添加到 chroot 环境

我已经使用 schroot 和 debrootstrap 在 Ubuntu 中创建了一个基于极简 ubuntu 的 chroot 系统。但是,我似乎无法将新用户添加到此 chroot 环境中。以下是发生的情况。

  1. 我以 root 身份进入 schroot 并添加一个新用户。(尝试了 adduser 和 useradd 命令)
  2. 用户名列在 /etc/passwd 文件中,我可以通过 'su' 进入新用户。到目前为止一切顺利。
  3. 当我退出 schroot 并重新进入 schroot 时,我创建的用户消失了!!/etc/passwd 中也没有提到该用户。

如何使新用户成为永久用户?

答案1

哦,我自己想通了。Schroot 有一项名为“会话”的功能,可以保留当前环境。每次有人注销而不创建“会话”时,schroot 都会将所有内容恢复到干净状态,从而删除用户。可以使用以下方式启动会话

schroot -c mychroot -b 

答案2

事实上,我发现了一个更好的解决方法schroot 常见问题解答,在节中为什么 schroot 会覆盖 chroot 中的配置文件?

默认情况下,schroot 会将系统 NSS 数据库(“passwd”、“shadow”、“group”、“gshadow”、“services”、“protocols”、“networks”和“hosts”等)复制到 chroot 中。这样做的原因是 chroot 环境不是一个完全独立的系统,复制它们会使它们保持同步。然而,这并不总是可取的, 特别是如果在 chroot 中安装软件包会创建主机上不存在的系统用户和组,因为这些用户和组将在下次复制数据库时消失

简而言之:每次启动新的 schroot 会话时,或者主机系统重新启动后,schroot 都会/etc/passwd从您的真实系统中抓取一些其他文件并将其复制到 chroot 中,从而丢失所有新用户。建议的解决方法在此常见问题解答中描述:您可以禁用复制这些文件:

  1. 打开/etc/schroot/default/nssdatabases(当然在你的真实系统上)
  2. 你会看到所谓的NSS 数据库,都是从真实系统复制而来的。
  3. 注释行passwdgroupshadow,使文件如下所示:

/etc/schroot/default/nssdatabases

# System databases to copy into the chroot from the host system.
#
# <database name>
#passwd
#shadow
#group
services
protocols
networks
hosts

现在,如果您返回 chroot 并创建一些用户,或者安装一些 postgresql 等,新用户不会丢失。即使在重启后!

相关内容