web-dev-qa-db-ja.com

LXCコンテナユーザーがマウントされたディレクトリに外部ユーザーとして書き込むことを許可する

タイトルに謝罪、セットアップは実際には非常に簡単です。ホストにはoliという名前のユーザーと、oliが読み書きできるディレクトリ/media/steve/incomingがあります。その中に、ルートの下で実行されている特権LXCコンテナーがあります。 /media/steve/incomingは、次のように/incoming/としてコンテナーにマウントされます。

lxc.mount.entry = /media/steve/incoming incoming none bind 0 0

コンテナ内には、www-dataとして実行されているWebサーバーがあります。 /incoming/に書き込むことができる必要があります。

ここに私のオプションは何ですか?いくつかのアイデアを考えることができますが、それらはかなり深刻な欠点を持っているか、それらを実装する方法がわかりません:

  • コンテナー内でrootとして実行するようにデーモンを変更することもできますが、そうではありません。ルートにファイルを奇妙に書き込みます(ホスト上でroot:oli- ownedとして出てきます)。

  • Container -www-dataをマップして、ファイルシステムにHost -oli特権を持たせることはできますか?これにより、ホストへのアクセスが許可されますか? oliは非特権アカウントではありません。それは本当のダメージを与えることができます。

  • コンテナ内の誰でも/ incomingに書き込むことができ、Host -oliからのアクセスのように見えるようにバインドマウントできますか?

  • ここで何か助けがありますか?

6
Oli

ACLは、usernameuserid番号ではなく。

ファイルの属性内でユーザーID番号に変換されます。

ファイルシステム上でcontainer-www-dataHost-oli特権にマッピングできますか?これにより、ホストへのアクセスが許可されますか? oliは非特権アカウントではありません。本当のダメージを与えることができます。

ホストで次のコマンドを実行して、lxcコンテナーのwww-dataユーザーが/incomingフォルダーに書き込みできるようにします。

$ Sudo chown oli /media/steve/incoming
$ Sudo setfacl -m u:www-data:rwx /media/steve/incoming

/media/steve/incomingは、lxcコンテナの/incomingにバインドされています。

/media/steve/incomingの所有者は既にoliによって所有されています。

したがって、ホストのoliは直接書き込むことができ、コンテナのwww-dataユーザーも直接書き込むことができます。

また、setfaclコマンドがホストに存在しない場合、次のコマンドでインストールできます。

$ Sudo apt-get install acl

ホストのwww-dataとコンテナーのwww-dataは、差ユーザーID番号を使用できるため、コンテナの/ media/steve/incomingを共有できます。次のようなwww-dataユーザーID。

最初に、コンテナ上のwww-datauserid番号を取得します。

$ cat /etc/passwd | grep "^www-data:" | awk -F ":" '{print $3}'

その後、コンテナにwww-datawww-datauseridという名前のユーザーがいる場合、番号が表示されます。次に、ホストでaclを使用してファイル属性を次のように設定します。

$ Sudo setfacl -m u:<got_number_above>:rwx /media/steve/incoming

その後、コンテナで動作します。

ACLの詳細なヘルプは FilePermissionsACLs から取得できます。

3
xiaodongjie