ルートにならずに別のユーザーとして完全ログインする方法はありますか?

ルートにならずに別のユーザーとして完全ログインする方法はありますか?

私たちの設定では、Linux VM への SSH アクセスに Microsoft Active Directory (AD) を使用するように強制されているため、従業員が退職すると、AD アカウントが非アクティブ化されて VM へのアクセスがブロックされる可能性があります。

すでにすべてのデータとユーザーが設定されています。そこで私が提案する計画は次のとおりです。

  1. 元のユーザー アカウントへのすべてのリモート/SSH アクセスを無効にし、新しい AD アカウント経由のアクセスのみを許可します。

  2. AD アカウントに ssh でログインすると、元のユーザー アカウントに自動的にログインされます。

logname新しい AD アカウントではなく、元のユーザー アカウント (つまり、自動的にログインされるアカウント) を印刷する必要があります。

答え1

非常に単純なベースでは、それぞれのログイン シェル変数を/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

公開鍵認証を利用できるため、sudoers リストを変更する必要がないため、 のssh代わりに を使用するように編集しました( による)。また、対話的に実行されていない場合は何も行わないという望ましい効果が得られるため、 にコマンドを追加しました。このスクリプトは、まだ ssh クライアントを正しく設定していないユーザーが を使用するための便利なスクリプトになります。loginsudo visudo/etc/bash.bashrc接続トンネリング(SSH マルチホップとも呼ばれます)。

接続トンネリングの設定については、理解できたらさらに追加します。


他の回答に触発されましたが、別のアプローチです (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非作業ユーザーによって実行されると、デフォルトの作業ユーザーに自動的にログインします。

関連情報