web-dev-qa-db-ja.com

ZFSデータセットを非特権コンテナにマウントする

私の構成に関する最初の情報:

  • Ubuntu 15.10
  • 作成されたZFSプール
  • Pool/lxcに保存されているLXCコンテナー
  • pool/mydatasetが所有するuser1で作成されたデータセット

ここで、pool/mydatasetのファイル/フォルダーにアクセスするためのコンテナーの1つが必要です。私は以下を試しました:

  • コンテナ内にユーザーuser1を作成しました
  • pool/lxc/mycontainer/configを編集し、追加しました:

    lxc.mount.entry = /pool/mydataset mnt/mydataset none rw,bind 0 0
    

コンテナを起動するとデータセットがマウントされますが、コンテナ内のls -la /mnt/mydatasetにはnobody:nogroupではなくuser1:user1が表示されます。これは、すべてのファイルが読み取り専用であることを意味します。

マウントされたディレクトリで正しい権限を取得する方法はありますか?

3
ghetto

私も同じことを経験しました。私の場合、その理由は、バインドマウントされるファイルシステムがUID:GID ホストマシンの範囲内によって所有されているためです。

特権のないコンテナーは、定義上、通常の範囲外のUIDと、コンテナー内の正常な外観を与えるためのユーザー名前空間を使用します。

A <code>ps -efH</code> screenshot in my Host machine.

ホストマシンから見て、コンテナのinitの下にあるものはすべて数値UID1000000に属していることに注意してください。 コンテナ内では、予想どおり、PID1はUIDルートです。

どういう意味ですか?ホストマシンに、通常のユーザー(おそらくroot、おそらく通常のユーザー)が所有するファイルシステムがあり、それをコンテナーにバインドマウントする場合、UID(整数として格納されます)make noコンテナ内のセンス

さらに、コンテナが認識するUIDはそのユーザー名前空間にさえ属していないため、コンテナ内のrootでさえそれらのファイルをchownできません

解決策:ホストマシンで、ファイルをchownして、コンテナ内のルートに属するようにします。私の場合、上の写真のように、次のことをしなければなりませんでした。

  • マウントtank/mydataset at /tank/mydatasetホストマシンで
  • chown 1000000:1000000 /tank/mydataset
  • (コンテナー構成ファイル内)lxc.mount.entry = /tank/mydataset path/in/container/ none bind 0 0
1
Nubarke