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/mydatasetnobody:nogroupではなくuser1:user1と表示されます。これは、すべてのファイルが読み取り専用であることを意味します。

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

4
ghetto

本当にmycontainerが特権を持たない場合、その所有者はパス/pool/mydatasetにアクセスできない可能性があります。非特権コンテナのユーザーは、コンテナ所有者uidによってホスト上のuidオフセットを持っているため、コンテナ内のuser1はホスト上のuser1と同じではありません。

  1. ホスト上のどのユーザーがコンテナを所有しているかはSudo ls -l /pool/lxc | grep mycontainerで確認できます(/pool/lxcの権限によってはSudoは不要かもしれませんが、lsは安全に実行できますどちらの方法でもルート。今後、アクセス許可が可能であれば、Sudoを省略します)。たとえば、私は

    drwxr-xr-x 4 100000 100000    5 Apr 22 11:37 mycontainer
    

    コンテナの所有者のuidとgidが100000であることを示しています(ユーザーがホストに存在しないため、名前ではなくuidが表示されます)。

  2. /pool/mydatasetの権限をSudo ls -l /pool | grep mydataset(またはその内容についてはSudo ls -l /pool/mydataset)でテストします。

    ファイルをコンテナ内から書き込み可能にする場合は、mycontainer内のどのユーザーが/pool/mydatasetに書き込みできるようにするかを確認する必要があります。たとえば、root上のmycontainerにはホスト上のuid 100000があり、mycontainer内のuser1にuid 1001がある場合(id user1でテストします内からcontainer)ホストの場合、そのuidは101001になります。


ホスト上のすべてのユーザーに/pool/mydatasetへの書き込みを許可して、

Sudo chmod -R o+w /pool/mydataset

(注:これは/pool/mydataset内に再帰的にアクセス許可を追加します)、またはグループuser1のユーザーが書き込みアクセス許可を持っていることを確認する(そうでない場合はSudo chmod -R g+w /pool/mydatasetで再帰的に設定します)グループ化するコンテナの所有者user1

Sudo usermod -a -G user1 <username>

(上記の私の場合、ホスト上のユーザーはコンテナを所有していないことがわかったため、最初にuidを持つユーザーとgid 100000を持つユーザーを作成する必要があります

adduser --no-create-home --uid 100000 --disabled-password --disabled-login <username>

もちろん、コンテナ内のuser1のみに許可を与えたい場合があります。そのため、Host uidでユーザーを作成し、それをホスト上のuser1グループに追加します。 101001.)

また、核に行き、/pool/mydatasetの所有権をmycontainerのルートに付与することもできます。

Sudo chown -R 100000:100000 /pool/mydataset

ただし、データにアクセスするホスト上の他のユーザーを混乱させる可能性があります。


それが完了したら、設定したマウントで、必要に応じてmycontaier内の書き込み許可を許可する必要があります。

4
Jonathan Y.