J'aimerais créer un script qui:
Exemple: test.sh
echo "test script"
Sudo su
logout
Si je lance un script comme celui-ci:
echo "test"
Sudo su
whomai
Je reçois le résultat recherché:
[wolfy@ubuntusrv ~ ]# ./test.sh
test
[root@ubuntusrv wolfy]# date
Fri 19 Jun 10:56:52 CEST 2015
[root@ubuntusrv wolfy]# echo bla
bla
[root@ubuntusrv wolfy]# exit
wolfy
[wolfy@ubuntusrv ~ ]#
Comme vous pouvez le constater, le script exécute ma commande echo puis je Sudo s root, où je peux faire ce que je dois faire et après avoir quitté la session root, le script exécutez la dernière commande (whoami).
Mon problème est que je ne peux pas me déconnecter à la fin de ce script.
J'ai besoin d'un moyen de le faire sans privilèges root.
Est-ce que quelqu'un peut m'aider?
Explication supplémentaire:
Peut-être que tout ce que vous voulez faire est:
exec ./test.sh
Ceci remplace votre processus Shell actuel par le script, de sorte que, une fois terminé, il ne reste plus rien à exécuter.
Un logout
dans un script n'a aucune incidence, puisque logout
ne fonctionne que pour les shells de connexion et que les scripts ne sont généralement pas exécutés en tant que shells de connexion.
Il me semble que vous vous connectez via SSH (ou autre chose), que vous vous lancez comme un autre utilisateur et que vous vous déconnectez immédiatement. Dans ce cas, sourcez simplement le script pour que les commandes soient exécutées dans votre Shell actuel. Ensuite, logout
fonctionnera.
Ou bien, vous pouvez utiliser exec
, mais dans ce cas, ce n'est pas logout
qui prend effet - logout
va échouer et la fin du script provoque simplement sa fermeture. Distinction sans différence, je suppose.
Ou, si vous trouvez fastidieux d'utiliser . ./script
, définissez une fonction avec des accolades:
switchuser () {
echo "test script"
Sudo su -
exit
}
Les commandes entre accolades sont exécutées dans le shell actuel et les commandes entre parenthèses dans un sous-shell. Ajoutez ceci à votre .bashrc
, alors vous pouvez simplement faire:
switchuser
Généralement, pour exécuter une commande en tant que root, Sudo
est suffisant.
#!/bin/bash
echo test
Sudo whoami
Si vous insistez pour utiliser su
, pour une raison quelconque, vous pouvez utiliser -c flag:
#!/bin/bash
echo test
Sudo su -c whoami
Et voici le résultat, identique dans les deux cas:
$ ./test.sh
test
[Sudo] password for xieerqi:
root
Si vous voulez entrer dans le shell root, utilisez Sudo -i
serg@ubuntu[/home/xieerqi]
$ Sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi]
$
Avec su:
serg@ubuntu[/home/xieerqi]
$ Sudo su -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this Shell
root@anaconda:/home/xieerqi# date
Fri Jun 19 12:41:06 EEST 2015
root@anaconda:/home/xieerqi# echo blah
blah
root@anaconda:/home/xieerqi# exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi
Si vous voulez exécuter des commandes en tant qu'autre utilisateur, pas seulement root, vous pouvez utiliser Sudo -u username command
$ Sudo -u testuser whoami
testuser
Même idée avec su
:
serg@ubuntu[/home/xieerqi]
$ Sudo su -c bash testuser
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this Shell
testuser@anaconda:/home/xieerqi$ whoami
testuser
testuser@anaconda:/home/xieerqi$ exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi