web-dev-qa-db-ja.com

LXCコンテナの内部および外部のユーザー権限?

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

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

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

MySQL共有ボリュームに定期的にアクセスしてデータをバックアップするDockerコンテナーの非特権ユーザーoutsideを実行できるように具体的に探しています。

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

27
Naftuli Kay

0.9のリリース以降、DockerはLXCを削除し、独自の実行環境libcontainerを使用しています。あなたの質問は少し古いですが、私の答えはまだあなたが使っているバージョンを適用していると思います。

クイックアンサー:ボリュームの権限を理解するために、mount --bind Host-Dir Container-Dirの類推を行うことができます。したがって、要件を満たすために、権限を管理するための従来の方法を使用できます。 ACLが必要だと思います

長い回答:例のように、ボリューム/datadockという名前のコンテナがあります。

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が一覧表示され、ユーザーがすべてのファイルにアクセスできたことがわかります。

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

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

21
beginer