Comment changer / modifier l'ID utilisateur dans un script bash pour exécuter des commandes dans le même script?

12

Existe-t-il un moyen de changer l'identité de l'utilisateur dans un script (exécuté en tant que root dans le cadre d'un processus d'installation) pour exécuter certaines commandes sans appeler de script externe, puis revenir à rootpour exécuter d'autres commandes?

Sorte de:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...
a1an
la source
Vous devriez jeter un oeil à cette réponse stackoverflow.com/a/17758312/1243547
Klaus

Réponses:

27

Non. Mais vous pouvez utiliser sudopour exécuter un shell et utiliser un hérédoc pour l'alimenter en commandes.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami
Ignacio Vazquez-Abrams
la source
Cela fait sûrement le travail en gardant les choses ensemble dans le même script et peut également utiliser la substitution de commandes si tout est encapsulé avec le crochet de fermeture une ligne après EOF
a1an
Cette réponse est meilleure que toutes les réponses à la question que celle-ci reproduit .
Dan Dascalescu
1
Je me demande presque, si je devais faire cela, je n'utiliserais pas EOF, et changerais plutôt le nom de l'hérédoc en SUDO. De cette façon, je me souviendrais que je cours en tant que super utilisateur dans le code contenant.
Joe Heyming
Pour une raison quelconque, il semble qu'en définissant des variables dans la commande heredoc, les variables ne sont pas définies. Si j'essaye BLA="something"puis par exemple echo "In: $BLA":, il semble que BLA soit vide
Efren