Qual è la differenza tra sudo su - postgres e sudo -u postgres?


36

Gli utenti di PostgreSQL eseguono il peer di autenticazione sui socket unix per impostazione predefinita, in cui l'utente unix deve essere uguale all'utente PostgreSQL. Quindi le persone usano spesso suo sudoper diventare il postgressuperutente.

Vedo spesso persone che usano costrutti come:

sudo su - postgres

piuttosto che

sudo -u postgres -i

e mi chiedo perché. Allo stesso modo, ho visto:

sudo su - postgres -c psql

invece di

sudo -u postgres psql

Senza il comando sudole suversioni avrebbero un senso se tu fossi su una vecchia piattaforma senza sudo. Ma perché su un UNIX o Linux non preistorico dovresti usare sudo su?


Risposte:


40

Dimenticare sudo su

Non vi è alcun vantaggio nell'uso sudo su, è un'abitudine anacronistica da quando le persone erano abituate ad usare su. Le persone hanno iniziato a virare sudodi fronte quando le distribuzioni Linux hanno smesso di impostare una password di root e hanno fatto sudol'unico modo per accedere all'account di root. Invece di cambiare le loro abitudini, hanno appena usato sudo su. (Sono stato uno di loro fino a tempi relativamente recenti quando l'uso di scatole con sudoersconfigurazioni mi ha costretto a cambiare abitudine).

Uso sudo -u

Per una shell di accesso, sudo -u postgres -iè preferibile sudo su - postgres. Non richiede che l'utente abbia accesso come root /etc/sudoers, hanno solo bisogno del diritto di diventare utente postgres. Inoltre, consente di applicare controlli di accesso migliori.

Per l'esecuzione del comando

sudo -u postgres psql -c "SELECT 1"

è superiore all'alternativa:

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

in quanto non è necessario evitare doppie virgolette e altri metacaratteri della shell, nonché gli altri vantaggi di sicurezza di non aver bisogno di root. Probabilmente finirai per caso a scrivere:

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

a volte, che non funzionerà correttamente.

Infine, è molto più semplice impostare variabili di ambiente tramite sudo, ad es

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

che via su. (Qui PATHè necessaria l' impostazione per initdbpoter trovare il postgresfile eseguibile corretto ).

Così. Dimentica che il sucomando esiste. Non ne hai più bisogno. Per rompere l'abitudine, alias a qualcosa che stamperà un errore. (Alcuni script di installazione di pacchetti e init continuano a essere utilizzati, suquindi non è possibile rimuoverli).

Guarda anche:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.