インターネットで見つけられるほとんどの Dockerfile は、root としてソフトウェアをビルドして実行します。これはみんなを怖がらせなければなりませんよね?...しかし、そうではないようです...
したがって、コンテナ内のルートはコンテナ外のルートとまったく同じであるため、コンテナー内であってもサーバーをルートとして実行することは危険です。
解決策の 1 つは、この tor リレーの例のように "USER" 命令を使用して Dockerfile を適切にビルドすることです。
別の解決策は、「linux ユーザー名前空間」を使用して、コンテナー内の UID/GID をコンテナー外の UID/GID に「マップ」することです。たとえば、コンテナー内のルート (uid=0) は、ホスト内の個人ユーザー アカウントにマップできるため、共有ボリュームで作成されたファイルには適切なアクセス許可が付与されます。
だから私の質問は次のとおりです。Docker のセキュリティに関しては、ベスト プラクティスは何ですか? 非ルートとしてコードを実行します (つまり、Dockerfile の USER 命令) ? または「ユーザー名前空間」を使用して?または、最終的に(または追加で) selinux および/または AppArmor を使用して?
ありがとう :)