Auf einem Mac mit OSX 10.7.5 muss ich den PATH für nicht interaktive Benutzer festlegen, die sich über SSH verbinden und per LDAP authentifiziert werden. Es ist dieselbe Frage, die hier gestellt (und beantwortet) wurde:
aber ich kenne mich mit PAM oder LDAP nicht gut genug aus, um die Antwort vollständig zu verstehen.
Es sieht so aus, als müsste ich:
add a line to /etc/pam.d/sshd saying "auth required pam_env.so"
create a file named /etc/security/pam_env.conf
aber die Dokumentation für pam_env.conf ist wirklich verwirrend und ich kann nicht sagen, ob ich einen DEFAULT- oder einen OVERRIDE-Wert brauche.
Habe ich Recht, dass das die richtigen Schritte sind? Welche Zeile sollte ich in pam_env.conf einfügen?
Danke, Chris
PS: Ich habe versucht, die Zeile „auth required pam_env.so debug“ in /etc/pam.d/sshd einzufügen, und ich sehe in /var/log/system.log nichts, das aussieht, als käme es von pam_env.so. Ich habe auch /etc/security/pam_env.conf erstellt und die Zeile „PATH DEFAULT=/usr/fred OVERRIDE=/usr/george“ eingefügt, und es hatte keine sichtbaren Auswirkungen auf PATH.
pps Wenn ich ausführe:
ssh USER@MACHINE echo \$SHELL
Dort steht /bin/bash. Wenn ich mich dann bei MACHINE anmelde und diese Zeile zu /etc/bashrc hinzufüge:
export Test=Fred
und kehre zu meiner Maschine zurück und führe aus:
ssh USER@MACHINE echo \$Test
es gibt nichts zurück. Wenn ich mich auf diese Weise über LDAP anmelde, wird /etc/bashrc nicht ausgeführt.
ppps Einige zusätzliche Informationen, die wichtig sein könnten: Auf MACHINE gibt es keinen lokalen Benutzer mit dem Namen USER. MACHINE wurde für LDAP-Authentifizierung eingerichtet, sodass mein $HOME auf /Network/Servers/blah/blah/Users/USER eingestellt ist, wenn ich ssh USER@MACHINE verwende. Wenn ich /Network/Servers/blah/blah/Users/USER/.bashrc bearbeite, um den PATH festzulegen, funktioniert es bei mir korrekt, aber es ist keine gute Lösung, weil es bedeutet, dass jede Person, die auf diesen Server zugreifen möchte, ihre Netzwerk-.bashrc bearbeiten muss.
Antwort1
Dies ist eine Modifikation vonhttps://askubuntu.com/questions/382485/ssh-wie-erzwingt-man-die-ausführung-eines-skripts-etc-sshrc-forcecommand-on.
Mit dem Folgenden können Sie Sourcing /etc/bashrc
für alle SSH-Anmeldungen erzwingen, ob interaktiv oder nicht. Dies kann zu Problemen bei Benutzern führen, die darauf angewiesen sind, /etc/bashrc
bei nicht interaktiven Anmeldungen nicht ausgeführt zu werden. Gehen Sie also mit Vorsicht vor (obwohl dies genau das ist, wonach Sie fragen, sodass Sie die Auswirkungen wahrscheinlich kennen).
Fügen Sie es zunächst ForceCommand /usr/local/bin/sshd_envs
zu hinzu /etc/sshd_config
. Geben Sie dann Folgendes in ein /usr/local/bin/sshd_envs
:
#!/bin/bash
source /etc/bashrc
if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
eval $SSH_ORIGINAL_COMMAND
else
exec $SHELL
fi
Welche Umgebungseinstellungen Sie dann auch vornehmen, /etc/bashrc
sie werden bei jeder SSH-Anmeldung in die Umgebung übernommen.
Bitte beachten Sie, dass die Standardeinstellung /etc/bashrc
für OS/X sofort nach der Auswertung der ersten Zeilen beendet wird (da PS1 für nicht interaktive Shells nicht festgelegt ist):
if [ -z "$PS1" ]; then
return
fi
Kommentieren Sie diese Zeilen also entweder aus oder setzen Sie alles, was Sie für Ihre nicht-interaktiven SSH-Anmeldungen ausgewertet haben möchten, vor diese Zeilen.