アプリケーションをコンテナ化した後、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 関数の共通プロパティをまとめます
冒頭にこう書かれています:アブソリュートは言った。「親戚よ、私はあなたを私の人生で見たくない!」なぜ...
目次遷移フック関数カスタム遷移クラス名遷移グループの使用まとめまずは例を見てみましょうコードは次のと...
<本文> <div id="ルート"> <h1&...
目次1. 古いMySQL5.7データをバックアップする2. MySQL8.0.13のイメージをプルし...
1. フローティングレイアウト1. 最初に固定幅の div をフロートさせます。ドキュメントフローか...
目次ポート関連の概念:ポートとサービスの関係1: nmapツールが開いているポートを検出する2: n...
正規表現を使用してIEブラウザのバージョンを判別するIEブラウザかどうか確認するif (docume...
1. 問題の説明 root@mysqldb 22:12: [xucl]> テーブル t1\G ...
間違った mysql コマンドを入力したのでキャンセルしたいです。どうすればいいですか? ctrl ...
MySQL インデックスの確立は、MySQL の効率的な操作にとって非常に重要です。インデックスによ...
Web デザイナーの頭の中には、仕事に関連する多くの知識が詰まっている必要があります。 CSS は、...
環境セントロス6.6 MySQL 5.7インストールシステムがインストールされている場合は、まずアン...
目次1. ブロックスコープ1.1. let は var を置き換える1.2. グローバル定数とスレッ...
序文CSS を使用して点線を生成するのは、フロントエンド開発者にとっては簡単です。一般的に、これを実...
この記事では、タブ切り替え機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...