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.