logout do usuário atual do script

0

Eu gostaria de criar um script que:

  1. execute alguns comandos
  2. execute sudo su - [outro nome de usuário]
  3. depois que eu saio de [algum outro nome de usuário] - > logout

Exemplo: test.sh

echo "test script"
sudo su
logout

Se eu executar um script como este:

echo "test"
sudo su
whomai

Eu obtenho o resultado desejado:

[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 ~ ]#

Como você pode ver, o script executa meu comando echo e eu sudo su para o root, onde posso fazer o que preciso e depois que eu saio do root execute o script execute o último comando ( whoami ).

Meu problema é que não consigo me fazer logout no final deste script.

Eu preciso de uma maneira de fazer isso sem privilégios de root.

Alguém pode me ajudar?

Explicação adicional:

  1. quando executo o sudo su - nome de usuário (userA) preciso fornecer minha senha (wolfy) para efetuar login como o outro usuário (userA). Então eu trabalho para toda a sessão com esse usuário (userA) e quando eu sair desse usuário (userA) eu gostaria de logout automático do meu (wofly) usuário.
  2. usando o comando sudo não é uma opção
por Wolfy 19.06.2015 / 11:06

3 respostas

4

Talvez tudo o que você queira fazer seja:

exec ./test.sh

Isso substitui o processo atual do shell pelo script, para que, quando ele terminar, não haja mais nada para executar.

    
por meuh 19.06.2015 / 14:51
1

Normalmente, para executar um comando como root, sudo é suficiente.

#!/bin/bash
echo test
sudo whoami

Se você insistir em usar su , por qualquer motivo, você pode usar o sinalizador -c:

#!/bin/bash
echo test
sudo su -c whoami

E aqui está o resultado, mesmo nos dois casos:

$ ./test.sh                                                                                                                           
test
[sudo] password for xieerqi: 
root

Se você quiser entrar no shell do root, use sudo -i

serg@ubuntu[/home/xieerqi] 
$ sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi] 
$ 

Com 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

Se você deseja executar comandos como outro usuário, não apenas root, você pode usar sudo -u username command

$ sudo -u testuser whoami
testuser

Mesma ideia com 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
    
por Sergiy Kolodyazhnyy 19.06.2015 / 11:39
1

Um logout em um script não afeta nada, pois logout só funciona para shells de login e os scripts não são normalmente executados como shells de login.

Parece-me que você está se conectando via SSH (ou algo assim), sendo executado como outro usuário e imediatamente se desconectando. Nesse caso, apenas forneça o script, para que os comandos sejam executados no shell atual. Então, logout funcionará.

Ou você pode usar exec , mas, nesse caso, não é logout que está entrando em vigor - logout falhará e o final do script simplesmente fará com que ele saia. Distinção sem diferença, suponho.

Ou, se você achar complicado usar . ./script , defina uma função com chaves:

switchuser () {
  echo "test script"
  sudo su -
  exit
}

Os comandos entre chaves são executados no shell atual e os comandos entre parênteses são executados em um sub-shell. Adicione isto ao seu .bashrc , então você pode simplesmente fazer:

switchuser
    
por muru 19.06.2015 / 17:05