Passer à l'utilisateur root à l'intérieur du script shell
J'ai un script shell qui doit non racine de compte d'utilisateur pour exécuter certaines commandes, puis changer l'utilisateur root pour exécuter le reste du script. Je suis à l'aide de SUSE11.
J'ai utilisé attendre pour automatiser l'invite de mot de passe. Mais quand je l'utilise
frayer su -
et la commande est exécutée, l'invite réapparaît avec la racine et le reste du script n'est pas exécuté.
Par exemple.
< non-root commands>
spawn su -
<root commands>
Mais après la ligue - le prompt retour de l'utilisateur en tant que root.
Comment exécuter le reste du script.
Le sudo -S option n'aide pas car il ne permet pas de lancer la commande sudo -S de la commande ifconfig qui j'ai besoin de trouver l'adresse IP de la machine.
J'ai déjà passé par ces liens, mais ne pouvait pas trouver une solution:
Script de modification de répertoire de l'utilisateur du homedir dans un script shell
Changer d'utilisateur unix dans un script shell
Merci d'avance
source d'informationauteur Deepti Jain
Vous devez vous connecter pour publier un commentaire.
sudo
va travailler ici, mais vous avez besoin de vous changer de script un peu:Vous avez besoin pour exécuter votre commande dans
<<EOF
bloc et donner le bloc desudo
.Si vous le souhaitez, vous pouvez utiliser
su
bien sûr. Mais vous devez l'exécuter à l'aide deexpect/pexpect
qui le fera entrer le mot de passe pour vous.Mais même cas, vous pouvez gérer pour entrer le mot de passe automatiquement (ou le désactiver) cette construction ne serait pas de travail:
Dans ce cas
root-command
sera exécuté par l'utilisateur, et non pas avec les privilèges de root, parce qu'elle sera exécutée aprèssu
sera fini (su
ouvre un nouveau shell, pas de changements uid du shell courant). Vous pouvez utiliser la même astuce ici bien sûr:Mais maintenant, vous avez la même chose qu'avec les
sudo
.Il existe un moyen facile de le faire sans un second script. Il suffit de mettre ceci au début de votre fichier:
Alors il sera automatiquement exécuté lui-même en tant que root. Bien sûr, cela suppose que vous pouvez
sudo su
sans avoir à fournir un mot de passe, mais c'est hors de portée de cette réponse, pour voir une des autres questions sur l'utilisation de sudo dans des scripts shell pour savoir comment faire.La meilleure façon de le faire serait de créer au moins deux scripts.
Du premier appel, la deuxième avec les privilèges de root. Ainsi, chaque commande vous exécutez dans la seconde script sera exécuté en tant que root.
Par exemple:
runasroot.sh
scriptname.sh
ou tout ce que vous avez besoin.