次のユーザーの「アーキテクチャ」があります:
- ルートアクセスは無効です。
- 管理者ユーザーはホームディレクトリにのみアクセスできます。
- Apache はルート サービスとして実行されます (Web サーバーのファイルにアクセスできるのはルートのみです)
- 「管理者」権限でプロジェクトをビルドする Jenkins CI をインストールしました。
ビルド後のアクションとして、最新のビルド ファイルを Web サーバーの場所にコピーしたいと思います。宛先ディレクトリにアクセスできるのが「root」ユーザーだけの場合、どうすればこれを実現できますか? そもそも「ユーザー アーキテクチャ」が間違っているのでしょうか?
答え1
そもそも私の「ユーザー アーキテクチャ」が間違っているのでしょうか?
はい。残念ですが、これが現状です。変更方法は次のとおりです。
- Apacheを独自のユーザーとして実行します。できればchrootで実行してください。これは最小権限の原則と呼ばれ、何かが侵害された場合に発生する可能性のある損害を制限するという考え方です。意思危険にさらされても、そこから作業を進めてください。特権ユーザーとして Apache を実行する理由はありません。
- Jenkins CI を独自のユーザーとして実行します。同じ原則が適用されます。
- ファイルが Web サーバー ディレクトリに届くように、何らかの方法を用意します。たとえば、Jenkins ユーザーを Apache グループに追加します。これにより、Jenkins ビルド サーバーが Web サーバー ディレクトリにアクセスできるようになります。さらに安全な方法は、Apache ユーザーとして cron ジョブまたは systemd タイマーを実行し、それを使用してファイルをコピーすることです。なぜこれがより安全なのでしょうか。Jenkins が侵害された場合、攻撃者は Web サーバー ディレクトリにアクセスできなくなります。