私のソースは次のとおりです。
#!/bin/bash
echo "Running script to free general cached memory!"
echo "";
echo "Script must be run as root!";
echo "";
echo "Clearing swap!";
swapoff -a && swapon -a;
echo "";
echo "Clear inodes and page file!";
echo 1 > /proc/sys/vm/drop_caches;
echo "";
キャッシュやその他の項目を消去し、端末でrootとして実行する必要があると言います。デフォルトでは、スクリプトがルートとして実行されていないことを検出した場合は、スクリプトの実行を停止したいと思います。
例:
"Running script to free general cached memory!"
"Warning: script must be run as root or with elevated privileges!"
"Error: script not running as root or with sudo! Exiting..."
高い権限で実行すると正常に実行されます。どんなアイデアがありますか?ありがとうございます!
ベストアンサー1
#!/bin/sh
if [ "$(id -u)" -ne 0 ]; then
echo 'This script must be run by root' >&2
exit 1
fi
cat <<HEADER
Host: $(hostname)
Time at start: $(date)
Running cache maintenance...
HEADER
swapoff -a && swapon -a
echo 1 >/proc/sys/vm/drop_caches
cat <<FOOTER
Cache maintenance done.
Time at end: $(date)
FOOTER
rootユーザーのUIDは0です(「root」アカウント名に関係ありません)。返された有効なUIDがid -u
0以外の場合、ユーザーはroot権限でスクリプトを実行しません。id -ru
実際のID(ユーザーのUID)テスト用移動するスクリプト)。
$EUID
権限のないユーザーが変更できるため、スクリプトで使用しないでください。
$ bash -c 'echo $EUID'
1000
$ EUID=0 bash -c 'echo $EUID'
0
ユーザーがこれを行うと、明らかに特権の昇格は発生しませんが、スクリプトのコマンドが実行する必要がある操作を実行せずに、ファイルが誤った所有者として生成される可能性があります。