Wie kann ich den Pfad für einen nicht-interaktiven, per LDAP authentifizierten Benutzer festlegen?

Wie kann ich den Pfad für einen nicht-interaktiven, per LDAP authentifizierten Benutzer festlegen?

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:

https://serverfault.com/questions/139426/updating-the-path-for-running-an-command-through-ssh-with-ldap-user-account

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/bashrcfür alle SSH-Anmeldungen erzwingen, ob interaktiv oder nicht. Dies kann zu Problemen bei Benutzern führen, die darauf angewiesen sind, /etc/bashrcbei 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_envszu 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/bashrcsie werden bei jeder SSH-Anmeldung in die Umgebung übernommen.

Bitte beachten Sie, dass die Standardeinstellung /etc/bashrcfü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.

verwandte Informationen