programing

sudo에서 호출한 Bash 스크립트에서 사용자 식별

cafebook 2023. 4. 28. 21:30
반응형

sudo에서 호출한 Bash 스크립트에서 사용자 식별

스크립트를 생성하는 경우/root/bin/whoami.sh포함:

#!/bin/bash
whoami

그리고 이 스크립트는 적절하게 구성된 sudo를 가진 사용자에 의해 호출됩니다.

root

스크립트에서 실제 사용자를 얻는 빠른 방법이 있습니까? 아니면 이 사용자 이름을 따라 전달되는 매개 변수에 의존해야 합니까?

$SUDO_USER를 사용하는 경우 작동하지 않습니다.sudo su -.
또한 여러 번의 확인이 필요합니다.$USER == 'root'그럼 겟$SUDO_USER.

명령 대신whoami사용하다who am i이것은 실행됩니다.who현재 세션에 대해 필터링된 명령입니다.필요 이상의 정보를 제공합니다.사용자만 사용하려면 다음 작업을 수행합니다.

who am i | awk '{print $1}'

사용할 수 있는 대안(간단함)logname그것은 위의 진술과 같은 일을 합니다.

세션에 로그인한 사용자 이름이 제공됩니다.

이것들은 상관없이 작동합니다.sudo또는sudo su [whatever]또한 횟수에 상관없이 작동합니다.su그리고.sudo호출됩니다.

$SUDO_USER가 유효하다고 생각합니다.

#!/bin/bash
echo $SUDO_USER
whoami

sudo 여부에 관계없이 스크립트를 호출한 사용자의 사용자 이름을 가져오는 방법은 다음과 같습니다.

if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi

또는 더 짧은 버전.

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`

사용.whoami,who am i,who,id또는$SUDO_USER여기가 아닙니다.

정말로.who로그인한 사용자(수십 명)만 나열되기 때문에 문제에 대한 해결책이 될 수 없습니다.

내가 보기에 유일하게 가치 있는 답은logname.

이것이 도움이 되길 바랍니다.

만약 당신이 찾고 있는 것이 UID라면(도커 셰넌건에 유용), 이것은 다음과 같이 작동합니다.

LOCAL_USER_ID=$(id -u $(logname))

who am i | awk '{print $1}'나한테는 안 먹혔지만,who|awk '{print $1}'그 일에 도움이 될 것입니다.

시스템이 실제 UID와 유효 UID를 구분하지만 셸 수준에서 이를 내보내는 프로그램을 찾을 수 없습니다.

언급URL : https://stackoverflow.com/questions/3522341/identify-user-in-a-bash-script-called-by-sudo

반응형