아래와 같은 스크립트(test1.sh)가 있습니다. 전제 조건으로 이 스크립트를 입력하는 동안 여러 패키지를 설치해야 하기 때문에 루트로 실행해야 합니다. $EUID 값은 0이 아니어야 합니다. 변경하는 데 도움을 주실 수 있나요? 이 $EUID 값
test1.sh
#!/usr/bin/env bash
if [[ $EUID -eq 0 ]]; then
echo "This script must be run as nonroot user. Otherwise, couple of test
cases will fail."
exit 1
fi
답변1
zsh 쉘만 유효 사용자 변경을 지원합니다. 이는 $EUID
아래 시스템 호출이라는 특수 변수의 값을 변경하여 수행됩니다 setresuid()
. 또한 UID
변수를 설정하여 실제 및 유효 사용자 ID를 설정하거나 USERNAME
변수를 할당하여 로그인을 시뮬레이션하고 실제 및 유효 uid는 물론 시스템 사용자를 기반으로 실제 및 유효 그룹 ID 및 보충 그룹 ID 목록 데이터베이스를 설정할 수도 있습니다.
Bash 쉘에서는 $EUID
읽기 전용이며 실행 중인 프로세스의 유효 사용자 ID 값을 반영 bash
하며 변경할 수 없습니다.
에서는 사용자 ID를 변경하려면 bash
별도의 명령(예 perl
: zsh
, ) 을 실행해야 합니다. su
sudo
예를 들어:
#! /usr/bin/env bash
if (( EUID == 0 )); then
exec zsh -c 'EUID=123; exec bash -p "$0" "$@"' "$0" "$@"
# or
exec perl -e '$> = 123; exec @ARGV' bash -p "$0" "$@"
fi
zsh
euid를 변경하면 스크립트가 euid 123으로 다시 실행됩니다.
유효한 사용자 ID만 설정합니다. 따라서 이 -p
옵션은 bash
유효 uid가 실제 사용자 ID와 다른 것을 좋아하지 않습니다.
UID=123
실제 uid( )를 변경하거나 uid/gid가 사용자 데이터베이스( )와 일치하는 정상적인 상황에 있도록 실제 로그인을 시뮬레이션하는 것이 더 나을 것입니다. 이를 위해 또는 USERNAME=realuser
다음을 사용할 수도 있습니다 .su
sudo
exec su realuser -c 'exec "$0" ${1+"$@"}' bash "$0" "$@"
(가상의 로그인 쉘은 realuser
Bourne과 유사합니다)
exec sudo -u realuser bash "$0" "$@"
( sudo
단순히 uid/gid를 변경하는 것 이상이 있을 수 있습니다.)