2

私はnginxでWebサーバーを実行しており、続いてgunicornでCeleryでDjangoアプリを実行しています。すべての gunicorn プロセスと Celery ワーカーは、Supervisor によって管理されます。私の質問は、スタック内の各プロセスにアクセス許可を設定するという点で、ベスト プラクティスは何ですか?

現在、私は基本的にデフォルトに従っていますが、ここには安全でない部分がいくつかあると確信しています。

  1. Nginx マスター プロセスはルートであり、ワーカー プロセスは www-data として実行されます
  2. スーパーバイザはルートとして実行されます
  3. Gunicorn は root で実行しています (別の用途として設定しようとしましたが、プロセスが起動しませんでした)
  4. PostgresSQL と RabbitMQ は独自のユーザーとして実行されます (postgres と rabbitmq)
  5. まだ Celery をセットアップしていませんが、ドキュメントには root として実行しないように記載されています

どの権限を強化する必要がありますか? また、機能させるためには、どのファイルにアクセスできるようにする必要がありますか?

4

1 に答える 1

6

スーパーバイザーは、root 権限で他のプロセス (Nginx など) を開始するために root である必要があります。スーパーバイザーは外部ユーザーと直接やり取りしたり、ユーザー入力を受け入れたりするべきではないため、これで問題ありません。

Gunicorn は権限なしで実行できるはずです。使用している UNIX ドメイン ソケットの所有者をルートではなく www-data に変更する必要がある場合があります。

通常、Web サーバーのシナリオでは、ファイルにアクセスし、1024 未満のポートでソケットを開くには root 権限が必要です。サーバーがファイルにアクセスできない場合は、権限で実行するのではなく、権限を変更する必要があります。通常、ポート 80 または 443 を開くには特権が必要です。これが、最新の Web サーバーが root として起動し、ポートにバインドしてから、www-data または nobody の実行中のユーザーに特権を与える理由です。

あなたが考慮すべき他のことに関して、ここに簡単なリストがあります:

  • データベース クエリが SQL インジェクションに耐性があることを確認する
  • ドキュメント ルートが適切に定義されていること、および意図したよりも多くのファイルを提供していないことを確認してください。
  • データベース アカウントが持つ権限を最小限に抑えます (たとえば、テーブルの削除と作成はおそらく必要ありません)。
  • ユーザー入力を受け取り、それを実行または評価するコード内の場所を避ける
于 2013-06-11T20:45:33.677 に答える