SSH startet eine Login-Shell. su
standardmäßig nicht.
Dies bedeutet insbesondere, dass die ~/.profile
(oder eine ähnliche) Datei für diesen Benutzer nicht bezogen wurde. Änderungen in ~/.profile
werden 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/profile
und /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/ssh
hat:
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
während /etc/pam.d/su
hat:
session required pam_env.so readenv=1 envfile=/etc/default/locale
Dies bedeutet, dass SSH geladen wird ~/.pam_environment
, dies jedoch su
nicht. Dies ist eine große Sache, da ~/.pam_environment
es 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 ~/bin
im 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 su
und sudo -s
sind beschissene Wege, eine Wurzelschale zu bekommen. Beide Wege sind durch die Umwelt verschmutzt.
Verbunden: