Was ist der Unterschied zwischen der Anmeldung als Benutzer und dem Benutzerwechsel mit su über root?

17

Wenn Sie einen Server haben, können Sie z. B. über diesen zugreifen, ssh user1@ipund Sie können auch ssh root@ipmit su-Privilegien zu Ihrem Root-Benutzer gehen und dann zu su user1. Meiner Meinung nach sollten beide Methoden mich zur gleichen Benutzerumgebung führen (in diesem Fall "user1"), aber meiner tatsächlichen Erfahrung nach ist dies nicht der Fall, ssh user1@ipda Dinge installiert sind, die su user1dort nicht installiert sind.

Warum das?

Miguel Corti
quelle

Antworten:

15

SSH startet eine Login-Shell. sustandardmäßig nicht.

Dies bedeutet insbesondere, dass die ~/.profile(oder eine ähnliche) Datei für diesen Benutzer nicht bezogen wurde. Änderungen in ~/.profilewerden daher nicht wirksam. Es kann auch sein, dass:

  • Selbst wenn Sie eine Anmeldeshell starten, wurden in root verschiedene Änderungen vorgenommen ~/.profile, die die Umgebung des Benutzers gefährden könnten.
    • /etc/profileund /etc/profile.d/*kann Einstellungen für verschiedene Benutzer unterschiedlich anwenden (jedoch nicht standardmäßig)
  • In der SSH-Konfiguration gibt es möglicherweise unterschiedliche Einstellungen für verschiedene Benutzer.
  • Die PAM-Konfiguration ist anders. Zum Beispiel /etc/pam.d/sshhat:

    session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
    

    während /etc/pam.d/suhat:

    session       required   pam_env.so readenv=1 envfile=/etc/default/locale
    

    Dies bedeutet, dass SSH geladen wird ~/.pam_environment, dies jedoch sunicht. Dies ist eine große Sache, da ~/.pam_environmentes sich um die Shell-unabhängige Stelle für Umgebungsvariablen handelt. Sie wird angewendet, wenn Sie sich über die GUI, TTY oder SSH anmelden.

Führen Sie einen der folgenden Schritte aus, um eine Anmeldeshell zu starten:

su - <username>
sudo -iu <username>

Beispiel:

# su muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# su - muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /home/muru/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# sudo -iu muru sh -c 'echo $HOME $PATH'
/home/muru /home/muru/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# sudo -u muru sh -c 'echo $HOME $PATH'
/root /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ssh muru@localhost 'echo $HOME $PATH'
/home/muru /home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Selbst mit SSH wird, wenn Sie einen Befehl ausführen, anstatt eine Shell zu starten, keine Anmeldeshell ausgeführt (beachten Sie, dass ~/binim SSH-Test, der in su -und vorhanden ist, nicht vorhanden ist sudo -i). Um das wahre Ergebnis zu erhalten, starte ich meine Shell als Login-Shell:

# ssh muru@localhost '$SHELL -ilc "echo \$HOME \$PATH"'
/home/muru /home/muru/bin:/home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Dies ist auch der Grund, warum sudo suund sudo -ssind beschissene Wege, eine Wurzelschale zu bekommen. Beide Wege sind durch die Umwelt verschmutzt.


Verbunden:

muru
quelle
2
Scheint, als ob ich wach sein sollte, bevor ich Fragen beantworte :) Ihre Antwort ist wunderbar und meine hat versäumt, die richtige Antwort zu finden. Gut gemacht +1
Videonauth
-1

Im Großen und Ganzen handelt es sich hauptsächlich um einen strategischen Unterschied.

Wenn Sie als Superuser angemeldet sind, können Sie die ganze Zeit etwas ändern ... dh - es gibt keinen Schutz vor katastrophalen Fehlern, Sie müssten aus Sicherheitsgründen vorübergehend zu einem anderen Benutzer wechseln.

Während: Wenn Sie mit eingeschränkten Rechten angemeldet sind, vermeiden Sie das Risiko schwerwiegender Fehler, da Sie absichtlich auf su root wechseln müssen, um vorübergehend auf diese Macht zuzugreifen, aber jetzt haben Sie die Standard-Ausweichposition für einen sicheren Benutzer .

Der Unterschied ist also wirklich strategisch und nicht technisch.

Herr Präsident
quelle
Die Frage war nicht genau der Unterschied zwischen Rootbenutzern und anderen Benutzern. Es war der Unterschied zwischen dem direkten Zugriff auf einen Server-Benutzer über ssh und dem Zugriff auf ihn über su, der sich bereits im Root-Benutzer befindet. Wie auch immer, ich stimme dem zu, was Sie gesagt haben, haha, danke
Miguel Corti
Ah ok, sorry ... Ich habe mich tatsächlich gefragt, warum alle auf technische Details eingehen. Ich glaube, ich habe Ihre Absicht falsch verstanden.
Mr.President