サーバーでソフトウェアを実行するために、いつ新しいユーザーアカウントを作成する必要がありますか?


14

一般的に、サーバー上でインターネット向けソフトウェアを実行するために、いつ新しいユーザーアカウントを作成する必要がありますか?

たとえば、共有のDebianサーバー(たとえばDreamhost経由)を使用しており、WordPress、Redmine、Ruby on Rails、Djangoを使用しているWebサイトを実行したい場合、Mercurialを提供したいリポジトリも。

Dreamhostサーバーおよび他の多くの同様のセットアップサーバーでは、これはすべて単一のユーザーアカウント実行できますが、そのアプローチにはいくつかの欠点があります。

  • より長い.bashrc
  • その1つのアカウントが危険にさらされると、そのアカウントで実行されているすべてのサイトも危険にさらされます。

一方、多くのユーザーアカウントを持つことは、特にインストールされたソフトウェアに関して同一の要件があるユーザーの場合、追跡するのが少し苦痛になる可能性があります。たとえば、WordPressを実行しているWebサイトごとに1つのアカウントを持つことは、やり過ぎかもしれません。

ベストプラクティスは何ですか?それは単に、ユーザーアカウントごとにホストされたサイト(またはホストされたリポジトリなど)の数をパラノイアのレベルに比例して減らすという質問ですか?

これについてのあなたの意見を投稿し、その理由を説明してください。

また、プライベートサーバーまたはVPSで行われるアプローチが共有サーバーで行われるアプローチとは異なると考える理由がある場合は、それらの概要を説明してください。

回答:


11

私は一般的に「ネットワーク上でリッスンソケットを開くものなら誰でも1人」のファンです。1人はApache、1人はメール、1人はDNSなどです。

これは(最後に聞いたように)依然としてベストカレントプラクティスであり、その背後にある理由は明白で単純な妄想です:これらのサービスは、誰かが脆弱性を発見し、パッチを当てる前にそれを悪用した場合、ビッグバッドインターネットにさらされますソフトウェア少なくとも、私はそれらを1つのユーザーアカウントに制限し、そのユーザーが担当する単一のサービスを実行するために必要な特権のみを持ちます。
一般的に、私はこのレベルの分離はシステムを保護するのに十分であると考えていますが、各アプリケーションは脆弱性の島です(たとえば、誰かが脆弱なWordPressプラグインをインストールすると、Apacheがアクセスできるすべてのもの(つまり、すべてのWebサイト)が実質的に脆弱になります)妥協の場合。

したがって、その引数の拡張バージョンは、独自のApache構成とユーザーで共有ホスティングクライアントのWebサイトをサンドボックス化するために作成できます(必ずしも各サイトに完全なWebスタックをインストールする必要はなく、異なるユーザーを指定する個別のApache構成のみをインストールする必要はありません) )、各サイトが多数のApacheプロセスを実行しているため、RAM使用量が大幅に増加したという欠点があり、単一のApacheインスタンス/ユーザーが侵害された場合でも、世界中で読み取り可能なものは依然として脆弱です。

セキュリティをさらに高めるために、各Apacheをchroot(またはBSDシステムの場合はjail)に入れるという議論をさらに拡張することもできますが、各chroot / jailに必要なすべてのソフトウェアが必要になるため、ここでは追加のディスクスペースについて説明します含まれているサイトを実行します(そして、パッチが公開されたときにサーバー上のマスターコピーを1つではなく、サイトごとにこのソフトウェアを更新する必要があります)。
これにより、ユーザーがchrootから抜け出すことができるOS / Kernelバグを除くすべての問題が緩和されます(chrootから各サイトを個別の物理サーバーで実行するための引数になります。これは、サイトを異なるVLAN /サブネットなどに分けるための引数になります)


すべてのリスクと同様に、それを排除することはできません。潜在的な危害/妥協のコスト、妥協の可能性、および各緩和レベルのコストに基づいて、許容可能なレベルまで軽減することしかできません。
私のお金のために、重要ではない、非Eコマースの共有ホスティング環境では、基本的な「Apacheに1人、DNSに1人、メールに1人」などです。セーフティネットで十分です。そのレベルを超えるセキュリティが必要な場合、ユーザーは自分のハードウェアを真剣に検討する必要があります。


1
また、Apache用のモジュール(mod_suと思いますか?)があります。これにより、Apacheは、着信要求に基づいて、実行中のユーザーを動的に変更できます。共有ホスティング環境では、アクセスするサイトを所有するユーザーに変更するように設定します。これにより、最も一般的な種類の侵害(コードインジェクションなど)の区分化が可能になるため、たとえば悪いWordPressプラグインをインストールした1人のユーザーのみが影響を受けます。また、Apacheプロセス自体の完全な侵害、および特権エスカレーション攻撃に対する保護も提供しますが、それは実際の目的ではありません。
クローミー

@ Kromey、mod_suに関する多くの情報を見つけることができませんでした。あなたは意味ですかmod_suexec
サンパブロクパー

1
@sampablokuperうん、それは間違った情報でごめんなさい。
クローミー

1
@Kromeyの大きな問題mod_suexecは、「非CGIリクエストはUserディレクティブで指定されたユーザーのプロセスのままである」ことです。したがって、PHPがモジュールである場合、「メイン」Apacheユーザーとして実行されます。ただし、実行しているものがすべてCGIである場合は、優れたソリューションです。
voretaq7

@voretaqああ、私はその制限を知りませんでした。それでも、一部の環境では役立つ可能性がありますが、実際には思っていたよりも適用性が低くなります。
クローミー

6

一般的に私がやることは、ログインを許可されていない外部向けサービスのユーザー(たとえば、「nobody」)と、ログインおよびsuまたはsudoを許可されたアカウントを1つ持つことです。当然、ユーザー名が異なっていて、簡単に推測できないことを確認してください。

各顧客がログインする共有ホスティング環境を実行していない限り、必要に応じてサービスごとに1人のユーザーがいるとは思わない。自分をハッキングの非常に魅力的なターゲットとして現実的に見ている場合は、可能な限り隔離することもできます。ただし、非常に物議をかもしている、または財務データをホストしている場合を除き、ターゲットとしてはそれほど魅力的ではありません。


+1分離レベルは、目の前の状況に適切である必要があります。通常、「非常に物議を醸す」または「財務データ」に到達すると、私自身の機械レベルの分離レベルが必要になります:-)
voretaq7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.