web-dev-qa-db-ja.com

本番サーバーでmakeをインストールしても安全ですか?

仮想サーバーインスタンスのセットアップ中に、makeを使用していくつかのアプリケーションを構築する必要があります。 makeのインストールに関連するセキュリティリスクはありますか?または、インスタンスがデプロイされる前にクリーンアップする必要がありますか?

また、サーバーにgccコンパイラーを配置して、展開前にアプリケーションを構築しています。

43
S-K'

一部の人々は、プロダクションマシンに開発ツールが存在すると攻撃者の生活を楽にするであろうと主張するでしょう。ただし、これは攻撃者にとって非常に小さな道のりであり、開発ツールのインストールに賛成または反対するその他の議論はさらに重要視されます。

攻撃者がこれまでシステムに侵入でき、サーバー上に存在するあらゆるツールを呼び出すことができる場合、深刻なセキュリティ侵害が発生しています。開発ツールがなければ、バイナリデータをファイルに書き込み、そのファイルに対してchmodを実行する方法は他にもたくさんあります。この時点でシステム上でカスタムビルド実行可能ファイルを使用したい攻撃者は、それを自分のマシンでビルドしてサーバーに転送することもできます。

注意すべき他のはるかに関連性のあるものがあります。インストールされているソフトウェアにセキュリティバグが含まれている場合、攻撃者にさらされる可能性のある方法がいくつかあります。

  • パッケージには、suidまたはsgid実行可能ファイルを含めることができます。
  • パッケージがシステムでサービスを開始している可能性があります。
  • このパッケージは、特定の状況下で自動的に呼び出されるスクリプトをインストールできます(これにはcronジョブが含まれますが、ネットワークインターフェイスの状態が変化したときやユーザーがログインしたときなど、他のイベントによってスクリプトが呼び出される可能性があります)。
  • パッケージはデバイスのiノードをインストールできます。

開発ツールが上記のいずれかに一致するとは思わないため、高リスクパッケージではありません。

開発ツールを使用するワークフローがある場合は、まずそれらが妥当なワークフローであるかどうかを判断する必要があります。妥当なワークフローである場合は、開発ツールをインストールする必要があります。

これらのツールがサーバー上で本当に必要ないことがわかった場合は、いくつかの理由でインストールを控える必要があります。

  • サーバーとバックアップの両方でディスク容量を節約します。
  • インストールされるソフトウェアが少ないほど、依存関係の追跡が容易になります。
  • パッケージが必要ない場合は、セキュリティリスクがわずかであっても、パッケージをインストールすることによって追加のセキュリティリスクをとっても意味がありません。

セキュリティ上の理由から、権限のないユーザーがサーバーに独自のエグゼキュータを置くことを許可しない場合は、開発ツールではなく、実行権限でマウントされたファイルシステム上のユーザーに書き込み可能なディレクトリを回避する必要があります。そのような状況下でも開発ツールの使用はまだあるかもしれませんが、それはあまりありそうにありません。

51
kasperd

make自体は問題ありません。 makeは、単なる依存関係の追跡と自動化のフレームワークです。ただし、通常はコンパイラーと組み合わせて使用​​され、完全に不要であるため、運用システムでは使用できないようにするのが望ましいです。共有ライブラリ、インタープリターなど、不要なすべてのパッケージについても同じことが当てはまります。本番システムにインストールされるソフトウェアは厳密に制御する必要があり、アプリケーションで必要なパッケージのみが存在する必要があります。

ビルドサーバーでアプリケーションをビルドし、パッケージ化してから、バイナリパッケージを運用システムに展開する必要があります。

注:ネイティブパッケージツールsuck。それらをぶつけようとすることさえ気にしないでください。代わりに、Jordan Sisselの fpm を確認してください。それはパッケージングを絶対的な喜びにします。

16
EEAA

makeは、bashとは構文が異なるシェルです。

gccのようなコンパイラは、標準のawkがサポートしない一連の置換で構成された強力なawkです。出力にゴミを注入するのは、POSIXに準拠していないsortまたはcatです。これはインタラクティブなテキストエディター(viと考えてください)であり、起動時に何らかの編集を行い、ユーザーインターフェイスを表示する前に終了するように構成されています。

それらに本質的に安全なものは何もありません、それらはあなたがあなたのマシンをあなたがbash + cat +シェルリダイレクションを持っているものよりも安全にすることはありません。

15
ignis

逆に、潜在的な問題は本番サーバーにmakeがあることではなく、テスト済みのビルド済みイメージをデプロイするのではなく、本番サーバーでアプリケーションを構築することです。この方法論には正当な理由があるかもしれませんが、私がそれを採用するように頼まれた場合、私は精力的に反対するものです。

9
John

makeを本番サーバーにインストールする必要があるかどうか尋ねていますが、私の本当の質問は次のとおりです。誰がその本番サーバーにアクセスでき、侵入に対処するためにどのような保護手段を講じていますか? makeがインストールされていなくても、誰かがrootアクセス権を取得している場合、どうでしょう? makeおよび必要なものはすべて手動でインストールできます。

コンピュータのセキュリティに関する厳しい現実は、不要なアクセスを防止したいだけであり、アクセスのブロックに夢中になることは次のことほど重要ではありません。

  1. 誰がサーバーにアクセスできますか?
  2. 侵入の余波からロールバックするために何ができますか?

これはすべて、あなたがどのような仕事をしているのかに依存しています。私は主にWebサーバーの世界で働いており、私の態度は基本的に、私から本番サーバーにアクセスする人は誰でもスキル、知識、成熟度を証明する必要があります。それでおしまい。数日かかることもあります。時にはそれは数ヶ月かかります。しかし、基本的に、運用サーバーのセキュリティの最高のラインは、サーバーを強化するために私たちが行うさまざまなことに加えて、アクセスを制御することです。

4
JakeGould

make自体は無害です。指定した依存関係とシステムに既に存在するファイルに応じて、アプリケーションを設定された順序で実行するだけです。インストールプロセスの一部としても役立ちます。これを使用して、ビルド済みファイルを必要な場所に配置したり、ユニットテストを実行したりできます。

ただし、正確にを何に使用するかを考慮する必要があります。多くの場合、コンパイラやアプリケーションを構築するための他のツールと組み合わせて使用​​されます。thoseは、防御線の一部を無効にするために使用できます。しかし、ツールが利用できない場合、makeはこれらのことを実行できません。

1
The Spooniest