アプリケーションをコンテナ化した後、Docker コンテナを起動すると、デフォルトで root ユーザーを使用してコマンドが実行されます。そのため、コンテナ内のアプリケーションはデフォルトで root ユーザーによって実行されるため、セキュリティ上のリスクが高くなります。では、非 root ビジネス ユーザーを使用してアプリケーションを実行するにはどうすればよいでしょうか。 これを説明するために簡単な例を挙げてみましょう。 この例では、コンテナ内で自分で作成したユーザーを使用して単純なシェル スクリプトを実行し、スクリプトの出力ログをコンテナの外部に保持します。次に、イメージ作成からコンテナ操作までの全体の流れを見てみましょう。 1. イメージをビルドします。 イメージをビルドするには、dockerfile を使用します。ベース イメージは ubuntu 14.04 です (最初にイメージをプルする必要があります、docker pullubuntu:14.04)。 dockerfileの内容は次のとおりです [root@host09 テスト]# cat Dockerfile docker.io/ubuntu:14.04 より メンテナー He Pengfei RUN groupadd hpf -- ユーザー グループを作成します。RUN useradd -d /data -g hpf -mhpf -- ユーザーを作成します。RUN su - hpf -c "mkdir -p /data/scripts" su - hpf -c "mkdir -p /data/logs" を実行します。 WORKDIR /data/scripts test.sh /data/scripts/ をコピーします chown hpf:hpf test.shを実行します。 chmod 755 test.shを実行します。 ENTRYPOINT su - hpf -c "/data/scripts/test.sh" -- 作成したユーザーを使用してスクリプト [root@host09 test] を実行します。# スクリプトの内容は次のとおりです。 [root@host09 テスト]# cattest.sh 一方、[ 1 = 1 ] する echo `id`>>/data/logs/hpf.log -- ログをファイルに出力し、コンテナの起動時に永続化します sleep 1 終わり [root@host09 テスト]# 次に、イメージをビルドしましょう。 [root@host09 test]# dockerbuild -t hpf:v2 . ビルド コンテキストを Docker デーモンに送信しています 3.072 kB ステップ1: docker.io/ubuntu:14.04から ---> c69811d4e993 ステップ2: MAINTAINER hepengfei ---> キャッシュの使用 ---> b8401d2eb439 ステップ3: groupadd hpfを実行する ---> キャッシュの使用 ---> 2e0d20802c41 ステップ4: useradd -d /data -g hpf -m hpfを実行します ---> キャッシュの使用 ---> バク36ee97aba ステップ 5: su - hpf -c "mkdir -p /data/scripts" を実行します。 ---> キャッシュの使用 ---> a92c3f5f8e34 ステップ 6: su - hpf -c "mkdir -p /data/logs" を実行します。 ---> キャッシュの使用 ---> 2e8665da7092 ステップ7: WORKDIR /data/scripts ---> キャッシュの使用 ---> 7cf84a5a8aca ステップ8: test.sh /data/scripts/ をコピーする ---> 7e4c24de2096 中間コンテナ f96358d91c35 を削除しています ステップ9: chown hpf:hpf test.shを実行します。 ---> fc9ab290c56c で実行中 ---> f38afd1ea62c 中間コンテナ fc9ab290c56c を削除しています ステップ10: chmod 755 test.shを実行する ---> a35b507a1527 で実行中 ---> 5b5223249f4c 中間コンテナ a35b507a1527 を削除 ステップ 11: ENTRYPOINT su - hpf -c "/data/scripts/test.sh" ---> 1ee7cc7fbec7 で実行中 ---> 26e7d603dbac 中間コンテナの削除 1ee7cc7fbec7 26e7d603dbac の構築に成功しました [root@host09 テスト]# ビルドされたイメージを表示します。 [root@host09 test]# docker イメージ リポジトリ タグ イメージID 作成サイズ hpf v2 26e7d603dbac 42 分前 188.3 MB docker.io/ubuntu 14.04 c69811d4e993 3 週間前 188 MB [root@host09 テスト]# 2. コンテナを起動します。 コンテナを起動する前に、ホスト上の /data/hepf/log ディレクトリの権限を変更する必要があることに注意してください。そうしないと、コンテナが起動したときに、スクリプト内のログにディレクトリへの書き込み権限が与えられません。ディレクトリの権限を直接 777 に変更しました。
次に、/data/hepf/log ディレクトリ内のログ ファイルを表示してみましょう。 [root@host09 ログ]# pwd /データ/hepf/ログ [root@host09 ログ]# ll 合計 12 -rw-rw-r-- 1 1000 1000 108009月7日 08:02 hpf.log [root@host09 ログ]# tail -2 hpf.log uid=1000(hpf) gid=1000(hpf) グループ=1000(hpf) uid=1000(hpf) gid=1000(hpf) グループ=1000(hpf) [root@host09 ログ]# ファイルの所有者は、コンテナ内に作成された hpf ユーザーと同じであることがわかります。 hpf@ba688af3f598:~$ id uid=1000(hpf) gid=1000(hpf) グループ=1000(hpf) hpf@ba688af3f598:~$ コンテナ内に作成したユーザーと同じ ID を持つ別のユーザーがホスト上にいる場合、ホスト上のログ ファイルの所有者はそのユーザーになりますが、今のところ問題は見つかっていません。 [root@host09 ログ]# cat /etc/passwd |grep hpf1 hpf1:x:1000:1000::/data1:/bin/bash[root@host09 ログ]# ll 合計 12 -rw-rw-r-- 1 hpf1 hpf1 11250 9月7日 08:50hpf.log [root@host09 ログ]# これで簡単な例は終わりです。 追加知識: Docker のデフォルト ストレージと Docker の非ルート ユーザー 方法1
まず、Docker サービスを停止します。
または
次に、/var/lib/docker ディレクトリ全体を宛先パスに移動します。
方法2 Docker 構成ファイルでは、バックグラウンド プロセスのほとんどのパラメータを設定できます。保存場所はオペレーティング システムによって異なります。Ubuntu の場所は /etc/default/docker、CentOS の場所は /etc/sysconfig/docker です。 CentOS の場合は、次の行を追加します。
Ubuntu の場合は、次の行を追加します (Ubuntu ではデフォルトで selinux が有効になっていないため)。
または
1. まず、docker ユーザー グループを作成します。docker ユーザー グループが存在する場合は無視できます。
2. ユーザーをdockerグループに追加する
3. Dockerを再起動する
4. 通常のユーザーがdockerコマンドを実行し、「get ... dial unix /var/run/docker.sock」というプロンプトが表示され、権限が不十分な場合は、/var/run/docker.sockの権限を変更します。 root ユーザーを使用して、次のコマンドを実行します。
非ルートユーザーを使用してDockerコンテナでスクリプト操作を実行する方法に関する上記の記事は、エディターが皆さんと共有するコンテンツのすべてです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQLのCOUNT(*)のパフォーマンスについてお話しましょう
>>: JavaScript の BigIn 関数の共通プロパティをまとめます
1. データベース認証ステートメントを作成する > データベース seata を作成します。 ...
基礎1. スキャフォールディングを使用してプロジェクトを作成し、開始する1.1 足場を設置する: n...
質問質問 1: トランザクションをコミットするときに REDO ログをフラッシュすることによって発生...
類似の構造:コードをコピーコードは次のとおりです。 <div></div>&...
CSS カウンター属性はほぼすべてのブラウザ (IE8 を含む) でサポートされていますが、あまり使...
目次1. 需要1. 需要2. SDKパラメータ設定1. ディレクトリ構造3. コードの実装1. バッ...
目次序文アドバンテージ:欠点: 1. レスポンシブな使用効果2. ステータスが同期されていないRea...
CentOS 8 に Jenkins をインストールするには、root アカウントまたは sudo ...
目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...
背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...
Windows を例にとると、Linux も実際には同じです。静的リソースサーバーを構築するパソコン...
1. ファイアウォールの基本的な使い方起動する: systemctl は、firewalld を起動...
Tomcat の上位バージョンでは、デフォルト モードは NIO モードを使用することになります。...
別のツリー構造があるJavascriptオブジェクトでは、このツリーが本物であると伝えるだけでよいD...
この記事では、CSS 画像アニメーション効果(フォトフレーム)のサンプルコードを紹介し、皆さんと共有...