Os usuários do PostgreSQL usam autenticação por pares em soquetes unix por padrão, onde o usuário unix deve ser o mesmo que o usuário do PostgreSQL. Então, as pessoas freqüentemente usam su
ou sudo
se tornam o postgres
superusuário.
Costumo ver pessoas usando construções como:
sudo su - postgres
ao invés de
sudo -u postgres -i
e eu estou me perguntando o porquê. Da mesma forma, eu já vi:
sudo su - postgres -c psql
ao invés de
sudo -u postgres psql
Sem a liderança, sudo
as su
versões fariam algum sentido se você estivesse em uma plataforma antiga sudo
. Mas por que você usaria um UNIX ou Linux não pré-hísmico sudo su
?
postgresql
shell
sudo
su
Craig Ringer
fonte
fonte
Respostas:
Esqueço
sudo su
Não há benefício em usar
sudo su
, é um hábito anacrônico de quando as pessoas estavam acostumadas a usarsu
. As pessoas começaram a atacarsudo
quando as distros do Linux pararam de definir uma senha root e fizeramsudo
o único caminho para acessar a conta root. Em vez de mudar seus hábitos, eles apenas usavamsudo su
. (Eu era um deles até relativamente recentemente, ao usar caixas comsudoers
configurações, me forçou a mudar meu hábito).Usar
sudo -u
Para um shell de login,
sudo -u postgres -i
é preferívelsudo su - postgres
. Não requer que o usuário tenha acesso root/etc/sudoers
, ele precisa apenas do direito de se tornar usuáriopostgres
. Também permite impor melhores controles de acesso.Para execução de comando
é superior à alternativa:
porque você não precisa fazer aspas duplas e outros metacaracteres do shell, além das outras vantagens de segurança de não precisar de root. Você provavelmente acidentalmente começará a escrever:
às vezes, o que não funciona corretamente.
Finalmente, é muito mais fácil definir variáveis de ambiente via
sudo
, por exemplo,do que via
su
. (Aqui, aPATH
configuração é necessária parainitdb
encontrar opostgres
executável correto ).Tão. Esqueça o
su
comando existe. Você não precisa mais disso. Para quebrar o hábito, alias-lo para algo que irá imprimir um erro. (Alguns scripts de configuração do init e do pacote ainda são usados,su
portanto você não pode removê-lo).Veja também:
fonte