Tarを使用してディレクトリをバックアップするbashスクリプト(Ubuntu)を記述しようとしています。
スクリプトでチェックを実行して、rootとして(またはSudoでのみ)実行できるようにするにはどうすればよいですか?
たとえば、ユーザーがスクリプトを実行する場合、このスクリプトはSudo権限で実行する必要があると言って終了する必要があります。スクリプトがrootとして実行される場合、チェックを通過して続行します。
簡単な解決策が必要だとわかっていますが、グーグルでそれを見つけることができませんでした。
有効なuidを取得するには、次のコマンドを使用します。
id -u
結果が「0」の場合、スクリプトはrootとして実行されているか、Sudoを使用しています。次のようなことでチェックを実行できます:
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo "Not running as root"
exit
fi
所有権をrootに変更することで、
chown root:root file
アクセス許可を700に設定する
chmod 700 file
あなたは同じことを成し遂げるでしょう-Sudoとして実行するという提案なしで。
しかし、私は完全を期すためにこの回答を投稿します。
Whoamiコマンドも使用できます。
if [ ! "`whoami`" = "root" ]
then
echo "\nPlease run script as root."
exit 1
fi
Rootとして、または何らかのセキュリティ対策としてスクリプトを実行する必要があることをユーザーに通知するための、ここでの目的は何ですか?
Uidの提案のいずれかでユーザーに通知したいだけの場合は問題ありませんが、セキュリティ対策として馬のタイヤと同じくらい便利です。ユーザーがスクリプトをコピーしてifステートメントを削除しないようにする方法はありません。とにかくそれを実行します。
これがセキュリティの問題である場合は、スクリプトを700に設定し、root:rootが所有するようにして、他のユーザーが読み取りまたは実行できないようにする必要があります。
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スクリプトの場合)を使用したソリューションよりも優れています。
Rootだけがスクリプトを実行できるようにする簡単な方法の1つは、次の行でスクリプトを開始することです。#!/bin/su root