#!/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
O usuário root tem UID 0 (independentemente do nome da conta "root"). Se o UID efetivo retornado por id -u
não for zero, o usuário não executará o script com privilégios de root. Use id -ru
para testar o ID real (o UID do usuário invocando o script).
Não use $EUID
no script, pois isso pode ser modificado por um usuário não privilegiado:
$ bash -c 'echo $EUID'
1000
$ EUID=0 bash -c 'echo $EUID'
0
Se um usuário fizesse isso, obviamente não levaria ao escalonamento de privilégios, mas poderia levar a que os comandos do script não pudessem fazer o que eles deveriam fazer e os arquivos sendo criados com o proprietário errado, etc.