%20%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B.png)
tar を使用してディレクトリをバックアップする bash スクリプト (Ubuntu) を作成しようとしています。
スクリプトを root (または sudo) としてのみ実行できるようにチェックするにはどうすればよいですか?
たとえば、ユーザーがスクリプトを実行する場合、このスクリプトは sudo 権限で実行する必要があると表示され、終了します。スクリプトが root として実行されると、チェックを過ぎても続行されます。
簡単な解決策があるはずだとわかっていますが、グーグルで検索しても見つけられませんでした。
答え1
有効な uid を取得するには、次のコマンドを使用します。
id -u
結果が「0」の場合、スクリプトは root として実行されているか、sudo を使用しています。次のようにしてチェックを実行できます。
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo "Not running as root"
exit
fi
答え2
所有権をルートに変更することで
chown root:root file
権限を700に設定する
chmod 700 file
sudo として実行するように提案されなくても、同じことを実現できます。
しかし、完全を期すためにこの回答を投稿します。
答え3
bash 変数は$EUID
スクリプトが実行されている有効な UID を示します。スクリプトが root として実行されるようにするには、$EUID
値 0 が含まれているかどうかを確認します。
if [[ $EUID -ne 0 ]]; then
echo "$0 is not running as root. Try using sudo."
exit 2
fi
/usr/bin/id
これは、外部コマンドを必要としないため、(bash スクリプトの場合) を使用したソリューションよりも優れています。
答え4
ここでの目的は何ですか? スクリプトを root として実行する必要があることをユーザーに通知すること、または何らかのセキュリティ予防策として実行することでしょうか?
ユーザーに通知したいだけであれば、uid の提案はどれでも問題ありませんが、セキュリティ上の予防策としては、それらは馬のタイヤと同じくらい役に立ちません。ユーザーがスクリプトをコピーし、if ステートメントを削除して、とにかく実行することを止めるものは何もありません。
これがセキュリティ上の問題である場合は、スクリプトを 700 に設定し、root:root が所有するようにして、他のユーザーが読み取りや実行ができないようにする必要があります。