本番サーバーで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
。
Server_User
私は/ etc以外の/メディア以外のホーム以外のフォルダを読むことを望んでいません。強く制限されることを願っています。このユーザーが実行中のプロセスを表示したり、他のものにアクセスしたくありません。
Controlling_Machine
ブートがServer_User
破損して攻撃者がログインした場合、Remote_Server
彼らが与える可能性のある唯一のダメージは次のようになることを確認したいと思いますDatabase_A
。
全体のプロセスは次のとおりです。
Controlling_Machine
-> Remote_Server
->Database_A
2.リモートデータベースユーザーを使用し、PostgreSQLをパブリックインターネットに公開する
この結果を得るもう1つの簡単な方法は、データベースユーザーを使用してログインできるようにPostgreSQLデータベースへのパブリックアクセスを有効にすることです。つまり、Remote_Server
もはや取引に関与していないので、他のユーザーを設定する必要はありません。
しかし、これはリモートユーザーSSH設定と同じくらい安全ですか
Remote_Server
?これには秘密鍵/公開鍵を使用したいと思います。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ジョブはコマンドを処理します(許可されているもの以外のすべてのエントリは削除されます)。