Bash 쉘에서 $EUID 값을 0이 아닌 값으로 변경하는 방법

Bash 쉘에서 $EUID 값을 0이 아닌 값으로 변경하는 방법

아래와 같은 스크립트(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

zsheuid를 변경하면 스크립트가 euid 123으로 다시 실행됩니다.

유효한 사용자 ID만 설정합니다. 따라서 이 -p옵션은 bash유효 uid가 실제 사용자 ID와 다른 것을 좋아하지 않습니다.

UID=123실제 uid( )를 변경하거나 uid/gid가 사용자 데이터베이스( )와 일치하는 정상적인 상황에 있도록 실제 로그인을 시뮬레이션하는 것이 더 나을 것입니다. 이를 위해 또는 USERNAME=realuser다음을 사용할 수도 있습니다 .susudo

exec su realuser -c 'exec "$0" ${1+"$@"}' bash "$0" "$@"

(가상의 로그인 쉘은 realuserBourne과 유사합니다)

exec sudo -u realuser bash "$0" "$@"

( sudo단순히 uid/gid를 변경하는 것 이상이 있을 수 있습니다.)

관련 정보