9

サーバーにはUbuntu12.04 + PHP + nginxがセットアップされています。当社の開発者は、/usr/lib/php5/ と /var/www/ フォルダーの両方にアクセスできます。私たちは多くのプロジェクトに取り組んでおり、特定の時点で、それぞれ db がアクティブな 50 ~ 100 の異なるアプリ/モジュールがあります。

次の点を考慮して、DB パスワードを保護するメカニズムを考え出します。

  • システム管理者はパスワードを作成し、それをどこかに登録します(ファイル、またはsqlite dbなど)
  • アプリは、必要な DB とアクセス許可レベルを示すキーを提供し、このモジュールは接続に必要なすべてを含むオブジェクトを返します。「user_manager.client1.ro」、「user_manager.client1.rw」のようなもの。
  • メカニズムはアプリに特定のパスワードを提供する必要があり、したがって「www-data」からアクセスできますが、他のすべてのパスワードは、それらのキーが既知でない限り表示できません。

このためのプロトタイプを作成することができましたが、中央のパスワード提供モジュールは www-data スペースで実行されるため、file/sqlite は /var/www/ または /usr/lib/ 内の他のファイルからいつでもアクセスできます。 php5 であるため、すべてのパスワードが危険にさらされる可能性があります。

パスワード提供モジュールがルート権限で実行され、アプリがこれからパスワードを要求するように設定する方法はありますか? このためにまったく新しいサービスを構築できることはわかっていますが、構築して維持するには多すぎるように思えます (特に、このサービスが単一障害点になるため)。

助言がありますか?

4

3 に答える 3

1

アクセス許可を使用すると、次のようなことができます。

1) 1 人の開発者にユーザーを与える

2) /var/www/ の下のすべてのフォルダーをユーザー www-data に chown し、そのサイトの特定のグループを /var/www/site-a www-data group-a /var/www/site-b のように指定します。 www-data group-b など

3)すべてのディレクトリ(および-Rを使用したすべてのサブディレクトリとファイル)を770にchmodします

4) 各開発者を、実際に開発しているすべてのグループに追加します。

于 2013-06-05T22:45:08.137 に答える
0

別の回答で述べたように、別のアプローチは、アプリケーションが要求したときに API を介して暗号キーを提供することです。

信頼できる開発者は、一意のキーを使用して API にクエリを実行し、関連する資格情報を取得します。キーは一連の資格情報にマップできます (複数のプロジェクトの開発者向け)。

クライアント証明書または IP フィルタリングのいずれかを使用して API を保護すると、データ漏洩のリスクを軽減できます (アクセス キーを紛失した場合でも、API にアクセスするには正しいネットワークに接続するか、証明書を取得する必要があります)。開発者を信頼する場合は、証明書をお勧めします(コメントによる)。

于 2015-04-12T18:36:09.633 に答える
0

最も簡単な解決策は、資格情報を管理するアプリケーションを実行し、それらを Web サーバーの別のインスタンス (明らかに別のポートでリッスンしている) から開発者に渡すことです。その後、そのインスタンスを別のユーザーとして実行し、アクセス許可を厳しくすることができます。そのユーザーだけが必要なシークレット ファイルにアクセスできます。

ただし、追加のユーザーを作成し、root として実行しないでください。

Apache では、suexec または suPHP を指します。しかし、あなたは apache を使用していないので、それは選択肢ではありません。

于 2015-05-20T22:47:55.067 に答える