46 votes

Exécuter une partie d'un script bash script en tant qu'utilisateur différent

Existe-t-il un moyen de faire en sorte qu'une partie d'un script s'exécute en tant qu'utilisateur différent (non root) ? Si cela peut aider, la partie à exécuter en tant qu'utilisateur différent se trouve à la fin du script.

Editer :
OS -> Ubuntu 9.04

51voto

sblom Points 173

Utilisez la commande sudo dans le script.

Dans le formulaire :

sudo -u username command

la commande sudo s'exécute commande en tant qu'utilisateur Nom d'utilisateur .

Si le script est exécuté en tant que root, je ne pense pas qu'il demandera un mot de passe. Sinon, cet article explique comment utiliser sudo avec mot de passe en une seule ligne de commande ? Cet article explique comment utiliser le sudo sans mot de passe ?

10voto

AXE Labs Points 707

# I=like :

#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"

echo 1: $USER

#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_

echo 3: $USER

# ./run

1: root
2: nobody
3: root

7voto

DaveParillo Points 14135

Cette réponse est bon, mais le conseil de défaut de serveur est légèrement dangereux - il permettrait à n'importe qui d'exécuter n'importe quoi en tant que root ! Je poste donc ici parce que je ne peux pas formater le commentaire.

Je recommanderais d'utiliser visudo pour donner les permissions dont vous avez besoin aussi précisément que possible. Type de fichier visudo et ajoutez une ligne comme :

username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2

Si vous avez besoin d'exécuter la même chose sur plusieurs hôtes, vous pouvez l'ouvrir avec :

username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2

Mais je n'utiliserais **ni l'un ni l'autre :

username ALL=(ALL) NOPASSWD: ALL

o nom d'utilisateur nom d'hôte = ALL

Les page de manuel sudoer contient de nombreux détails sanglants

4voto

burtsevyg Points 227

Pour sonarqube :

sudo -u sonar /usr/bin/sonar start

sonar est le nom de l'utilisateur utilisé pour exécuter la commande /usr/bin/sonar start

4voto

dparalen Points 41

Ainsi, la fin d'un script sera exécutée par un utilisateur différent (root). Veuillez noter que le $[LINENO+2] y exit $? appels. Ils sont nécessaires pour que la fin du script ne s'exécute qu'une seule fois et pour préserver le code de sortie de la fonction sudo appel.

#!/bin/bash                                                                                                                                                                                                                                  
echo $USER                                                                                                                                                                                                                                      

# pipe the rest of this script via a sudo call                                                                                                                                                                                                                                         
tail -n +$[LINENO+2] $0 | exec sudo bash                                                                                                                                                                                                     
exit $?                                                                                                                                                                                                                                     
echo $USER
exit 1

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X