Gibt es eine Möglichkeit, sich als anderer Benutzer vollständig anzumelden, ohne Root zu sein?

Gibt es eine Möglichkeit, sich als anderer Benutzer vollständig anzumelden, ohne Root zu sein?

In unserem Setup sind wir gezwungen, Microsoft Active Directory (AD) für den SSH-Zugriff auf unsere Linux-VM zu verwenden, sodass Mitarbeitern beim Ausscheiden aus dem Unternehmen der Zugriff auf die VM verweigert werden kann, sobald ihr AD-Konto deaktiviert wird.

Wir haben bereits alle unsere Daten und Benutzer eingerichtet. Mein vorgeschlagener Plan ist also:

  1. Deaktivieren Sie sämtliche Remote-/SSH-Zugriffe auf die ursprünglichen Benutzerkonten und erlauben Sie den Zugriff nur über ihre neuen AD-Konten.

  2. Wenn sie sich per SSH bei ihrem AD-Konto anmelden, werden sie automatisch bei ihrem ursprünglichen Benutzerkonto angemeldet.

Ich muss lognamedas ursprüngliche Benutzerkonto ausdrucken (also das Konto, bei dem sie automatisch angemeldet werden) und nicht das neue AD-Konto.

Antwort1

Ganz einfach: Sie können die entsprechende Login-Shell-Variable durch /etc/passwdein Umleitungsskript ersetzen:

john_AD:x:1000:1000:,,,:/home/john_old:/sbin/redirect_user

Und das Skript würde so aussehen:

#!/bin/bash
#autoredirect user to old login
case $USER in
   jonh_AD) oldname=john_old
#add list of users
esac

su "$oldname"

Stellen Sie dann sicher, dass sich der AD_Benutzer ohne Passwort beim alten Benutzer anmelden kann, z. B. über einen sudoersEintrag (Skript entsprechend anpassen sudo).


Ich schlage jedoch trotzdem vor, ein „ID-Update“-Skript zu erstellen, das einmal beim Umzug ausgeführt wird und in Zukunft eine weniger umständliche Einrichtung ermöglicht. Dies ist weitaus stabiler, sicherer und erfordert genauso viel Aufwand wie ein solches Skript wie oben.

Antwort2

Bearbeitet, um sshanstelle von zu verwenden login, da es die Public-Key-Authentifizierung nutzen kann und keine Änderung der Sudoers-Liste (durch sudo visudo) erfordert. Ich füge auch den Befehl zu hinzu, /etc/bash.bashrcda er den gewünschten Effekt hat, nichts zu tun, wenn er nicht interaktiv ausgeführt wird. Dieses Skript wird zu einem praktischen Skript für Benutzer, die ihre SSH-Clients noch nicht richtig eingerichtet haben, umVerbindungstunnelung(auch als SSH-Multihop bekannt).

Ich werde mehr zum Einrichten des Verbindungstunnels hinzufügen, sobald ich es herausgefunden habe.


Inspiriert von der anderen Antwort, aber ein alternativer Ansatz (da AD-Benutzer nicht in /etc/passwd aufgeführt sind).

Aufstellen:

  • Eine Zeile in /etc/bash.bashrc(nur, wenn dies standardmäßig bei der ersten Anmeldung ausgeführt werden soll):
# Executes convenience script which prompts all white-listed users whether they wish to login as their default work user account
/bin/login_redirect

Dies bewirkt, dass sich der Benutzer per SSH bei seinem standardmäßigen Arbeitsbenutzerkonto anmeldet.

Hauptskript:/bin/login_redirect(muss für alle Benutzer ausführbar sein, chmod +x bin/login_redirect)

!/usr/bin/env bash

generate_divider() {
    user_query="$1"
    user_query_len="${#user_query}"
    user_query_len=$((user_query_len+1))
    str=$(printf "%${user_query_len}s")
    divider="${str// /_}"
}

case "$(logname)" in
    # White-list
    12345632) work_user=dean;;
    12345633) work_user=tom;;
    12345634) work_user=mary;;
esac

work_user="${work_user:-none}"
if [ "${work_user}" != "none" ]; then
    user_query="Do you wish to login as your default work user? [Y/n]: "
    generate_divider "${user_query}"
    echo
    echo "${divider}"
    echo "[WARNING]: You are connected directly to your AD account."
    echo "           Ask the admin of this server for help"
    echo "           configuring a multi-hop ssh connection. This "
    echo "           is a convenience script written to allow"
    echo "           connection to your default work user in the"
    echo "           interim."
    read -p "${user_query}" login_ans
    login_ans="${login_ans:-Y}"
    if [ "${login_ans}" == "Y" ]; then
        echo "Username: ${work_user}"
        exec ssh -t "${work_user}"@"$(hostname)" "echo ${divider}; echo; /bin/bash;"
    fi
fi

Hinweis: Wenn login_redirectdies von einem Nicht-Arbeitsbenutzer ausgeführt wird, wird dieser automatisch bei seinem standardmäßigen Arbeitsbenutzer angemeldet.

verwandte Informationen