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:~$

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!


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.