web-dev-qa-db-fra.com

Linux change d'utilisateur et exécute la commande immédiatement

J'ai un scénario dans lequel je dois passer à un autre utilisateur et après cela, j'ai besoin d'exécuter la commande Linux.

ma commande est quelque chose comme ça

( echo myPassword | Sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh

mais avec cette commande, je passe à l'utilisateur et la commande suivante s'est déclenchée sur l'utilisateur précédent.

Existe-t-il tout ce que je peux accomplir en utilisant le script Shell

8
Akash Sethi

Essayer.

Sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 

voir homme Sudo :

-H

L'option -H (HOME) demande que la stratégie de sécurité définisse la variable d'environnement HOME sur le répertoire de base de l'utilisateur cible (root par défaut) comme spécifié par la base de données de mots de passe. Selon la stratégie, il peut s'agir du comportement par défaut.

-u utilisateur

L'option -u (utilisateur) oblige Sudo à exécuter la commande spécifiée en tant qu'utilisateur autre que root. Pour spécifier un uid au lieu d'un nom d'utilisateur, utilisez #uid. Lors de l'exécution de commandes en tant qu'UID, de nombreux shells nécessitent que le "#" soit échappé avec une barre oblique inverse ("\"). Les politiques de sécurité peuvent restreindre les uids à ceux répertoriés dans la base de données de mots de passe. La stratégie sudoers autorise les uids qui ne sont pas dans la base de données de mots de passe tant que l'option targetpw n'est pas définie. D'autres politiques de sécurité peuvent ne pas prendre en charge cela.

18
αғsнιη

Avec su user -c "sh /path/command.sh" vous pouvez exécuter une commande sous la forme tilisateur.

J'ai testé avec cette commande:

 echo myPassword | Sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"

Après cela, le watch -n fonctionnait comme foobar.

Je pense donc que votre commande devrait fonctionner comme ça:

echo myPassword | Sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"
3
chloesoe

Voici une version plus courte de réponse de αғsнιη :

Sudo -Hu user command
# example: Sudo -Hu root fish
2
joseluisq

Vous pouvez essayer celui-ci:

pkexec - Exécute une commande en tant qu'un autre utilisateur

pkexec [--user username] PROGRAMME [ARGUMENTS ...]

1
Buyduck