4

私が現在働いている場所では、Pythonコードを本番サーバーにデプロイすることについて少し議論がありました。を使用して、サーバー自体にバイナリ依存関係(python mysqlドライバーなど)を構築することに投票しましたpip install -r requirements.txt。これはすぐに拒否され、「ライブサーバーにコンパイラを配置しない」というより良い説明はありませんでした。その結果、このコンパイル手順を回避するために、展開プロセスが複雑になり、過剰に設計されています。

私の質問はこれです:ライブサーバー上にコンパイラを持たないようにする最近の理由は何ですか?

4

3 に答える 3

5

一般に、サーバーのインストールに関する一般的な知恵は、サーバーを可能な限り削除する必要があるというものです。これにはいくつかの動機がありますが、コンパイラに関する質問に直接当てはまるわけではありません。

  • リソースの使用を最小限に抑えます。GCCは少し余分なディスク領域を占有する可能性がありますが、おそらく問題になるほどで​​はありません。ほとんどの場合、GCCは実行されないため、CPU/メモリの使用量は大きな問題ではありません。
  • 複雑さを最小限に抑えます。サーバー上でビルドすると、ビルドプロセスにさらにいくつかの障害モードが追加される可能性があります(他の場所でビルドする場合、少なくとも本番サーバーを台無しにする前に何か問題に気付くでしょう)が、そうでない場合は邪魔になりません。
  • 攻撃対象領域を最小限に抑えます。他の人が指摘しているように、攻撃者がコンパイラを利用できるようになるまでに、あなたはおそらくすでに失敗しています。

私の会社では、コンパイラがサーバーにインストールされていてもあまり気にしませんが、別の理由でサーバーで実行することもありません。pipパッケージがどこでビルドされるかではなく、いつどのようにダウンロードされるかについてはそれほど心配していません。

私たちの間で特にひどいことに、pip(およびeasy_install)は、認証の形式(SSLなし、パッケージ署名なしなど)なしでPYPIからパッケージを喜んでインストールすることに注意してください。さらに、これらの多くは実際にはPYPIでホストされていません。pipとeasy_installはリダイレクトに従います。したがって、ここには2つの問題があります。

  • pypi(または依存関係がホストされている他のサイトのいずれか)がダウンした場合、ビルドプロセスは失敗します
  • 攻撃者が依存関係パッケージをダウンロードしようとしているときに、なんとかしてサーバーに対して中間者攻撃を実行した場合、攻撃者はダウンロードに悪意のあるコードを挿入する可能性があります。

したがって、最初に依存関係を追加するときにパッケージをダウンロードし、ソースが本物であることを確認するために最善を尽くし(これは絶対確実ではありません)、独自のバージョン管理システムに追加します。実際には別のビルドサーバーでパッケージをビルドしますが、これはそれほど重要ではありません。複数のインスタンスにすばやくデプロイできるバイナリパッケージがあると便利です。

于 2012-05-01T03:13:53.880 に答える
1

このserverfaultの投稿を参照することをお勧めします。

エクスプロイトがリモートでコンパイルされるのを避けることは理にかなっています

また、セキュリティの観点から、コンパイラを使用しない場合よりもハイジャック犯のタスクを困難にするだけであることも私には理にかなっていますが、完全ではありません。

于 2012-04-30T20:30:09.143 に答える
0

サーバーに大きな負担がかかりますか?

于 2012-04-30T20:23:40.910 に答える