仮想サーバーインスタンスのセットアップ中に、make
を使用していくつかのアプリケーションを構築する必要があります。 make
のインストールに関連するセキュリティリスクはありますか?または、インスタンスがデプロイされる前にクリーンアップする必要がありますか?
また、サーバーにgcc
コンパイラーを配置して、展開前にアプリケーションを構築しています。
一部の人々は、プロダクションマシンに開発ツールが存在すると攻撃者の生活を楽にするであろうと主張するでしょう。ただし、これは攻撃者にとって非常に小さな道のりであり、開発ツールのインストールに賛成または反対するその他の議論はさらに重要視されます。
攻撃者がこれまでシステムに侵入でき、サーバー上に存在するあらゆるツールを呼び出すことができる場合、深刻なセキュリティ侵害が発生しています。開発ツールがなければ、バイナリデータをファイルに書き込み、そのファイルに対してchmodを実行する方法は他にもたくさんあります。この時点でシステム上でカスタムビルド実行可能ファイルを使用したい攻撃者は、それを自分のマシンでビルドしてサーバーに転送することもできます。
注意すべき他のはるかに関連性のあるものがあります。インストールされているソフトウェアにセキュリティバグが含まれている場合、攻撃者にさらされる可能性のある方法がいくつかあります。
開発ツールが上記のいずれかに一致するとは思わないため、高リスクパッケージではありません。
開発ツールを使用するワークフローがある場合は、まずそれらが妥当なワークフローであるかどうかを判断する必要があります。妥当なワークフローである場合は、開発ツールをインストールする必要があります。
これらのツールがサーバー上で本当に必要ないことがわかった場合は、いくつかの理由でインストールを控える必要があります。
セキュリティ上の理由から、権限のないユーザーがサーバーに独自のエグゼキュータを置くことを許可しない場合は、開発ツールではなく、実行権限でマウントされたファイルシステム上のユーザーに書き込み可能なディレクトリを回避する必要があります。そのような状況下でも開発ツールの使用はまだあるかもしれませんが、それはあまりありそうにありません。
make
自体は問題ありません。 make
は、単なる依存関係の追跡と自動化のフレームワークです。ただし、通常はコンパイラーと組み合わせて使用され、完全に不要であるため、運用システムでは使用できないようにするのが望ましいです。共有ライブラリ、インタープリターなど、不要なすべてのパッケージについても同じことが当てはまります。本番システムにインストールされるソフトウェアは厳密に制御する必要があり、アプリケーションで必要なパッケージのみが存在する必要があります。
ビルドサーバーでアプリケーションをビルドし、パッケージ化してから、バイナリパッケージを運用システムに展開する必要があります。
注:ネイティブパッケージツールsuck。それらをぶつけようとすることさえ気にしないでください。代わりに、Jordan Sisselの fpm
を確認してください。それはパッケージングを絶対的な喜びにします。
make
は、bash
とは構文が異なるシェルです。
gcc
のようなコンパイラは、標準のawk
がサポートしない一連の置換で構成された強力なawk
です。出力にゴミを注入するのは、POSIXに準拠していないsort
またはcat
です。これはインタラクティブなテキストエディター(vi
と考えてください)であり、起動時に何らかの編集を行い、ユーザーインターフェイスを表示する前に終了するように構成されています。
それらに本質的に安全なものは何もありません、それらはあなたがあなたのマシンをあなたがbash + cat
+シェルリダイレクションを持っているものよりも安全にすることはありません。
逆に、潜在的な問題は本番サーバーにmake
があることではなく、テスト済みのビルド済みイメージをデプロイするのではなく、本番サーバーでアプリケーションを構築することです。この方法論には正当な理由があるかもしれませんが、私がそれを採用するように頼まれた場合、私は精力的に反対するものです。
make
を本番サーバーにインストールする必要があるかどうか尋ねていますが、私の本当の質問は次のとおりです。誰がその本番サーバーにアクセスでき、侵入に対処するためにどのような保護手段を講じていますか? make
がインストールされていなくても、誰かがroot
アクセス権を取得している場合、どうでしょう? make
および必要なものはすべて手動でインストールできます。
コンピュータのセキュリティに関する厳しい現実は、不要なアクセスを防止したいだけであり、アクセスのブロックに夢中になることは次のことほど重要ではありません。
これはすべて、あなたがどのような仕事をしているのかに依存しています。私は主にWebサーバーの世界で働いており、私の態度は基本的に、私から本番サーバーにアクセスする人は誰でもスキル、知識、成熟度を証明する必要があります。それでおしまい。数日かかることもあります。時にはそれは数ヶ月かかります。しかし、基本的に、運用サーバーのセキュリティの最高のラインは、サーバーを強化するために私たちが行うさまざまなことに加えて、アクセスを制御することです。
make
自体は無害です。指定した依存関係とシステムに既に存在するファイルに応じて、アプリケーションを設定された順序で実行するだけです。インストールプロセスの一部としても役立ちます。これを使用して、ビルド済みファイルを必要な場所に配置したり、ユニットテストを実行したりできます。
ただし、正確にを何に使用するかを考慮する必要があります。多くの場合、コンパイラやアプリケーションを構築するための他のツールと組み合わせて使用されます。thoseは、防御線の一部を無効にするために使用できます。しかし、ツールが利用できない場合、make
はこれらのことを実行できません。