Kann die Benutzer-Shell im Befehl "su" ignoriert werden?

9

Wenn ich mache

su - -c 'mkdir bin' user1

dann bekomme ich

su: /usr/bin/ksh: No such file or directory

weil die Benutzer-Shell auf kshin gesetzt /etc/passwdund kshnicht installiert ist.

Frage

Wie führe ich in einem solchen Fall Befehle als Benutzer aus?

Sandra
quelle
Warum ist die Shell eines Benutzers auf etwas eingestellt, das nicht existiert?
MDMarra
1
/etc/passwdkommt aus NIS.
Sandra
1
Nun, das erklärt das.
MDMarra

Antworten:

18

Wenn Sie das nicht setzen -nach , sudann wird es nicht , dass Benutzer-Umgebung laden, aber die Befehle werden immer noch als dieser Benutzer ausgeführt werden.


Es scheint, dass ich Ihr eigentliches Problem falsch verstanden habe. Wie andere gesagt haben, -sist die Option, die Sie wahrscheinlich tatsächlich wollen.

MDMarra
quelle
Das wird immer noch versuchen, die Shell zu verwenden, die sich in / etc / passwd befindet, was das größere Problem zu sein scheint.
Freiheit
Die Shell fügt ihre eigene Identität in die Umgebungsvariable $ SHELL ein, aber in / etc / passwd sucht su nach der auszuführenden Shell. `-` wird an den Shell-Aufruf weitergeleitet und weist ihn an, als "Login" -Shell zu fungieren (bash führt eine Profildatei anstelle einer bashrc-Datei aus, ändert das Arbeitsverzeichnis usw.)
freiheit
8

Sie können verwenden:

su -s /bin/sh -c 'mkdir bin' user1

Die -sOption su gibt die zu verwendende Shell an und überschreibt alles, was sich in / etc / passwd befindet.

Ich habe das -aus Ihrem Befehl entfernt, da es zusätzlich zum Laden des Profils wahrscheinlich das Arbeitsverzeichnis in das Ausgangsverzeichnis des Benutzers für den Befehl ändert, sodass Sie 'bin' im Ausgangsverzeichnis von Benutzer1 erstellen würden, nicht in Ihrem aktuellen Verzeichnis.

freiheit
quelle
5

Ich glaube, mit der Shell-Option -s / - können Sie die zu verwendende Shell auswählen, während die anderen Teile der Benutzerumgebung beibehalten werden. / Bin / sh wird von posix angegeben und sollte daher überall verfügbar sein.

Roman A. Taycher
quelle