一般に、サーバーのインストールに関する一般的な知恵は、サーバーを可能な限り削除する必要があるというものです。これにはいくつかの動機がありますが、コンパイラに関する質問に直接当てはまるわけではありません。
- リソースの使用を最小限に抑えます。GCCは少し余分なディスク領域を占有する可能性がありますが、おそらく問題になるほどではありません。ほとんどの場合、GCCは実行されないため、CPU/メモリの使用量は大きな問題ではありません。
- 複雑さを最小限に抑えます。サーバー上でビルドすると、ビルドプロセスにさらにいくつかの障害モードが追加される可能性があります(他の場所でビルドする場合、少なくとも本番サーバーを台無しにする前に何か問題に気付くでしょう)が、そうでない場合は邪魔になりません。
- 攻撃対象領域を最小限に抑えます。他の人が指摘しているように、攻撃者がコンパイラを利用できるようになるまでに、あなたはおそらくすでに失敗しています。
私の会社では、コンパイラがサーバーにインストールされていてもあまり気にしませんが、別の理由でサーバーで実行することもありません。pip
パッケージがどこでビルドされるかではなく、いつどのようにダウンロードされるかについてはそれほど心配していません。
私たちの間で特にひどいことに、pip(およびeasy_install)は、認証の形式(SSLなし、パッケージ署名なしなど)なしでPYPIからパッケージを喜んでインストールすることに注意してください。さらに、これらの多くは実際にはPYPIでホストされていません。pipとeasy_installはリダイレクトに従います。したがって、ここには2つの問題があります。
- pypi(または依存関係がホストされている他のサイトのいずれか)がダウンした場合、ビルドプロセスは失敗します
- 攻撃者が依存関係パッケージをダウンロードしようとしているときに、なんとかしてサーバーに対して中間者攻撃を実行した場合、攻撃者はダウンロードに悪意のあるコードを挿入する可能性があります。
したがって、最初に依存関係を追加するときにパッケージをダウンロードし、ソースが本物であることを確認するために最善を尽くし(これは絶対確実ではありません)、独自のバージョン管理システムに追加します。実際には別のビルドサーバーでパッケージをビルドしますが、これはそれほど重要ではありません。複数のインスタンスにすばやくデプロイできるバイナリパッケージがあると便利です。