Linux - benutze "su -" aber behalte das aktuelle Verzeichnis

13

Wenn ich su -zu root komme, wird mein aktuelles Verzeichnis auf root's home gesetzt. Gibt es sowieso, um das aktuelle Verzeichnis zu behalten, in dem ich war, ähnlich wie sudo -s. Oder ist die Antwort auf Sudo?

Rory
quelle
5
Bitte beachten Sie, dass ich nicht unhöflich klingen möchte, aber warum wird dieses Problem nicht über "man su" gelöst?
Myrrdyn
1
@ Rory bitte lesen Sie den Myrrdyn Kommentar
c4f4t0r
Ich verwende gerne sudo su -c "zsh", in meinem Fall, halte mich im aktuellen Verzeichnis und lade zsh als Shell mit Root-Benutzer. ctrl+ddanach und Sie kehren zum aktuellen Benutzer zurück. Funktioniert für Verzeichnissachen direkt mit Centos für mich, aber vielleicht könnte das Hinzufügen von "&& cd $ (pwd)" innerhalb des übergebenen Befehls den Trick tun.
GabLeRoux
@Myrrdyn Dokumentationen sind großartig, wenn Sie wissen, wonach Sie suchen. Wenn Sie dies nicht tun, ist es schneller und didaktischer, Experten um Rat zu fragen.
Romain Vincent

Antworten:

18

Wenn möglich, ist es immer besser, sudo zu verwenden, da Sie dann das root-Passwort nicht kennen (oder jemandem geben) müssen. Setzen Sie das Root-Passwort auf etwas Langes und Schreckliches und sperren Sie es dann in einen Safe.

Wenn Sie jemandem später den Zugriff verweigern möchten, entfernen Sie einfach den Zugriff auf sudo, anstatt allen anderen ein neues Root-Passwort beibringen zu müssen.

Sie müssen jedoch nicht den Parameter '-' verwenden, wenn Sie dies nicht möchten. Sie erhalten eine Shell als root, es handelt sich lediglich nicht um eine Login-Shell (daher wird das .profile von root nicht ausgeführt.)

crb
quelle
1
In meinem Fall brauchte ich einen Alias, um so etwas zu tun asuser git reset --hard. Aber su - <user> -m -c "git reset --hard"und sudo -u <user> git reset --hardwürde meine Umgebung retten und Git würde versuchen, die Git-Konfiguration des aktuellen Benutzers zu lesen . Deshalb wollte ich nur sagen, dass manchmal die Lösung von user205705 mit su - <user> -c "cd pwd; bash" besser ist.
ReFruity
16

Ich stimme zu, dass Sudo fast immer eine bessere Antwort ist, als den anderen Teil der Frage zu beantworten ...

Das '-' in 'su -' gibt an, dass Sie eine Superuser-Anmeldung emulieren möchten, anstatt nur mit Superuser-Berechtigungen ausgeführt zu werden.

Wenn Sie statt 'su -' nur 'su' verwenden, bleiben Sie im selben Verzeichnis. Sie werden jedoch auch in derselben Umgebung ausgeführt, sodass Sie möglicherweise Ihren Pfad ändern müssen, um auf einige Administratorbefehle zugreifen zu können.

Russell Heilling
quelle
9

Wenn Sie suohne verwenden -, sollte es Sie in Ihrem aktuellen Verzeichnis halten. -, -lOder --login sagen su:

Stellen Sie eine ähnliche Umgebung bereit, wie es der Benutzer erwarten würde, wenn sich der Benutzer direkt angemeldet hätte.

Oder verwenden Sie einfach sudo, es hat viele andere Vorteile. Oder SSH-Schlüssel.

freiheit
quelle
6

Sie sollten auf jeden Fall sudo verwenden.

su -m
-m (-p): Umgebungsvariablen nicht zurücksetzen (im Allgemeinen nicht empfohlen)

Dadurch bleiben Sie im Ordner, wenn Sie zu root wechseln.

Vorteile der Verwendung von sudo

Jindrich
quelle
1
Ich kann nicht sehen, wie sich dies von "su" allein unterscheidet, außer dass möglicherweise die PATH-Umgebung nicht zurückgesetzt wird, was ein mögliches Sicherheitsproblem darstellt.
David Pashley
@DavidPashley führt zum Beispiel das .bashrcvom äußeren Benutzer aus, nicht vom Root-Benutzer.
Phil294
3

Benutze sudo :). Im Ernst, du brauchst kein su. 'sudo' ist besser, da Sie es nur für privilegierte Befehle verwenden und dabei helfen können, Fehler zu vermeiden. Sie erhalten auch Rechenschaftspflicht.

chmeee
quelle
3

Wenn Sie wirklich verwenden möchten su, gibt es eine Möglichkeit, im selben Verzeichnis zu bleiben.

su - <user> -c "cd `pwd`; bash"

Was ist denn hier los:

  • su - <user> = Login als
  • -c was bedeutet "einen Befehl in der Shell des neuen ausführen
  • -c "cd `pwd`" Der Befehl, den wir geben, besteht darin, zum aktuellen Verzeichnis ( pwd) zu wechseln. Da wir jedoch die Backticks verwenden, wird der pwdBefehl ausgewertet, bevor wir den suBefehl ausführen, sodass wir tatsächlich in das Verzeichnis wechseln, in dem wir uns JETZT als alter Benutzer befinden. Das einzige Problem hierbei ist, dass die neue Shell direkt nach dem Ausführen des Befehls beendet wird. Dann fügen wir hinzu:
  • -c "cd `pwd`; bash" Dies bedeutet "run bash(neue Shell) nach dem Ausführen des cdBefehls und die Bash-Shell wird erst beendet, wenn wir uns abmelden.
will.barley
quelle
Dies ist eigentlich die einzige Antwort auf die Frage. Gut gemacht!
Cacahuete Frito
Eigentlich su - [user] -c "cd $(pwd); bash"könnte es etwas besser sein (Backticks auf ändern $()).
Cacahuete Frito
2

Wenn Sie "su" verwenden, wird eine interaktive Shell erstellt. Dies ist das gleiche wie "sudo -s". "su -" erstellt eine Anmeldeshell, die die Umgebung überschreibt. "sudo -i" ist das Äquivalent zu sudo. Wenn Sie versuchen, eine interaktive Shell zu erhalten, sollten Sie immer das Formular sudo -i (oder su -) verwenden, da es sonst zu seltsamen Dateiberechtigungen im Home-Verzeichnis eines Benutzers kommen kann.

David Pashley
quelle
0

Sie müssen die Quelle von su ändern, damit dieser Job ausgeführt wird. Es gibt einen chdir-Aufruf in einem Verfahren zum Initialisieren von Umgebungsvariablen. Kommentieren Sie die Aussagen aus, die diesen Aufruf enthalten. und jetzt können Sie "su -" ausführen, behalten aber das aktuelle Verzeichnis bei.


quelle