Есть ли способ выполнить полный вход в систему под другим пользователем, не будучи root?

Есть ли способ выполнить полный вход в систему под другим пользователем, не будучи root?

В нашей конфигурации мы вынуждены использовать Microsoft Active Directory (AD) для доступа по SSH к нашей виртуальной машине Linux, чтобы, когда сотрудники уходят, им можно было заблокировать доступ к виртуальной машине после деактивации их учетной записи AD.

У нас уже есть все наши данные и пользователи, настроенные. Поэтому мой предлагаемый план таков:

  1. Отключите весь удаленный / ssh-доступ к исходным учетным записям пользователей, разрешив доступ только через их новые учетные записи AD.

  2. При входе по SSH в свою учетную запись AD они автоматически входят в свою исходную учетную запись пользователя.

Мне нужно lognameраспечатать исходную учетную запись пользователя (т. е. учетную запись, в которую он автоматически входит), а не новую учетную запись AD.

решение1

Если говорить совсем упрощенно, вы можете заменить соответствующую переменную login-shell на /etc/passwdскрипт перенаправления:

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

И сценарий будет таким:

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

su "$oldname"

Затем убедитесь, что AD_user может войти в систему под старым пользователем без пароля, например, через sudoersзапись (адаптируйте скрипт для использования sudo).


Однако я все равно предлагаю создать скрипт "ID-update", который будет запущен один раз при перемещении и иметь менее сложную настройку в будущем. Это гораздо более стабильно, безопасно и требует столько же усилий, как и такой скрипт, как выше.

решение2

Отредактировано для использования sshвместо , loginпоскольку он может использовать аутентификацию с открытым ключом и не требует изменения списка sudoers (by sudo visudo). Я также добавляю команду в , /etc/bash.bashrcпоскольку она имеет желаемый эффект не делать ничего, если не запущена в интерактивном режиме. Этот скрипт становится удобным скриптом для пользователей, которые еще не настроили свои клиенты ssh правильно, чтобы использоватьтуннелирование соединения(также известный как ssh multihop).

Я добавлю больше информации о настройке туннелирования соединений, как только разберусь с этим.


Вдохновлен другим ответом, но альтернативный подход (поскольку пользователи AD не перечислены в /etc/passwd.

Настраивать:

  • Строка /etc/bash.bashrc(только если вы хотите, чтобы она выполнялась по умолчанию при первом входе в систему):
# Executes convenience script which prompts all white-listed users whether they wish to login as their default work user account
/bin/login_redirect

Это заставит пользователя войти в систему через SSH, используя свою рабочую учетную запись по умолчанию.

Основной сценарий:/bin/login_redirect(должен быть доступен для выполнения всем пользователям 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

Примечание: если login_redirectэто выполняется не пользователем, работающим на работе, то это автоматически выполнит вход в систему под учетной записью пользователя, работающего по умолчанию.

Связанный контент