Docker は、アプリケーションを迅速に構築してデプロイするのに役立つ、一般的に使用される仮想化テクノロジです。高速、軽量、安全であることが特徴で、重要なセキュリティ機能の 1 つは、コンテナー内でアプリケーションを実行する場合、制限された環境でアプリケーションを実行できることです。さらに、Docker コンテナはユーザー権限の管理もサポートしているため、新しいユーザーを追加してそのユーザーに切り替えることで、アプリケーションのセキュリティを向上させることができます。ただし、ユーザーを切り替えるときに、コンテナー内のユーザーが su コマンドを使用して他のユーザーに切り替えることができないなど、いくつかの問題が発生する可能性があります。以下では、Docker コンテナーでユーザーの切り替えに失敗する主な原因と解決策について説明します。
su コマンドを使用して Docker コンテナ内のユーザーを切り替える場合、sudo コマンドを使用して一時的にユーザーを切り替える必要があります。権限を昇格し、rootユーザーのパスワードを入力し、suコマンドを実行します。 Dockerコンテナにsudoコマンドがインストールされていない場合、ユーザーの切り替え操作がスムーズに行われません。したがって、この問題を解決するには、コンテナに sudo コマンドをインストールする必要があります。
apt-get update && apt-get install -y sudo
インストール後、su username コマンドを使用してユーザーを切り替えることができます。
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 を使用する必要がある場合は、実際の状況に応じて変更できます。
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 サイトの他の関連記事を参照してください。