Wyjdź zarówno z konta root, jak i użytkownika za pomocą jednego polecenia

9

Wiem o „nie korzystaniu sudo su -” itp. Ale bądźmy szczerzy, prawie wszyscy to robimy.

Oto problem. Nie możemy mieć włączonych loginów roota, więc musimy zalogować się jako ssh jako użytkownik, a następnie su do rootowania.
Oto drzewo procesów:

    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

Chciałbym wyjść z roota, a następnie od mojego użytkownika za pomocą jednego polecenia. Czy jest na to sposób?

Wyjście BTW i wyjście && nie działa, ponieważ wychodzi z powłoki i nie przetwarza reszty polecenia

josh@ubuntu:~$ sudo su -
root@ubuntu:~# exit && exit
logout
josh@ubuntu:~$
Joshua Zitting
źródło
5
„Prawie wszyscy to robimy…” Wątpię w to. Obsługuję kilka maszyn i mam wszystkie hasła i nigdy nie używam „sudo su” na systemach opartych na Debianie. I spodziewam się, że większość z nas go nie użyje.
Rinzwind
1
Nie używaj sudo su, jest to bezcelowe i po prostu uruchamia dodatkowy proces. sudo -iZamiast tego użyj , jeśli musisz.
terdon
Używam sudo -ido uzyskania powłoki roota. Jeśli chodzi o ssh, możesz skonfigurować ssh, aby zezwalał na logowanie do roota, osobiście korzystam z opcji „bez hasła” dla roota i obu kluczy ssh er kerberos. Dzięki temu konto root jest zablokowane dla haseł.
Panther
Nie bardzo rozumiem, co nie działa. Pierwsze exitwyjście su, drugie wylogowanie. Czy to nie to, co chciałeś zrobić?
Pilot6
1
@ Pilot6 przetestowałeś ten kod? Właśnie to zrobiłem i to nie działa .. to jest po prostu to, co chcę zrobić .. Ale to nie działa ..
Joshua Zitting 11'15

Odpowiedzi:

9

Technicznie nikt nie odpowiedział na twoje pytanie. Rozumiem, że uważają, że ich droga jest lepsza (prawdopodobnie jest), ale oto inne podejście (na wypadek, gdybyś miał su -trochę czasu i miał ten sam problem);

  1. [Zaloguj się do systemu]
  2. $ sudo su -;exit
  3. # echo "do things"
  4. # exit

Kiedy wyjdziesz z roota, oryginalny użytkownik również się wyloguje, ponieważ kontynuuje swoje ostatnie polecenie.

Twoje zdrowie!

Alexander E. Smith
źródło
14

Po prostu zrób

exec sudo -i

Teraz powłoka root zastępuje domyślną, a kiedy wychodzisz, wychodzisz z „oba” (niepoprawnie sformułowane, ponieważ pierwsza powłoka przestaje istnieć z exec).

Popatrz:

[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:~] % 

sshCzęsto go używam, aby mieć terminal z terminalem: użyj, exec ssh whatevera kiedy wyjdziesz, terminal zostanie zamknięty.

Rmano
źródło
2
ŁADNIE WYKONANE!!! Dziękuję Ci! Nie muszę już dwa razy wpisywać wyjścia !!
Joshua Zitting
Sprytnie zrobione! doskonała
Anwar
1

kiedy stajesz się użytkownikiem root, po prostu wpisz:

sudo -s && exit

kiedy wyjdziesz z roota, powłoka zostanie automatycznie zamknięta. możesz wyeksportować to polecenie, aby było trwałe.

echo "alias mysudo='sudo -s; exit'" >> ~/.bashrc && source ~/.bashrc
javesh bhardwaj
źródło