Existe uma maneira de realizar um login completo como outro usuário sem ser root?

Existe uma maneira de realizar um login completo como outro usuário sem ser root?

Em nossa configuração, somos forçados a usar o Microsoft Active Directory (AD) para acesso ssh à nossa VM Linux, para que, quando os funcionários saírem, possam ser impedidos de acessar a VM assim que sua conta AD for desativada.

Já temos todos os nossos dados e usuários configurados. Portanto, meu plano proposto é:

  1. Desative todo o acesso remoto/ssh às contas de usuário originais, permitindo apenas o acesso através de suas novas contas AD.

  2. Ao fazer login na conta do AD, eles fazem login automaticamente na conta de usuário original.

Preciso lognameimprimir a conta de usuário original (ou seja, a conta na qual ele fez login automaticamente) e não a nova conta do AD.

Responder1

De forma muito simplista, você poderia substituir a respectiva variável login-shell por /etc/passwdum script de redirecionamento:

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

E o roteiro seria como

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

su "$oldname"

Em seguida, certifique-se de que AD_user possa fazer login no usuário antigo sem senha, por exemplo, por meio de uma sudoersentrada (adaptar script para usar sudo).


No entanto, ainda sugiro criar um script de "atualização de ID" para ser executado uma vez com a mudança e ter uma configuração menos complicada no futuro. Isso é muito mais estável, seguro e requer tanto esforço quanto o script acima.

Responder2

Editado para usar sshem vez de loginporque pode fazer uso de autenticação de chave pública e não precisa de modificação na lista de sudoers (por sudo visudo). Também adiciono o comando /etc/bash.bashrcporque ele tem o efeito desejado de não fazer nada se não estiver sendo executado de forma interativa. Este script se torna um script conveniente para usuários que ainda não configuraram seus clientes ssh corretamente para usartunelamento de conexão(também conhecido como ssh multihop).

Acrescentarei mais informações sobre a configuração do tunelamento de conexão assim que descobrir.


Inspirado na outra resposta, mas em uma abordagem alternativa (porque os usuários do AD não estão listados em /etc/passwd.

Configurar:

  • Uma entrada de linha /etc/bash.bashrc(somente se você quiser que isso seja executado por padrão no login inicial):
# Executes convenience script which prompts all white-listed users whether they wish to login as their default work user account
/bin/login_redirect

Isso faz com que o usuário faça login via ssh em sua conta de usuário de trabalho padrão.

Roteiro principal:/bin/login_redirect(deve ser executável para todos os usuários 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: Se login_redirectfor executado por um usuário que não seja de trabalho, isso fará com que ele faça login automaticamente em seu usuário de trabalho padrão.

informação relacionada