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
'programing' 카테고리의 다른 글
Excel에서 클릭하면 하이퍼링크가 #에서 %20-%20으로 변경됩니다. (0) | 2023.04.28 |
---|---|
SQL Left Join 첫 번째 일치 항목만 (0) | 2023.04.28 |
전화: 텍스트 입력을 위한 숫자 키보드 (0) | 2023.04.28 |
바둑에서 문자열을 효율적으로 연결하는 방법 (0) | 2023.04.28 |
Azure Service Fabric은 Docker와 같은 기능을 합니까? (0) | 2023.04.23 |