限制远程用户只能访问远程数据库的方法

限制远程用户只能访问远程数据库的方法

我希望能够设置一个可以更新生产服务器上的 PostgreSQL 数据库的远程用户。

我有两台机器,一台是本地服务器,我用作命令和控制系统,名为Controlling_Machine.这台机器用于登录Remote_Server在生产中运行的我的远程服务器()并更新数据库Database_A

术语

Controlling_Machine:可以访问互联网的 Linux 机器,但站点位于防火墙后面并且不接受传入连接。 (无法远程访问。)

Remote_Server:在云中运行的 Centos 或 Ubuntu 生产虚拟机。

DB_User:PostgreSQL 上只能写入一个特定数据库的用户帐户。

Server_User:通过 SSH 连接到服务器的用户帐户。

Database_A:我想通过控制机远程更新数据库。

到目前为止我想到了两种实现远程访问数据库的方法

1.使用远程用户和本地数据库用户的组合

通过 SSH登录Server_User服务器并限制除主文件夹之外的所有读取访问权限。然后,该用户可以为此目的使用 登录数据库DB_User

  1. 我不希望Server_User能够读取任何其他文件夹,不是 /etc 不是 /media 除了 home 之外什么都没有。我希望他们受到严格限制。

  2. 我不希望该用户能够查看正在运行的进程或访问其他任何内容。

  3. 我的想法是,如果Controlling_Machine启动Server_User受到损害并且攻击者登录Remote_Server,我想确保他们能造成的唯一损害是Database_A

整个过程是:

Controlling_Machine-> Remote_Server->Database_A

2. 使用远程数据库用户并将 PostgreSQL 公开到公共互联网

实现此结果的另一种可能更简单的方法是启用 PostgreSQL 数据库公共访问,以便我可以使用数据库用户登录。这意味着我不必仅为 建立另一个用户Remote_Server,因为它不再参与交易。

  1. 但这与远程用户 SSH 设置一样安全吗Remote_Server?我想为此使用私钥/公钥。

  2. 我可以将 PostgreSQL 设置为仅允许远程访问一个数据库吗?

整个过程是:

Controlling_Machine->Database_A

什么更安全?

我想尽可能使用最安全的方法。如果将 PostgreSQL 放在我的公共 IP 上风险太大,那么我将不得不将数据库访问保留在生产服务器本地并通过 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)子 shell,这对于您的情况来说是一个更大的问题。

因此,我首先会看看您希望用户做什么。如果仅限于进行备份、恢复备份和一些其他功能,那么创建一个仅限于执行此功能的小程序,或者仅允许使用命令将命令文件复制到服务器可能更有意义。 cron 作业然后处理命令(并丢弃允许的内容之外的任何内容)。

相关内容