web-dev-qa-db-ja.com

Bashスクリプト:rootとして(またはSudoを使用して)スクリプトを実行する必要があります

Tarを使用してディレクトリをバックアップするbashスクリプト(Ubuntu)を記述しようとしています。

スクリプトでチェックを実行して、rootとして(またはSudoでのみ)実行できるようにするにはどうすればよいですか?

たとえば、ユーザーがスクリプトを実行する場合、このスクリプトはSudo権限で実行する必要があると言って終了する必要があります。スクリプトがrootとして実行される場合、チェックを通過して続行します。

簡単な解決策が必要だとわかっていますが、グーグルでそれを見つけることができませんでした。

26
Cory Plastek

有効なuidを取得するには、次のコマンドを使用します。

id -u

結果が「0」の場合、スクリプトはrootとして実行されているか、Sudoを使用しています。次のようなことでチェックを実行できます:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi
37
Scott Pack

所有権をrootに変更することで、

chown root:root file

アクセス許可を700に設定する

chmod 700 file

あなたは同じことを成し遂げるでしょう-Sudoとして実行するという提案なしで。

しかし、私は完全を期すためにこの回答を投稿します。

17
Brent

Whoamiコマンドも使用できます。

if [ ! "`whoami`" = "root" ]
then
    echo "\nPlease run script as root."
    exit 1
fi
2
Kiril

Rootとして、または何らかのセキュリティ対策としてスクリプトを実行する必要があることをユーザーに通知するための、ここでの目的は何ですか?

Uidの提案のいずれかでユーザーに通知したいだけの場合は問題ありませんが、セキュリティ対策として馬のタイヤと同じくらい便利です。ユーザーがスクリプトをコピーしてifステートメントを削除しないようにする方法はありません。とにかくそれを実行します。

これがセキュリティの問題である場合は、スクリプトを700に設定し、root:rootが所有するようにして、他のユーザーが読み取りまたは実行できないようにする必要があります。

2
theotherreceive

Bash変数$EUIDは、スクリプトが実行されている有効なUIDを示します。スクリプトがルートとして実行されることを確認するには、$EUIDに値0が含まれているかどうかを確認します。

if [ $EUID -ne 0 ]; then
    echo "$0 is not running as root. Try using Sudo."
    exit 2
fi

これは、外部コマンドを必要としないため、/usr/bin/id(bashスクリプトの場合)を使用したソリューションよりも優れています。

2
neuhaus

Rootだけがスクリプトを実行できるようにする簡単な方法の1つは、次の行でスクリプトを開始することです。
#!/bin/su root

0
alexandre1985