web-dev-qa-db-fra.com

Changer d'utilisateur en utilisateur «postgres» sur macOS entraîne une erreur «su: Désolé»

Les installateurs Postgres aimablement fournis à la communauté par EnterpriseDB.com créent un compte utilisateur postgres sur macOS comme cela est courant.

Dans une session de console dans ( Terminal.app , je dois passer à cet utilisateur. Mon objectif est d'exécuter un éditeur de texte avec les privilèges de cet utilisateur afin de pouvoir modifier le pg_hba.conf fichier contrôlant les règles d'authentification des utilisateurs Postgres.

Quand j'essaye:

su - postgres

… Je suis invité à entrer le mot de passe de l'utilisateur, que j'ai entré avec succès, mais je reçois le message d'erreur:

su: Désolé

Je suis sûr que le mot de passe est correct. Que puis-je faire pour accéder à l'utilisateur postgres?

3
Basil Bourque

Sudo su postgres

Après avoir trouvé ceci Question fermée sur le débordement de la pile et son doublon , je posterai ici les solutions trouvées et .

➥ Vous devez utiliser la commande Sudo combinée avec la commande su.

Sudo su postgres

Lorsque vous y êtes invité, entrez votre mot de passe utilisateur administrateur macOS plutôt que le mot de passe utilisateur postgres. À ce stade, votre utilisateur administrateur Mac est celui qui exécute la commande Sudo, pas l'utilisateur postgres.

Bien que je ne comprenne pas pourquoi nous devons combiner le Sudo avec le su, cela fonctionne en effet pour moi dans macOS Mojave . Je n'ai pas trouvé cette astuce parmi mes différents efforts de recherche liés à BSD et Linux, donc c'est peut-être un Mac uniquement Apple chose, peut-être une mesure de sécurité supplémentaire. Ou peut-être dans les OS de style Unix , la commande su doit être exécutée par l'utilisateur root, et sous macOS, le compte root est désactivé par défaut pour des raisons de sécurité - notre compte utilisateur administrateur Mac est moins puissant que root, et peut ne pas être autorisé par défaut à exécuter su? Ne vous en faites pas, la solution de contournement fonctionne.

Alternative moderne: Sudo -u

Selon à Craig Ringer et à Erwin Brandstetter , la forme la plus moderne est:

Sudo -u postgres -i

Selon cette page :

  • -u signifie "exécuter une commande spécifiée en tant que cet utilisateur spécifié".
  • postgres spécifie le nom d'utilisateur sous lequel nous voulons exécuter la commande.
  • -i simule une connexion initiale, ce qui signifie que le shell sera initialisé en exécutant les scripts de démarrage de cet utilisateur.
  • Aucune commande n'est fournie, donc un shell interactif est exécuté.

Pour plus de discussion sur les approches plus anciennes et plus récentes, voir cette question sur le site sœur, Quelle est la différence entre Sudo su - postgres et Sudo -u postgres? . La réponse de Craig Ringer conseille: (a) Oubliez Sudo su, et (b) utilisez Sudo -u au lieu.

Exécuter des applications en tant qu'utilisateur postgres

Pour exécuter une session psql en tant qu'utilisateur postgres:

Sudo -u postgres psql

Pour exécuter l'application nanoéditeur de texte en tant qu'utilisateur postgres:

Sudo -u postgres nano
3
Basil Bourque

Le programme d'installation EBD demande un mot de passe lors de l'installation mais il est destiné à l'utilisateur de la base de données, pas à l'utilisateur postgres Unix, qui n'a pas de mot de passe.

Ceci est mentionné dans Postgres, mots de passe et installateurs sur le site EDB. Citation:

Sur les systèmes d'exploitation de type Unix tels que Linux et Mac OS X, le compte est configuré sans mot de passe et les utilisateurs n'ont généralement plus à s'en soucier.

L'explication la plus plausible à su - postgres ne fonctionne pas, c'est que vous confondez le mot de passe de la base de données avec le mot de passe du système d'exploitation.

Faire su - postgres utilisable, le mot de passe du système d'exploitation devrait être défini en premier, ce qui pourrait être fait avec:

$ Sudo passwd postgres

Cela est également vrai pour PostgreSQL empaqueté dans les distributions Linux. En fait, les packages PostgreSQL pour Linux vont même plus loin et ne demandent pas de mot de passe pour le superutilisateur de la base de données, ce qui permet une installation entièrement automatisée. Tout comme le mot de passe du système d'exploitation n'est pas nécessaire si Sudo est toujours utilisé, un mot de passe de base de données n'est pas nécessaire si seule la méthode d'authentification peer par défaut est utilisée par l'utilisateur postgres.

3
Daniel Vérité