ホームページ >運用・保守 >Docker >Dockerコンテナのユーザー切り替え失敗の解決策

Dockerコンテナのユーザー切り替え失敗の解決策

PHPz
PHPzオリジナル
2023-03-31 17:47:131013ブラウズ

Docker は、アプリケーションを迅速に構築してデプロイするのに役立つ、一般的に使用される仮想化テクノロジです。高速、軽量、安全であることが特徴で、重要なセキュリティ機能の 1 つは、コンテナー内でアプリケーションを実行する場合、制限された環境でアプリケーションを実行できることです。さらに、Docker コンテナはユーザー権限の管理もサポートしているため、新しいユーザーを追加してそのユーザーに切り替えることで、アプリケーションのセキュリティを向上させることができます。ただし、ユーザーを切り替えるときに、コンテナー内のユーザーが su コマンドを使用して他のユーザーに切り替えることができないなど、いくつかの問題が発生する可能性があります。以下では、Docker コンテナーでユーザーの切り替えに失敗する主な原因と解決策について説明します。

  1. Docker コンテナに sudo コマンドがインストールされていません

su コマンドを使用して Docker コンテナ内のユーザーを切り替える場合、sudo コマンドを使用して一時的にユーザーを切り替える必要があります。権限を昇格し、rootユーザーのパスワードを入力し、suコマンドを実行します。 Dockerコンテナにsudoコマンドがインストールされていない場合、ユーザーの切り替え操作がスムーズに行われません。したがって、この問題を解決するには、コンテナに sudo コマンドをインストールする必要があります。

apt-get update && apt-get install -y sudo

インストール後、su username コマンドを使用してユーザーを切り替えることができます。

  1. Docker コンテナ内のユーザーがホスト マシン ユーザーの UID および GID に対応していません

Docker コンテナ内のユーザーの UID および GID は対応できますホスト マシンの UID および GID と異なるため、ユーザーを切り替えるときに権限の問題が発生する可能性があります。たとえば、Docker コンテナで Apache サーバーを実行しているときに、su www-data コマンドを使用して www-data ユーザーに切り替えると、www-data ユーザーの UID および GID は、www-data ユーザーの UID および GID と一致しません。これに応じて、www-data ユーザーはホスト マシン上の特定のディレクトリやファイルにアクセスできなくなります。この問題を解決するには、Dockerfile に USER ディレクティブを追加して、コンテナ内のユーザーの UID と GID を指定する必要があります。例:

FROM ubuntu:latest

RUN useradd -ms /bin/bash youruser
USER youruser

ここでは、youruser という名前のユーザーを作成し、その UID と GID はデフォルト値として指定されます。コンテナ内で他のユーザー名と UID を使用する必要がある場合は、実際の状況に応じて変更できます。

  1. SELinux と AppArmor が Docker コンテナで正しく構成されていない

Red Hat Enterprise Linux (RHEL) や Ubuntu、SELinux、AppArmor などの一部の Linux オペレーティング システムではコンテナ内のユーザーのアクセス権を制限する可能性があります。 su コマンドを使用して Docker コンテナー内のユーザーを切り替えることができない場合は、SELinux または AppArmor をオフにするか、コンテナー内のユーザーが特定のディレクトリーおよびファイルにアクセスできるように構成することを検討してください。ここでは、コンテナ内のユーザーがホスト マシン上の特定のディレクトリとファイルにアクセスできるように、Ubuntu で AppArmor を構成する方法を簡単に紹介します。

まず、次のステートメントを Dockerfile に追加する必要があります:

RUN apt-get update && apt-get install -y apparmor-utils

次に、/etc/apparmor.d/docker/ ディレクトリに your-container という名前のファイルを作成し、次のコンテンツ:

/path/to/your/dir rw,

/path/to/your/dir 上記はホスト マシン上のディレクトリを表しており、必要に応じて変更できます。追加後、AppArmor 構成をリロードします。

/etc/init.d/apparmor reload

上記は、Docker コンテナーでのユーザー切り替え失敗の考えられる理由と解決策のいくつかです。これらの問題と解決策を理解することで、Docker コンテナのユーザー権限管理とセキュリティをより深く理解できるようになります。

以上がDockerコンテナのユーザー切り替え失敗の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。