シェルスクリプトの実行時にユーザーにrootとしてログインするように求めるメッセージを表示する

シェルスクリプトの実行時にユーザーにrootとしてログインするように求めるメッセージを表示する

私が経験している問題は、コマンドを入力したとき

su - root

マイシェルスクリプトファイルの先頭に、ユーザーにパスワードの入力を求めるメッセージを表示し、次の手順を実行します。いいえ残りのシェルスクリプトを続行します。その後、端末を介してシェルスクリプトを手動で見つけて実行する必要があります。ユーザーがrootとしてログインしていることを確認してから、残りのシェルスクリプトに進むスクリプトが必要です。

つまり、任意のユーザーでスクリプトを実行したいがスクリプトが実行を開始したら、ユーザーは root に変更し、完了するまで残りのスクリプトを root として実行し続ける必要があります。これは可能ですか?

答え1

これは実装が簡単です。

#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"

現在のユーザーがrootでない場合は、スクリプトを再実行してくださいsudo

sudoパラメータを保存できるので、suここでは。を使用する場合、suコマンドは次のようになります。su -c "$0 $@"スペースまたは特殊シェル文字が含まれていると、引数が破損します。

シェルがbashの場合、外部呼び出しを避けることができますwhoami

(( EUID != 0 )) && exec sudo -- "$0" "$@"

答え2

UIDを確認することもできます。

 if [ $(id -u) != 0 ]; then
     echo "You're not root"
     # elevate script privileges
 fi

答え3

スクリプト自体を呼び出して、次のことを確認できます。

#! /bin/bash

if [ "root" != "$USER" ]; then
  su -c "$0" root
  exit
fi

...

答え4

ログインしたい場所に次のコマンドを追加するだけです。

sudo su

これは私のコードと完全に機能します。

関連情報