データベースのパスワードを起動スクリプト/構成ファイルに保存する最良の方法は?
-
08-06-2019 - |
質問
そのため、Web サーバー アプリはデータベースに接続する必要があり、他の一部のアプリには起動時に実行される起動スクリプトがあります。
これらのアプリケーションの名前とパスワードを保存する最適な方法は何ですか?
- セキュリティ、例:おそらくシステム管理者にデータベースのパスワードを知られたくないのでしょう。
- 保守性、例:パスワード変更時に設定を簡単に変更できるようにするなど。
Windows と Linux の両方のソリューションを歓迎します。
解決
パスワードを保護する最善の方法は、パスワードの使用を中止することです。信頼できる接続を使用します。方法:ASP.NET 2.0 で Windows 認証を使用して SQL Server に接続する. 。そうすれば、隠すものは何もありません。web.config とソースを世界に公開しても、データベースにアクセスすることはできません。
それがうまくいかない場合は、組み込みのものを使用してください ASP.NET の構成暗号化システム.
他のヒント
PostgreSQL が提供するのは、 素晴らしい解決策 この種の状況についてはドキュメントで説明されています。基本的に、ssh を使用して、マシン上のポートをリモート マシン上の PostgreSQL サーバー ポートにブリッジします。これには 3 つの認証段階があります。
- 特定のユーザーのみに接続を許可するなど、ローカル ポートへのアクセスを制限します。
- 特定のユーザーとして ssh を使用して、PostgreSQL ホストへのパスワードなしの接続を設定します。
- ユーザーがパスワードなしで PostgreSQL にローカル アクセスできるように ssh 接続を許可します。
これにより、セキュリティは、ユーザー アカウントが保護されているかどうか、ssh 設定が適切であるかどうか、またパスワードをどこにも保存する必要がないかどうかに限定されます。
編集:これは、TCP/IP ポートをリッスンするあらゆるデータベースで機能することを付け加えておきます。たまたま PostgreSQL で記述されているだけです。そして、ポート制限を行うには iptables (または Linux の同等の機能) が必要になります。見る これ.
私は lomaxx に同意します:誰かがすでにサーバー上にいるか、サーバーへの幅広いアクセス権 (システム管理者など) を持っている場合、ゲームはほぼ終了です。したがって、必要な程度に安全であると信頼できるサーバーを使用するという考えになります。具体的には:
- システム管理者を信頼する必要があります
- 同じサーバー上でコードを実行している他の人を信頼する必要があります (これが、私にとって共有ホスティングが絶対にダメな理由です)
さらに、環境変数は、この種の認証情報を保存するための一般的な選択肢であるようです。これは、ソースのみにアクセスする場合 (たとえば、開発ボックスを侵害することによって) ソースが直接公開されず、また、ソースを適切にローカライズできることを意味するためです。各サーバー (開発、テストなど)。
プレーンテキスト?それらがあなたのサーバー上にある場合、そのサーバーが不正アクセスを許可しないほど十分に安全であることを願っています。サーバー上の構成ファイルに人々がアクセスできる場合は、ずっと前に何か問題が発生していることになります。
説明:セキュリティ、保守性の観点から(例:ログインを変更する必要がある場合、後で見つけることができますかなど)
@ロマックス:おそらく、誰もが物理サーバーにアクセスできるようにしたくないかもしれません (例:sysadmins) にアクセスしてパスワードを確認します。
ありがとう!
ほとんどの場合、パスワードをプレーン テキスト ファイル (例:Base64を使用)。root アクセス権を持つ決定されたシステム管理者に対して、保存されたパスワードを完全に保護することはできないため、実際に試してみる必要はありません。ただし、単純な難読化により、ショルダー サーファーにパスワードが誤って公開されることを防ぎます。
より複雑な代替方法は、次のいずれかを行う専用の安全なパスワード サーバーをセットアップすることです。
- パスワード復号化サービスを提供します
- 実際には、他の安全性の低いサーバーで使用するためにパスワードを保存します。
使用されるネットワーク プロトコルによっては、tcpdump を使用した不正なシステム管理者から保護できない場合があります。また、デバッガを使用する決意の強いシステム管理者からもおそらく保護できません。その時点で、Kerberos チケットのようなものを検討する時期が来るかもしれません。
対称暗号化キーをバイナリにベイクし、そのバイナリが起動時にディスク上のファイルから暗号化されたユーザー名/パスワードを読み取るようにすることができます。
ただし、コードはソース リポジトリのどこかに保存される可能性が高いため、これは実際には難読化以上のものではありません。
ファイアウォールとプライベート ネットワーク バブルを使用して物理的およびネットワーク上の両方でサーバーへのアクセスを制御し、アクセス許可をロックダウンしてパスワードを平文で (または Base64 でエンコードして) ディスクに保存することをお勧めします。 Web アプリの実行ユーザーに送信します。
データベース サーバーをロックダウンして、IP による Web アプリ マシンからの接続のみを受け入れるようにすることもできます。
結局のところ、問題は、キー (DB ユーザー名とパスワードのペア) を Web アプリでプログラム的に無人で使用できるようにする必要があることです。