¿Existe alguna manera de realizar un inicio de sesión completo como otro usuario sin ser root?

¿Existe alguna manera de realizar un inicio de sesión completo como otro usuario sin ser root?

En nuestra configuración, nos vemos obligados a utilizar Microsoft Active Directory (AD) para el acceso ssh a nuestra máquina virtual Linux, de modo que cuando los empleados se vayan se les pueda bloquear el acceso a la máquina virtual una vez que se desactive su cuenta AD.

Ya tenemos todos nuestros datos y usuarios configurados. Entonces mi plan propuesto es:

  1. Deshabilite todo acceso remoto/ssh a las cuentas de usuario originales, permitiendo solo el acceso a través de sus nuevas cuentas AD.

  2. Al iniciar sesión en su cuenta de AD, inician sesión automáticamente en su cuenta de usuario original.

Necesito lognameimprimir la cuenta de usuario original (es decir, la cuenta en la que inician sesión automáticamente) y no la nueva cuenta de AD.

Respuesta1

De manera muy simplista, podría reemplazar la respectiva variable de shell de inicio de sesión en /etc/passwdun script de redirección:

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

Y el guión sería como

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

su "$oldname"

Luego asegúrese de que AD_user pueda iniciar sesión con el usuario anterior sin contraseña, por ejemplo, a través de una sudoersentrada (adapte el script para usar sudo).


Sin embargo, sigo sugiriendo crear un script de "actualización de ID" para ejecutarlo una vez con la mudanza y tener una configuración menos complicada en el futuro. Esto es mucho más estable, seguro y requiere tanto esfuerzo como el script anterior.

Respuesta2

Editado para usar sshen lugar de loginporque puede hacer uso de la autenticación de clave pública y no necesita una modificación en la lista de sudoers (por sudo visudo). También agrego el comando /etc/bash.bashrcporque tiene el efecto deseado de no hacer nada si no se ejecuta de forma interactiva. Este script se convierte en un script conveniente para los usuarios que aún no han configurado correctamente sus clientes ssh para su uso.túnel de conexión(también conocido como ssh multisalto).

Agregaré más sobre la configuración del túnel de conexión una vez que lo haya resuelto.


Inspirado en la otra respuesta, pero con un enfoque alternativo (porque los usuarios de AD no figuran en /etc/passwd.

Configuración:

  • Una línea /etc/bash.bashrc(solo si desea que esto se ejecute de forma predeterminada en el inicio de sesión inicial):
# Executes convenience script which prompts all white-listed users whether they wish to login as their default work user account
/bin/login_redirect

Esto hace que el usuario inicie sesión a través de ssh en su cuenta de usuario laboral predeterminada.

Guión principal:/bin/login_redirect(debe ser ejecutable para todos los usuarios 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

Nota: Si login_redirectlo ejecuta un usuario que no es del trabajo, esto iniciará sesión automáticamente en su usuario del trabajo predeterminado.

información relacionada