![chroot 環境にユーザーを追加する](https://rvso.com/image/1263752/chroot%20%E7%92%B0%E5%A2%83%E3%81%AB%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B.png)
私は、最小限の Ubuntu をベースに、schroot と debrootstrap を使用して Ubuntu に chroot システムを作成しました。しかし、この chroot 環境に新しいユーザーを追加できないようです。次のようなことが起こります。
- ルートとして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 にコピーするため、すべての新しいユーザーが失われます。推奨される回避策は、この FAQ に記載されています。このファイルのコピーを無効にすることができます。
- 開く
/etc/schroot/default/nssdatabases
(もちろん実際のシステム上で) - いわゆるNSS データベース実際のシステムからコピーされたものです。
passwd
、group
および の行をコメント化してshadow
、ファイルは次のようになります。
/etc/schroot/default/nssデータベース
# System databases to copy into the chroot from the host system.
#
# <database name>
#passwd
#shadow
#group
services
protocols
networks
hosts
これで、chroot に戻ってユーザーを作成したり、postgresql などをインストールしたりしても、新しいユーザーは失われません。再起動後でも失われません。