루트 없이 다른 사용자로 전체 로그인을 수행할 수 있는 방법이 있습니까?

루트 없이 다른 사용자로 전체 로그인을 수행할 수 있는 방법이 있습니까?

설정에서는 Microsoft Active Directory(AD)를 사용하여 SSH를 통해 Linux VM에 액세스해야 하므로 직원이 퇴사할 때 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대신 사용하도록 편집되었습니다 (passed ). 또한 대화형으로 실행되지 않으면 아무 것도 하지 않는 원하는 효과가 있기 때문에 명령을 추가했습니다 . 이 스크립트는 아직 SSH 클라이언트를 제대로 설정하지 않은 사용자를 위한 편의 스크립트입니다.loginsudo visudo/etc/bash.bashrc연결 터널(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업무용 사용자가 아닌 사용자가 실행하는 경우 자동으로 기본 업무용 사용자로 로그인됩니다.

관련 정보