chroot 環境にユーザーを追加する

chroot 環境にユーザーを追加する

私は、最小限の Ubuntu をベースに、schroot と debrootstrap を使用して Ubuntu に chroot システムを作成しました。しかし、この chroot 環境に新しいユーザーを追加できないようです。次のようなことが起こります。

  1. ルートとして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 にコピーするため、すべての新しいユーザーが失われます。推奨される回避策は、この FAQ に記載されています。このファイルのコピーを無効にすることができます。

  1. 開く/etc/schroot/default/nssdatabases(もちろん実際のシステム上で)
  2. いわゆるNSS データベース実際のシステムからコピーされたものです。
  3. passwdgroupおよび の行をコメント化して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 などをインストールしたりしても、新しいユーザーは失われません。再起動後でも失われません。

関連情報