web-dev-qa-db-fra.com

déconnecter l'utilisateur actuel du script

J'aimerais créer un script qui:

  1. lancer des commandes
  2. exécuter Sudo su - [un autre nom d'utilisateur]
  3. après avoir quitté [un autre nom d'utilisateur] -> déconnexion

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:

  1. lorsque j'exécute Sudo su - nom d'utilisateur (utilisateurA), je dois fournir mon mot de passe (wolfy) pour me connecter en tant qu'autre utilisateur (utilisateurA). Ensuite, je travaille pendant toute la session avec cet utilisateur (utilisateurA) et lorsque je me déconnecte de cet utilisateur (utilisateurA), je souhaite me déconnecter automatiquement de mon utilisateur (wofly).
  2. utiliser la commande Sudo n'est pas une option
1
Wolfy

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.

5
meuh

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
1
muru

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
1