有沒有辦法以另一個使用者身分執行完整登入而無需 root 身分?

有沒有辦法以另一個使用者身分執行完整登入而無需 root 身分?

在我們的設定中,我們被迫使用 Microsoft Active Directory (AD) 透過 ssh 存取我們的 Linux VM,這樣當員工離開時,一旦 AD 帳戶被停用,他們就無法存取 VM。

我們已經設定了所有數據和用戶。所以我提出的計劃是:

  1. 停用對原始使用者帳戶的所有遠端/ssh 訪問,僅允許透過新的 AD 帳戶進行存取。

  2. 透過 ssh 登入其 AD 帳戶後,他們會自動登入其原始使用者帳戶。

我需要logname列印原始使用者帳戶(即他們自動登入的帳戶)而不是新的 AD 帳戶。

答案1

在非常簡單的基礎上,您可以將相應的登入 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更新”腳本,在移動時運行一次,並且將來的設定不會那麼繁瑣。這更加穩定、安全,並且需要與上面的腳本一樣多的努力。

答案2

編輯為 usessh而不是,login因為它可以使用公鑰身份驗證並且不需要修改 sudoers 列表(通過sudo visudo)。我還添加了該命令,/etc/bash.bashrc因為它具有如果不交互運行則不執行任何操作的預期效果。該腳本對於尚未正確設定 ssh 用戶端的用戶來說是一個方便的腳本連接隧道(也稱為 ssh 多跳)。

一旦我弄清楚了連接隧道設置,我將添加更多內容。


受到其他答案的啟發,但有一種替代方法(因為 AD 用戶未在 /etc/passwd.conf 中列出)

設定:

  • 一行/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由非工作使用者執行,那麼這會自動將他們登入預設工作使用者。

相關內容