Was ist der Unterschied zwischen "su" und "su --login"?

15

Aus suder Manpage von:

For  backward  compatibility, su defaults to not change the current directory
and to only set the environment variables HOME and SHELL (plus USER and LOGNAME
if the target user is not root).  It is recommended to always use the 
--login option (instead of  its  shortcut -) to avoid side effects caused
by mixing environments.

...

-, -l, --login
    Start the shell as a login shell with an environment similar to a real login:

        o      clears all the environment variables except TERM

        o      initializes the environment variables HOME, SHELL, USER, LOGNAME, and PATH

        o      changes to the target user's home directory

        o      sets argv[0] of the shell to '-' in order to make the shell a login shell

Es ist schwer zu sagen, ob es einen Unterschied zwischen -und --login(oder angeblich nur -l) gibt. Die Manpage sagt nämlich "anstelle der Abkürzung -", aber alle diese Optionen sind gruppiert, und ich sehe keine Erklärung für den Unterschied, wenn es überhaupt existiert.

UPD Ich habe die Frage überprüft, die mein Problem lösen soll . Die Frage betrifft grundsätzlich den Unterschied zwischen suund su -. Und ich frage nach dem Unterschied zwischen su -und su --login. Also nein, es löst es überhaupt nicht.

x-yuri
quelle
4
Ich denke, dieser Satz ist schlecht geschrieben. Es sollte seinTo avoid side effects caused by mixing environments use --login option or its equivalent -. The first form is recommended because - can be placed only just before username.
Jimmy
Ich kenne Ihre Definition von Duplikat nicht, aber ich betrachte meine Frage nicht als solche. Die Frage, die Sie vorschlagen, bezieht sich im Wesentlichen auf den Unterschied zwischen suund su -. Und ich frage nach dem Unterschied zwischen su -und su --login. Was vermisse ich hier?
X-Yuri

Antworten:

11

Debians manuelle Eingabe scheint aufschlussreicher zu sein:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged
       in directly.

       When - is used, it must be specified before any username. For portability it is
       recommended to use it as last option, before any username. The other forms (-l
       and --login) do not have this restriction.
Strg-Alt-Delor
quelle
Ich würde sagen, sie ergänzen sich. Die eine von stromaufwärts schlägt Verwendung zu vermeiden -. Apropos, warum "vor einem Benutzernamen"?
X-Yuri
7
"vor einem Benutzernamen" kann umformuliert werden als "vor dem Benutzernamen, falls vorhanden"
Mark Plotnick
@ MarkPlotnick Sie scheinen sich zu irren .
X-Yuri
@ x-yuri die ganze Diskussion kommt zu dem Schluss, dass Mark Plotnick richtig ist, und das Handbuch ist bestenfalls logisch vage. (obwohl die meisten von uns nicht bemerkt haben)
ctrl-alt-delor
I disagree, however, with the general point that, "before any username" can be rephrased as "before the username, if any." Perhaps Mr. Plotnik meant that the man page* should have rephrased the text using his suggestion, but the two phrases are not equivalent (as I explained at the beginning of this post).Das heißt, Mark Plotnick weiß, wie es sufunktioniert, aber "vor jedem Benutzernamen"! = "Vor dem Benutzernamen, falls vorhanden." Zu diesem Schluss kam die Diskussion meines Erachtens.
X-Yuri
0

Es gibt keinen Unterschied, es ist wie beim Laufen.

echo bob | grep -v bob
echo bob | grep --invert-match bob

nur kurz ...

mikejonesey
quelle
3
Ich denke, er bittet um Aufklärung , um Nebenwirkungen zu vermeiden, die durch das Mischen von Umgebungen verursacht werden. Teil der Manpage. Welche Nebenwirkungen?
Zachary Brady
Nicht wirklich. Nebenwirkungen sind mehr oder weniger klar, und sie gelten , wenn nicht die Verwendung -, -l, --login. Meine Frage ist, warum es nicht empfohlen wird -, im Gegensatz zu "-l , and --login" zu verwenden.
X-Yuri
Das Portabilitätsproblem wäre, wenn Sie ein Skript schreiben, ich würde die Verwendung von su in einem Skript überhaupt nicht empfehlen, aber es könnte einen Anwendungsfall geben, unabhängig davon, ob die portabelste Option in einem Skript -l oder --login
mikejonesey wäre
Warum nicht verwenden su, wenn Sie ein Skript schreiben?
X-Yuri
Warum nicht ein Skript als Benutzer schreiben, dem die Daten gehören? In den seltensten Fällen müssen Sie als anderer Benutzer Aktionen ausführen, und dann gibt es sudo (mit Einschränkungen bei den verwendeten Befehlen und Parametern).
Mikejonesey