LXCコンテナーの内外のユーザー許可


26

サーバー上のDocker LXCコンテナー内でいくつかのサービスを実行しており、実際にそれらのサービスで深刻なことを始めています。

私が明確にしていないことの1つは、コンテナの内外でユーザーのアクセス許可がどのように機能するかです。たとえば、MySQLをコンテナで実行し、そのデータディレクトリを/dataDockerボリュームであるに設定している場合、コンテナ内外のアクセス許可はアクセスポリシーにどのように影響しますか?

明らかに、MySQLをコンテナ内で独自のユーザー(つまりmysql:mysql)として実行し、そのディレクトリに対する読み取り権と書き込み権を付与することです。これはかなり簡単でchmod、ディレクトリなどを入力するだけだと思います。しかし、これはコンテナのでどのように機能しますか?「データ」と呼ばれるこのDocker共有ボリュームがあるので、アクセス制御をどのように管理しますか?

私は、MySQL共有ボリュームに定期的にアクセスしてデータをバックアップするDockerコンテナの外部で、権限のないユーザーを実行できることを特に探しています。

ホスト上の特定のユーザーがDocker共有ボリュームのファイルとフォルダーを読み書きできるように、アクセス許可、ユーザー、およびグループを設定するにはどうすればよいですか?


2
userns(ただし、dockerそのためのサポート、まだ)LXCコンテナは非特権ユーザーとして実行することができます。そうrootしないと、コンテナが不適切に構成されている場合、コンテナ内のユーザーが潜在的に脱走する可能性があります。すなわちroot、ホスト上のroot特権LXCコンテナー内のコンテナーにあります。
0xC0000022L

1
rootところで、特権のないコンテナも実行できます。重要なのは、usernsのマッピングが定義されていることです。
0xC0000022L

回答:


21

0.9 Dockerのリリースが廃止されLXC、独自の実行環境が使用されて以来、libcontainer。あなたの質問は少し古いですが、私の答えはあなたが使用しているバージョンにまだ当てはまると思います。

クイックアンサー:ボリュームのアクセス許可を理解するには、の例えを使用できますmount --bind Host-Dir Container-Dir。したがって、要件を満たすために、アクセス許可を管理するための従来の方法を使用できます。ACLが必要だと思います

長い答え:したがって、あなたの例のように、ボリューム付きのdockというコンテナがあります/data

docker run -tid --name dock -v /usr/container/Databases/:/data \
    centos:latest /bin/bash

コンテナ内では、MySQLサーバーが/dataデータディレクトリとして使用するように構成されています。その/dataため、コンテナ内にデータベースがあります。そして、ホストOSのコンテナーの外部で、この/dataボリュームをマウントし、データベースのバックアップを取るために/usr/container/Databases/通常のユーザーbobを割り当てました。ホストマシンから、ユーザーbobの ACLを構成します。

useradd -u 3000 bob
usermod -R o=--- /usr/container/Databases/
setfacl -R -m u:bob:rwx /usr/container/Databases/
setfacl -R -d -m u:bob:rwx /usr/container/Databases/

テストするには、ユーザーbobでバックアップを作成します。

su - bob
tar -cvf container-data.tar /usr/container/Databases/

tarがリストされ、ユーザーがすべてのファイルにアクセスできたことがわかります。

これで、コンテナ内から確認するとgetfaclbobの代わりに3000が表示されます。これは、bobのUIDが3000であり、コンテナにそのようなユーザーがいないため、メタデータから受信したUIDを表示するだけです。コンテナにユーザーを作成すると、3000ではなくbobという名前useradd -u 3000 bobが表示されるようになりgetfaclます。

要約:したがって、コンテナの内部または外部のいずれかから割り当てるユーザー権限は、両方の環境に反映されます。そのため、ボリュームのアクセス許可を管理するには、ホストマシンのUIDがコンテナのUIDと異なる必要があります


UbuntuのDockerには少なくともパッケージ名がありますがlxc-docker、それはLXCを使用していないということですか?この場合でも上記は適用されますか?
ナフトゥリケイ14

@NaftuliTzviKayああ、ごめんなさい。それapt-get infoから、ubuntuにはdocker.io私が使用した別のパッケージがあるため、LXCを使用する必要がありました(詳細があるかもしれません)。DockerとRedHatが手を組んだので、私は長い間Ubuntuを使いませんでした。そのため、RHELまたはCentOSをベースOSとして使用することをお勧めします。そうでない場合は、単にLXCを使用できます。
14

これでさえ、lxc-docker計画どおりに動作するようです。私は、3000のUIDを持つユーザーを作成した共有ボリューム内のファイルに触れ、そのファイルが存在していたことを、ホストOSから見ることができたとid 3000で、ユーザが所有していた
Naftuliケイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.