Por que um shell é fornecido ao usuário para o PostgreSQL?

10

cat /etc/passwd |grep postgre

postgres:x:115:127:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

apt-cache show postgresql

Package: postgresql
Priority: optional
Section: database
Installed-Size: 65
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PostgreSQL Maintainers <pkg-postgresql-public@lists.alioth.debian.org>
Architecture: all
Source: postgresql-common (136)
Version: 9.1+136
Depends: postgresql-9.1
Filename: pool/main/p/postgresql-common/postgresql_9.1+136_all.deb
Size: 5468
MD5sum: 34f5a1373ad5cd0b6f5aa3e7af06c9e7
SHA1: 6f271758bd51c23614b12fd63fb711ecfa43e9e5
SHA256: e8921a22b560e81f57a2a00001e31ba1036f67a8e7f151bf8f977b4919fc559a

Posso substituir isso /bin/bashpor /bin/false?

Smile.Hunter
fonte
1
@Jorge Castro, minha pergunta é: por que existe um shell para o usuário do PostgreSQL, não por que existe um usuário para o PostgreSQL?
Smile.Hunter

Respostas:

4

Existe um shell porque usamos o PostgreSQL na linha de comando como usuário do PostgreSQL.


fonte
Então, não usamos o MySQL como usuário do MySQL, certo? Acho que esse usuário foi usado internamente no sistema, isso significa que não devo removê-lo /bin/bashpara manter meu PostgreSQL funcionando corretamente. Obrigado mesmo assim!
Smile.Hunter
2

O Postgres é executado em uma conta de usuário especial do sistema operacional por motivos de segurança. Essa conta é criada em sua máquina quando o instalador é executado e, a menos que seja substituída na linha de comando, será chamada "postgres".

Em sistemas operacionais do tipo Unix, como Linux e Mac OS X, a conta é configurada sem uma senha e os usuários geralmente nunca precisam se preocupar com isso novamente. Fonte .

Também não é uma boa prática editar o arquivo passwd manualmente. Você deve usar o comando:

sudo passwd postgres
ThiagoPonte
fonte
2
Obrigado, mas quero saber por que existe um "shell bash" para um usuário do PostgreSQL. Aprendi que essa permissão faz com que alguém faça login no postgresql e, de alguma forma, obtenha um shell bash que não faz sentido para um usuário de serviço que eu faria nunca efetuou login no. (Eu vejo outro usuário por mais serviços como apache2, mysql, eles não exigida shell bash para seus usuários)
Smile.Hunter
1

Se um administrador de servidor usa sudoe não toma cuidado com o ambiente e umask que isso resulta, trabalhar no banco de dados pode acabar criando arquivos em locais não desejados ou com permissões não desejadas.

A atribuição de um shell ao usuário permite que os administradores efetuem login como postgres e façam o trabalho no shell desse usuário. Descobrir sudocomo a fonte de mensagens de erro inespecíficas do servidor seria muita dor de cabeça.

Se você não precisar disso e tiver certeza de que nunca chamará binários do postgres de maneira tão propensa a erros, poderá remover com segurança o shell:

usermod --shell /bin/false postgres

Lembre-se de que, para se tornar root, você ainda pode se tornar qualquer pessoa, incluindo usuários sem shells válidos:

su --shell /bin/bash postgres

Fonte autorizada:

Às vezes, você deseja efetuar login como esse usuário para poder executar certos tipos de administração ou correções especiais. Por exemplo, se você precisar executar o pg_resetxlog, provavelmente desejará fazer login como postgres, a menos que esteja muito confiante de que suas invocações su ou sudo estejam corretas e não atrapalhe as permissões do diretório do banco de dados de maneiras estranhas. - Peter Eisentraut, desenvolvedor do PostgreSQL

ansioso
fonte
Essa resposta é melhor que a resposta aceita. Não é necessário que um shell de login possa executar comandos como um determinado usuário (o que o sudo faria). Muitos subsistemas Ubuntu têm / bin / false ou / usr / sbin / nologin como shell de login e funcionam bem, sem abrir novas maneiras de acessar remotamente um sistema.
Arielf 24/09