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?
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.)
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.
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.
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.
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.
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.
sudo su -c "zsh"
, in meinem Fall, halte mich im aktuellen Verzeichnis und lade zsh als Shell mit Root-Benutzer.ctrl+d
danach 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.Antworten:
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.)
quelle
asuser git reset --hard
. Abersu - <user> -m -c "git reset --hard"
undsudo -u <user> git reset --hard
wü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 "cdpwd
; bash" besser ist.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.
quelle
Wenn Sie
su
ohne verwenden-
, sollte es Sie in Ihrem aktuellen Verzeichnis halten.-
,-l
Oder--login
sagen su:Oder verwenden Sie einfach sudo, es hat viele andere Vorteile. Oder SSH-Schlüssel.
quelle
Sie sollten auf jeden Fall sudo verwenden.
Dadurch bleiben Sie im Ordner, wenn Sie zu root wechseln.
Vorteile der Verwendung von sudo
quelle
.bashrc
vom äußeren Benutzer aus, nicht vom Root-Benutzer.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.
quelle
Wenn Sie wirklich verwenden möchten
su
, gibt es eine Möglichkeit, im selben Verzeichnis zu bleiben.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 derpwd
Befehl ausgewertet, bevor wir densu
Befehl 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 "runbash
(neue Shell) nach dem Ausführen descd
Befehls und die Bash-Shell wird erst beendet, wenn wir uns abmelden.quelle
su - [user] -c "cd $(pwd); bash"
könnte es etwas besser sein (Backticks auf ändern$()
).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.
quelle
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