Bashシェルで$ EUID値をゼロ以外の値に変更する方法

Bashシェルで$ EUID値をゼロ以外の値に変更する方法

以下のスクリプト(test1.sh)があります。前提条件としてこのスクリプトを入力している間に複数のパッケージをインストールする必要があるため、rootとして実行する必要があります。 $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を変更する以上の可能性があります。)

おすすめ記事