Puis-je changer d'utilisateur dans Vagrant bootstrap script shell?
Modifier Apparemment, le problème c'est que je l'ai fait
su - postgres -c "commands, commands, commands"
,
c'est, a passé une commande de su
, plutôt que d'essayer de les énumérer ci-dessous su
, car ces commandes (ci-dessous su
) ne sont pas affectés par su
. /Modifier
Edit 2: Voir David Braun réponse à une bien meilleure solution: https://stackoverflow.com/a/22947716/694469
Je ne peux pas changer d'utilisateur (su - postgres
) dans un Vagabond bootstrap shell provisionnement script? (Pourquoi pas?)
Je suis en train d'écrire un script de ce type. Dans ce script, je n':
echo '===== Creating PostgreSQL databases and users'
su - postgres
psql -c "
create user SomeUserName password '...';
alter user ...;
"
Ici, psql
devraient tenter de se connecter en tant qu'utilisateur postgres
. Ce qui se passe, cependant, est que su - postgres
apparemment échoue, et la coquille de tentatives de connexion en tant qu'utilisateur racine. (Apparemment, racine est l'utilisateur qui exécute le Vagabond bootstrap script shell.)
Si cette erreur s'affiche et la psql commandes ne sont pas invoqués:
psql: FATAL: le rôle du "root" n'existe pas
Remplacement su - postgres
avec sudo su - postgres
n'a aucun effet (je pense que le script est déjà exécuter en tant qu' racine.)
J'ai ajouté id
(qui affiche l'ID de l'utilisateur courant) avant et après su - postgres
, et id
imprime uid=0(root) gid=0(root) groups=0(root)
à la fois avant et après su
a été appelé. Donc autant que je peux dire, su - postgres
est ignorée? Et un certain exit
, plus tard, lorsque je tente de revenir à la racine de l'utilisateur, quitte le script bootstrap complètement 🙁
Cependant. Après avoir fait vagrant ssh
, je suis en mesure de sudo su - postgres
juste bien, et puis commencer à psql
. Mais pas à partir à l'intérieur de l'approvisionnement script.
(Une solution de contournement consiste à spécifier -h 127.0.0.1 --username postgres
quand je l'appelle psql
(plutôt que de changer d'utilisateur pour postgres). Et aussi permettre PostgreSQL confiance pour l'authentification basée sur les VM connexions locales.)
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr si vous pouvez changer d'utilisateur dans l'Errance des shell scripts qui peuvent nécessiter la saisie de l'utilisateur qui vous ne pouvez pas le donner quand le script est en cours d'exécution dans le provisioner... mais pourquoi ne pas simplement spécifier l'utilisateur avec la commande psql?
--command COMMAND
comme unsu
option, je pourrais avoir obtenu tout à travailler, finalement. Je suppose que ça explique tout, et le problème est que je ne suis pas trop familier avec Bash, plutôt que quelque chose de lié à l'Errance. (?)--username
suggestion. (J'ai fait mention à la fin de la question: "Une solution de contournement consiste à spécifier-h 127.0.0.1 --username postgres
".)J'ai juste trouvé ceci en cherchant un moyen d'exécuter Vagrant fournisseur de scripts non root, et que vous souhaitez ajouter une explication pour le comportement observé, ce qui est tout à fait fondamental Unix connaissances qui pourraient être utiles pour les lecteurs de savoir.
L'exécution d'un programme (tel que /bin/sh, sudo ou su) dans un script shell ne peut pas changer quoi que ce soit dans le contexte (répertoire de travail, l'exécution de l'utilisateur, etc) dans lequel il s'exécute, seulement de définir le contexte du processus, il crée (et seulement changer le uide s'exécute en tant que root - uid 0). C'est aussi pourquoi le cd est d'une interface de commande dans les coquilles. su est un programme setuid (notez le "s" lorsque vous essayez la commande "ls-l
which su
"), ce qui signifie qu'il sera lancé en tant qu'utilisateur possédant le programme (racine), plutôt que comme l'utilisateur en cours d'exécution.LHP est juste: il n'est pas vraiment un vagabond question. J'avais besoin de le faire il y a quelques temps et voici comment je l'ai résolu:
Peut-être que cela pourrait être utile pour quelqu'un, mais une autre solution évidente seront il suffit de lancer un deuxième script à l'aide de sudo.
FIXE: Merci Macattack. J'ai écrit directement dans stackoverflow et toujours pas testé.
EDIT: La question a été édité et maintenant sa description, et la plupart des réponses, mettent l'accent sur "Comment créer une base de données postgres avec le droit de l'utilisateur", plutôt que de changer d'utilisateur dans un vagabond script.
;;
à la fin de chaquecase
. Autres que que, en grande solution, c'était juste ce que je cherchais."
à la ligneecho doing the vagrant user's tasks
! La syntaxe correcte seraitecho "doing the vagrant user's tasks"