Estou seguindo um guia de instalação do PostgreSQL que aconselha (após a instalação do banco de dados pela primeira vez), configurar uma senha para o postgres
usuário:
alter role postgres password '<<super-secret-password>>';
... e, em seguida, altere o pg_hba.conf
arquivo para que a linha para soquetes locais (Unix) seja:
local all all md5
... ao invés de:
local all all trust
Parece-me que isso apenas adiciona uma camada extra de defesa, mas para alguém tirar vantagem local all all trust
, ele primeiro teria que obter acesso à máquina local, certo?
Pergunta 1: entendi corretamente que, se o acesso à máquina local for protegido por senha (senha UNIX), não haverá preocupações com um local all all trust
?
Além disso, o mesmo guia também recomenda que um .pgpass
arquivo esteja localizado em minha pasta pessoal (acho que para scripts de backup que não podem ser solicitados a fornecer uma senha). A senha é armazenada em texto não criptografado nesse ~/.pgpass
arquivo:
echo 'localhost:5432:*:postgres:<<super-secret-password>>' > .pgpass
chmod 0600 ~/.pgpass
Pergunta 2: Então, qual é o benefício de usar md5
e não trust
para soquetes locais? Se alguém obtiver acesso à máquina local, ele também poderá ler o .pgpass
arquivo. Estou perdendo alguma coisa?
Para a pergunta 1 : usar a autenticação md5 para conexões locais é particularmente útil quando você tem uma máquina multiusuário ou se você pode adicionar contas de usuário adicionais para amigos/família/colegas de trabalho/quem quer que seja algum dia.
Se você é e continuará sendo o único usuário real em seu sistema, há menos benefícios, mas ainda pode ser útil: suponha que algum malfeitor consiga invadir alguma conta do sistema como 'www'. Ele pode não conseguir fazer muito dessa conta sem privilégios de root. Mas se você deixou seu pg_hba.conf aberto para 'confiar' em todos os usuários locais, o bandido pode fazer qualquer coisa em seu banco de dados, provavelmente incluindo assumir o controle da conta de usuário 'postgres' também e tentar fazer root no seu sistema, roubar seus dados ou o que quer que seja de lá.
Para a pergunta 2 : você poderia usar um arquivo .pgpass com, digamos, apenas credenciais de usuário 'somente leitura', portanto, se uma compra incorreta assumisse essa conta, ele não teria acesso de nível de superusuário ao banco de dados. Se você armazenar a senha para o usuário postgres em seu ~/.pgpass, então sim, seria "game over" para sua instância postgres se um bandido assumisse a conta do usuário local. Novamente, essa documentação foi escrita tendo em mente o possível caso de uso de uma máquina multiusuário, por exemplo, diferentes usuários locais podem ter ou usar várias contas de usuário do Postgres, não necessariamente contas de superusuário.