web-dev-qa-db-ja.com

シェルスクリプトの実行時にrootとしてログインするようユーザーに要求する

私が得ている問題は、コマンドを入力すると、

su - root

シェルスクリプトファイルの先頭で、ユーザーにパスワードの入力を求め、次に[〜#〜] not [〜#〜]シェルスクリプトの残りの部分を続行します。次に、ターミナルからシェルスクリプトを手動で見つけて実行する必要があります。スクリプトで、ユーザーがrootとしてログインしていることを確認してから、シェルスクリプトの残りの部分を続行します。

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

17
Redson

これは非常に簡単に実行できます。

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

現在のユーザーがrootでない場合は、Sudoを使用してスクリプトを再実行します。

ここでは、Sudoではなくsuを使用していることに注意してください。これは、引数を保持できるためです。 suを使用する場合、コマンドはsu -c "$0 $@"である必要があります。これにより、引数にスペースや特殊なシェル文字が含まれている場合、引数が破損します。

シェルがbashの場合、whoamiへの外部呼び出しを回避できます。

(( EUID != 0 )) && exec Sudo -- "$0" "$@"
34
Patrick

UIDも確認できます。

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

スクリプト自体を呼び出して、以下を確認できます。

#! /bin/bash

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

...
5
Hauke Laging

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

Sudo su

これは私のコードで完全に機能しています

0
user245333