¿Cuál es la diferencia entre sudo su - postgres y sudo -u postgres?

36

Los usuarios de PostgreSQL autentican entre pares en sockets de Unix de forma predeterminada, donde el usuario de Unix debe ser el mismo que el usuario de PostgreSQL. Entonces, la gente usa con frecuencia suo se sudoconvierte en postgressuperusuario.

A menudo veo personas que usan construcciones como:

sudo su - postgres

más bien que

sudo -u postgres -i

y me pregunto por qué Del mismo modo, he visto:

sudo su - postgres -c psql

en lugar de

sudo -u postgres psql

Sin el líder, sudolas suversiones tendrían sentido si estuvieras en una plataforma antigua sin ella sudo. Pero, ¿por qué usaría UNIX o Linux menos que prehispánico sudo su?

Craig Ringer
fuente
Relacionado en el sitio hermano, DBA Stack Exchange: cambiar de usuario a usuario 'postgres' en macOS da como resultado el error "su: Sorry"
Basil Bourque

Respuestas:

40

Olvidar sudo su

El uso no tiene ningún beneficio sudo su, es un hábito anacrónico de cuando la gente estaba acostumbrada a usar su. La gente comenzó a virar sudocuando las distribuciones de Linux dejaron de establecer una contraseña de root e hicieron sudola única forma de acceder a la cuenta de root. En lugar de cambiar sus hábitos, simplemente lo usaban sudo su. (Fui uno de ellos hasta hace relativamente poco cuando el uso de cajas con sudoersconfiguraciones me obligó a cambiar mi hábito).

Utilizar sudo -u

Para un shell de inicio de sesión, sudo -u postgres -ies preferible sudo su - postgres. No requiere que el usuario tenga acceso de root /etc/sudoers, solo necesita el derecho de convertirse en usuario postgres. También le permite aplicar mejores controles de acceso.

Para ejecutar comandos

sudo -u postgres psql -c "SELECT 1"

es superior a la alternativa:

sudo su - postgres -c "psql -c \"SELECT 1\""

en el sentido de que no tiene que escapar las comillas y otros metacaracteres de shell, así como las otras ventajas de seguridad de no necesitar root. Probablemente aterrizarás accidentalmente escribiendo:

sudo su - postgres -c psql -c "SELECT 1"

a veces, que no funcionará correctamente.

Finalmente, es mucho más fácil establecer variables de entorno mediante sudo, por ejemplo,

sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster

que a través de su. (Aquí, la PATHconfiguración es necesaria para que initdbpueda encontrar el postgresejecutable correcto ).

Asi que. Olvida que el sucomando existe. Ya no lo necesitas. Para romper el hábito, alias a algo que imprima un error. (Sin embargo, algunos scripts de configuración de paquetes y de inicio todavía se usan, supor lo que no puede eliminarlos).

Ver también:

Craig Ringer
fuente