Saia da raiz e do usuário com um comando

9

Eu sei sobre "não usar sudo su -" etc. Mas, sejamos honestos, quase todos nós fazemos isso.

Então, aqui está a questão. Não podemos ter logins raiz ativados, portanto, precisamos fazer o ssh como nosso usuário e depois su para o root.
Aqui está a árvore do processo:

    1  7897  7826  7826 ?           -1 S     1000   0:00 sshd: josh@pts/0
 7897  7898  7898  7898 pts/0     8182 Ss    1000   0:00  \_ -bash
 7898  7990  7990  7898 pts/0     8182 S        0   0:00      \_ sudo su -
 7990  7991  7990  7898 pts/0     8182 S        0   0:00          \_ su -
 7991  7992  7992  7898 pts/0     8182 S        0   0:00              \_  -su
 7992  8182  8182  7898 pts/0     8182 R+       0   0:00                  \_ ps axjf

Gostaria de sair do root e depois do meu usuário com um comando. Existe uma maneira de fazer isso?

BTW exit && exit não funciona porque sai do shell e não processa o restante do comando

josh@ubuntu:~$ sudo su -
root@ubuntu:~# exit && exit
logout
josh@ubuntu:~$
Joshua Zitting
fonte
5
"Quase todos nós fazemos isso ..." Eu duvido disso. Eu mantenho várias máquinas e tenho todas as senhas e nunca uso "sudo su" em sistemas baseados em debian. E espero que a maioria de nós não o use.
Rinzwind 11/09/2015
1
Não use sudo su, é inútil e apenas lança um processo extra. Use sudo -i, se necessário, em vez disso.
terdon
Eu uso sudo -ipara obter um shell raiz. Quanto ao ssh, você pode configurar o ssh para permitir logins root, pessoalmente eu uso as opções "sem senha" para root e as teclas ssh er kerberos. Isso mantém a conta raiz bloqueada para senhas.
Panther
Não entendo direito o que não funciona. As primeiras exitsaídas su, a segunda sai . Não é o que você queria fazer?
precisa saber é o seguinte
1
@ Pilot6 você testou esse código? Eu apenas fiz e ele não funciona .. Isso é apenas o que eu quero fazer .. Mas ele não funciona ..
Joshua Zitting

Respostas:

9

Tecnicamente, ninguém respondeu à sua pergunta. Compreendo que eles acham que seu caminho é melhor (provavelmente é), mas aqui está outra abordagem (caso você tenha su -algum tempo e tenha o mesmo problema);

  1. [Faça login no sistema]
  2. $ sudo su -;exit
  3. # echo "do things"
  4. # exit

Quando você sai da raiz, o usuário original também se desconecta, pois continua com seu último comando.

Felicidades!

Alexander E. Smith
fonte
14

Apenas faça

exec sudo -i

Agora, o shell raiz está substituindo o padrão e, quando você sai, sai "ambos" (incorretamente redigido, pois o primeiro shell deixa de existir com o exec).

Veja:

[romano:~] % ssh pern
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-28-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

[romano@pern:~] % exec sudo -i
[sudo] password for romano: 
root@pern:~# whoami
root
root@pern:~# pstree -a -s -l -p -u $$
init,1
  └─sshd,1140 -D
      └─sshd,17450 
          └─sshd,17570,romano  
              └─sudo,17571,root -i
                  └─bash,17665
                      └─pstree,17678 -a -s -l -p -u 17665
root@pern:~# exit
logout
Connection to pern.XXX.XXX.XXX closed.
[romano:~] % 

Eu uso muito isso para ter um sshterminal -ed: use exec ssh whatevere quando você sair, o terminal será fechado.

Rmano
fonte
2
BEM FEITO!!! Obrigado! Não preciso mais digitar exit duas vezes !!
Joshua Zitting
Inteligentemente feito! excelente
Anwar
1

quando você estiver se tornando usuário root, digite:

sudo -s && exit

Quando você sair da raiz, o shell será fechado automaticamente. você pode exportar esse comando para torná-lo permanente.

echo "alias mysudo='sudo -s; exit'" >> ~/.bashrc && source ~/.bashrc
javesh bhardwaj
fonte