Quelle est la différence entre sudo su - postgres et sudo -u postgres?

36

Les utilisateurs de PostgreSQL authentifient l'authentification homologue sur les sockets unix par défaut, où l'utilisateur unix doit être identique à l'utilisateur PostgreSQL. Donc, les gens utilisent fréquemment suou sudopour devenir le postgressuperutilisateur.

Je vois souvent des gens utiliser des constructions telles que:

sudo su - postgres

plutôt que

sudo -u postgres -i

et je me demande pourquoi. De même, j'ai vu:

sudo su - postgres -c psql

au lieu de

sudo -u postgres psql

Sans le leader, sudoles suversions auraient un sens si vous étiez sur une ancienne plate-forme sans sudo. Mais pourquoi utiliseriez-vous moins d’UNIX ou de Linux sudo su?

Craig Ringer
la source
En relation avec le site partenaire, DBA Stack Exchange: changer d'utilisateur en utilisateur 'postgres' sur macOS entraîne l'erreur «su: Sorry»
Basil Bourque

Réponses:

40

Oublier sudo su

Il n'y a aucun avantage à utiliser sudo su, c'est une habitude anachronique de l'habitude de consommer su. Les gens ont commencé à virer sudode bord devant quand les distributions Linux ont cessé de définir un mot de passe root et constituent sudole seul moyen d'accéder au compte root. Plutôt que de changer leurs habitudes, ils ont juste utilisé sudo su. (J'étais l'un d'entre eux jusqu'à récemment, quand l'utilisation de boîtes avec des sudoersconfigs m'a obligé à changer d'habitude).

Utilisation sudo -u

Pour un shell de connexion, sudo -u postgres -iest préférable à sudo su - postgres. Cela ne nécessite pas que l'utilisateur ait un accès root /etc/sudoers, mais seulement le droit de devenir utilisateur postgres. Cela vous permet également de mettre en place de meilleurs contrôles d'accès.

Pour l'exécution de commande

sudo -u postgres psql -c "SELECT 1"

est supérieur à l'alternative:

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

en ce sens que vous n'avez pas à double échapper les guillemets et autres métacaractères du shell, ainsi que les autres avantages en matière de sécurité de ne pas avoir besoin de root. Vous allez probablement atterrir accidentellement en écrivant:

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

parfois, ce qui ne fonctionnera pas correctement.

Enfin, il est beaucoup plus facile de définir des variables d’environnement via sudo, par exemple:

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

que via su. (Ici, le PATHréglage est requis pour que vous initdbpuissiez trouver le bon postgresexécutable).

Alors. Oubliez la sucommande existe. Vous n'en avez plus besoin. Pour rompre l'habitude, alias-le à quelque chose qui va imprimer une erreur. (Certains scripts de configuration d'init et de paquet utilisent encore su, vous ne pouvez donc pas le supprimer).

Voir également:

Craig Ringer
la source