2013-06-05 14 views
9

私たちのサーバーにはUbuntu12.04 + PHP + nginxの設定があります。私たちの開発者は、/ usr/lib/php5 /と/ var/www/foldersの両方にアクセスできます。私たちは多くのプロジェクトに取り組んでいますが、その時々にdbが稼動している50-100の異なるアプリケーション/モジュールがあります。Multi-Dev nginxの設定でのパスワードの保護

私たちは、次の点を考慮して、当社のDBのパスワードを保護するためのメカニズムを思い付くしたいと思います:(sqliteのDBまたはそのようないくつかのファイルを、または)

  • システム管理者は、パスワードを作成し、どこかでそれを登録
  • アプリケーションは、どのDBとどのアクセス権レベルで必要なのかを示すキーを提供し、このモジュールは接続に必要なすべてのものを含むオブジェクトを返します。 "user_manager.client1.ro"、 "user_manager.client1.rw"のようなものです。
  • このメカニズムは、アプリに特定のパスワードを提供する必要があり、したがって 'www-data'によってアクセス可能ですが、他のすべてのパスワードは、そのキーがわかっていなければ見ることができません。

このためにプロトタイプを作成することができましたが、中央のパスワード提供モジュールはwwwデータスペースで動作するため、/ var/www /ディレクトリの他のファイルからファイル/ sqliteにアクセスできます。または/ usr/lib/php5になり、すべてのパスワードが漏えいする可能性があります。

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

何か提案がありますか?

+0

あなたの質問をよりよく理解するには:モジュールはPHPで書かれていますか?このモジュールを絶対に使用するソリューションを望んでいるのですか、または単にファイルのアクセス権で再生できますか?すべての開発者がすべてのファイルへのアクセスを維持することは必須ですか? – St0rM

+0

中央パスワード提供モジュールは現在PHPで提供されており、通常のPHPクラスに過ぎません。 私たちにはアイデアが公開されているので、ファイルのパーミッションを持つものは何でも構いません。 すべてのファイルにアクセスできる開発者については、私たちが複数の帽子をかぶった若干少数のチームだと考えて、アクセスを分離するのはかなり難しいでしょうから、私はそれを妥協しません。 – Shreeni

+0

各開発者がすべてにアクセスしてデータベースにアクセスしないようにするには、問題を解決できる方法はありません。そのアクセス権を持つもの(つまりコード)にアクセスできるようにするため、dbにアクセスできます。たとえば、パスワードを読み取って隠しファイルに保存するコード行を書くことができます。 質問自体に何か問題があると私は信じています。 – St0rM

答えて

1

権限を使用して、あなたが何か行うことができます:

1)1つの開発者は、ユーザー

2を与える)chownコマンドは/ var/www以下/ユーザー・WWW-データへのすべてのフォルダ、およびのための特定のグループそのサイトのようなもの: は/ var/www /のサイト-WWW-データグループ は/ var/www /のサイト-B WWW-データグループB など

3)chmodのすべてのディレクトリ(とすべてのサブディレクトリと-Rを含むファイル)〜770

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

0

different answerで言及したように、アプリケーションが要求するときに、APIを介して暗号キーを提供する別の方法が になります。

あなたの信頼されているdevsは、固有のキーを使用してAPIにクエリを実行し、関連する資格情報を取得します。キーは、資格情報のセット(いくつかのプロジェクトの開発者用)にマップすることができます。

client certificateまたはIPフィルタリングを使用してAPIを保護すると、データ漏洩のリスクが軽減されます(アクセスキーが失われた場合でも、正しいネットワークにアクセスする必要があるか、証明書を使用してAPIにアクセスする必要があります)。 )。あなたが開発者を信頼するなら、私は証明書を好むでしょう(あなたのコメントごとに)。

0

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

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

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