Eu quero ser capaz de configurar um usuário remoto que possa atualizar um banco de dados do PostgreSQL em um servidor de produção.
Eu tenho duas máquinas, uma é um servidor local que eu uso como um sistema de comando e controle, chamado Controlling_Machine
. Esta máquina deve fazer login no meu servidor remoto ( Remote_Server
) em execução na produção e atualizar um banco de dados Database_A
.
Terminologia
Controlling_Machine
: Uma caixa linux que pode acessar a Internet, mas sites por trás de um firewall e não aceita conexões de entrada. (Não pode ser acessado remotamente.)
Remote_Server
: Uma VM de produção do Centos ou do Ubuntu em execução na nuvem.
DB_User
: A conta de usuário no PostgreSQL que pode gravar somente em um banco de dados específico.
Server_User
: a conta de usuário que o SSH está no servidor.
Database_A
: O banco de dados que eu quero que seja atualizado remotamente por meio do controle da máquina.
Até agora eu pensei em duas maneiras de habilitar o acesso remoto ao banco de dados
1. Use uma combinação de usuário remoto e usuário do banco de dados local
Faça o login Server_User
no servidor via SSH e restrinja todo o acesso de leitura, exceto para a sua pasta pessoal. Este usuário pode então acessar o banco de dados com o DB_User
para este propósito.
-
Eu não quero que o Server_User
seja capaz de ler qualquer outra pasta, não / etc not / media nada além de home. Eu quero que eles sejam severamente restritos.
-
Eu não quero que este usuário possa visualizar processos em execução ou acessar qualquer outra coisa.
-
A ideia é que, se Controlling_Machine
que lança Server_User
for comprometido e o atacante fizer login em Remote_Server
, quero garantir que o único dano que eles possam fazer é Database_A
.
Todo o processo seria:
Controlling_Machine
- > Remote_Server
- > Database_A
2. Use um usuário de banco de dados remoto e exponha o PostgreSQL à internet pública
A outra maneira, provavelmente mais simples, de obter esse resultado é permitir o acesso público ao banco de dados PostgreSQL para que eu possa fazer o login com um usuário para o banco de dados. Isso significa que não preciso fazer outro usuário apenas para o Remote_Server
, pois ele não está mais envolvido na transação.
-
Mas isso é tão seguro quanto uma configuração SSH de usuário remoto em Remote_Server
? Eu gostaria de usar uma chave privada / pública para isso.
-
Posso definir o PostgreSQL para permitir que apenas um banco de dados seja acessado remotamente?
Todo o processo seria:
Controlling_Machine
- > Database_A
O que é mais seguro?
Eu gostaria de usar o método mais seguro possível. Se colocar o PostgreSQL em meu IP público é muito arriscado, então terei que manter o acesso ao banco de dados local no servidor de produção e fazer login remotamente via SSH.
Além disso, se essa é a maneira mais segura, como eu restringi esse usuário Linux remoto para nada além de fazer login no PostgreSQL localmente com DB_User
(depois de logar remotamente via SSH com Server_User
)