В нашей конфигурации мы вынуждены использовать Microsoft Active Directory (AD) для доступа по SSH к нашей виртуальной машине Linux, чтобы, когда сотрудники уходят, им можно было заблокировать доступ к виртуальной машине после деактивации их учетной записи AD.
У нас уже есть все наши данные и пользователи, настроенные. Поэтому мой предлагаемый план таков:
Отключите весь удаленный / ssh-доступ к исходным учетным записям пользователей, разрешив доступ только через их новые учетные записи AD.
При входе по 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
это выполняется не пользователем, работающим на работе, то это автоматически выполнит вход в систему под учетной записью пользователя, работающего по умолчанию.