リモートユーザーがリモートデータベースにのみアクセスできるように制限する方法

リモートユーザーがリモートデータベースにのみアクセスできるように制限する方法

本番サーバーでPostgreSQLデータベースを更新できるリモートユーザーを設定したいと思います。

私は2台のコンピュータを持っています。1つはコマンドと制御システムとして使用されるローカルサーバーですControlling_Machine。このコンピュータは、本番環境で実行されているリモートサーバー()にログインRemote_Serverし、データベースを更新するために使用されますDatabase_A

用語

Controlling_Machine:インターネットにアクセスできますが、サイトはファイアウォールで保護されており、着信接続を許可しないLinuxシステムです。 (リモート接続はできません。)

Remote_Server:クラウドで実行されているCentosまたはUbuntuプロダクション仮想マシン。

DB_User:特定のデータベースにのみ書き込むことができるPostgreSQLのユーザーアカウント。

Server_User:SSH経由でサーバーに接続するためのユーザーアカウント。

Database_A:制御マシンを介してリモートでデータベースを更新したいです。

これまで、データベースにリモートでアクセスする2つの方法を考えてみました。

1. リモートユーザーとローカルデータベースユーザーを組み合わせて使用​​する

SSHを介してサーバーにログインServer_Userし、ホームフォルダを除くすべてのエントリへの読み取りアクセスを制限します。これにより、このユーザーはこの目的でログインデータベースを使用できますDB_User

  1. Server_User私は/ etc以外の/メディア以外のホーム以外のフォルダを読むことを望んでいません。強く制限されることを願っています。

  2. このユーザーが実行中のプロセスを表示したり、他のものにアクセスしたくありません。

  3. Controlling_MachineブートがServer_User破損して攻撃者がログインした場合、Remote_Server彼らが与える可能性のある唯一のダメージは次のようになることを確認したいと思いますDatabase_A

全体のプロセスは次のとおりです。

Controlling_Machine-> Remote_Server->Database_A

2.リモートデータベースユーザーを使用し、PostgreSQLをパブリックインターネットに公開する

この結果を得るもう1つの簡単な方法は、データベースユーザーを使用してログインできるようにPostgreSQLデータベースへのパブリックアクセスを有効にすることです。つまり、Remote_Serverもはや取引に関与していないので、他のユーザーを設定する必要はありません。

  1. しかし、これはリモートユーザーSSH設定と同じくらい安全ですかRemote_Server?これには秘密鍵/公開鍵を使用したいと思います。

  2. 1つのデータベースにのみリモートアクセスを許可するようにPostgreSQLを設定できますか?

全体のプロセスは次のとおりです。

Controlling_Machine->Database_A

何がより安全ですか?

できるだけ安全な方法を使いたいです。パブリックIPにPostgreSQLを配置するのが危険すぎる場合は、本番サーバーへのローカルデータベースアクセスを維持し、SSH経由でリモートでログインする必要があります。

また、これが最も安全な方法であれば、このリモートLinuxユーザーがPostgreSQLにローカルでのみログインするように制限するにはどうすればよいですかDB_User(SSH経由でリモートでログインした場合Server_User

ベストアンサー1

ssh私はユーザーが実行できるコマンドを使用して制限することを選択します。少なくともこれを行うと、接続が安全であることがわかります。次の項目でこれを行うことができます/etc/ssh/sshd_config

Match User your_user
   X11Forwarding no
   AllowTcpForwarding no
   ForceCommand your-command arg1 arg2

選択したデータベースを強制的に使用するパラメータを渡す場合は、your-commandこの方法が役立ちます。 (または、Server_Userの公開鍵に基づいてAuthorized_keysファイルでこれを実行できます。)

PostgreSQLの詳細はわかりませんが、データベースの操作に使用するコマンドラインツール内で作業しているデータベースを変更することもできます。もしそうなら、あなたは物事を制限することはできません。一時的に(bash)サブシェルを開くこともできますが、これはあなたにとってより大きな問題です。

それでは、まずユーザーが何をしたいのかを見てみましょう。バックアップの実行、バックアップの復元、およびその他の一部の機能に制限されている場合は、この機能のみを実行するように制限された小さなプログラムを作成するか、コマンドを使用してサーバーにコマンドファイルをコピーすることを許可する方が合理的です。その後、cronジョブはコマンドを処理します(許可されているもの以外のすべてのエントリは削除されます)。

おすすめ記事