我已经使用 schroot 和 debrootstrap 在 Ubuntu 中创建了一个基于极简 ubuntu 的 chroot 系统。但是,我似乎无法将新用户添加到此 chroot 环境中。以下是发生的情况。
- 我以 root 身份进入 schroot 并添加一个新用户。(尝试了 adduser 和 useradd 命令)
- 用户名列在 /etc/passwd 文件中,我可以通过 'su' 进入新用户。到目前为止一切顺利。
- 当我退出 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 中,从而丢失所有新用户。建议的解决方法在此常见问题解答中描述:您可以禁用复制这些文件:
- 打开
/etc/schroot/default/nssdatabases
(当然在你的真实系统上) - 你会看到所谓的NSS 数据库,都是从真实系统复制而来的。
- 注释行
passwd
、group
和shadow
,使文件如下所示:
/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 等,新用户不会丢失。即使在重启后!