Beenden Sie sowohl root als auch user mit einem Befehl


9

Ich weiß, wie man "nicht benutzt sudo su -" usw. Aber seien wir ehrlich, fast alle von uns tun es.

Hier ist also das Problem. Wir können keine Root-Anmeldungen aktivieren, daher müssen wir uns als unser Benutzer anmelden und dann su zu root.
Hier ist der Prozessbaum:

    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

Ich möchte root und dann meinen Benutzer mit einem Befehl verlassen. Gibt es eine Möglichkeit, dies zu tun?

BTW exit && exit funktioniert nicht, da es die Shell verlässt und den Rest des Befehls nicht verarbeitet

josh@ubuntu:~$ sudo su -
root@ubuntu:~# exit && exit
logout
josh@ubuntu:~$

5
"Fast alle von uns machen das ..." Das bezweifle ich. Ich verwalte mehrere Maschinen und habe alle Passwörter und verwende "sudo su" niemals auf Debian-basierten Systemen. Und ich erwarte, dass die meisten von uns es nicht benutzen.
Rinzwind

1
Nicht verwenden sudo su, es ist sinnlos und startet nur einen zusätzlichen Prozess. Verwenden sudo -iSie stattdessen, wenn Sie müssen.
Terdon

Ich benutze sudo -i, um eine Wurzelschale zu erhalten. In Bezug auf ssh können Sie ssh so konfigurieren, dass Root-Anmeldungen zulässig sind. Ich persönlich verwende die Optionen "ohne Passwort" für root und entweder ssh-Schlüssel oder Kerberos. Dadurch bleibt das Root-Konto für Kennwörter gesperrt.
Panther

Ich verstehe nicht ganz, was nicht funktioniert. Erste exitAusfahrten su, die zweite Logouts. Wolltest du es nicht tun?
Pilot6

1
@ Pilot6 hast du diesen Code getestet ?? Ich habe es gerade getan und es funktioniert nicht. Das ist genau das, was ich tun möchte. Aber es funktioniert nicht.
Joshua Zitting

Antworten:


9

Technisch hat niemand Ihre Frage beantwortet. Ich schätze, dass sie denken, dass ihr Weg besser ist (wahrscheinlich ist), aber hier ist ein anderer Ansatz (falls Sie su -etwas Zeit haben und das gleiche Problem haben);

  1. [In ein System einloggen]
  2. $ sudo su -;exit
  3. # echo "do things"
  4. # exit

Wenn Sie root verlassen, meldet sich der ursprüngliche Benutzer ebenfalls ab, da er seinen letzten Befehl fortsetzt.

Prost!


14

Mach einfach

exec sudo -i

Jetzt ersetzt die Root-Shell die Standard-Shell, und beim Beenden beenden Sie "beide" (falsch formuliert, da die erste Shell nicht mehr mit der existiert exec).

Aussehen:

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

Ich benutze es oft, um ein ssh-ed-Terminal zu haben : benutze exec ssh whateverund wenn du es verlässt, wird das Terminal geschlossen.


2
SCHÖN GEMACHT!!! Vielen Dank! Ich muss exit nicht mehr zweimal eingeben !!
Joshua Zitting

Clever gemacht! ausgezeichnet
Anwar

1

Wenn Sie Root-Benutzer werden, geben Sie einfach :: ein

sudo -s && exit

Wenn Sie root verlassen, wird Ihre Shell automatisch geschlossen. Sie können diesen Befehl exportieren, um ihn dauerhaft zu machen.

echo "alias mysudo='sudo -s; exit'" >> ~/.bashrc && source ~/.bashrc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.