Eu faria isso com avaliação aritmética:
if [[ $(stat -c '%u' conf.sh) -ne 0 -o \
$(( $(stat -c '%a' conf.sh) & 0044)) -ne 0 ]]; then
# file's owner is not root or file is writable by group or world
fi
Eu tenho um script que precisa ser executado como root. Ele também tem um arquivo de configuração que é lido usando a fonte:
source conf.sh
Gostaria de verificar se o usuário normal não pode editar conf.sh
e, portanto, obter acesso root.
Posso verificar quem é o proprietário do arquivo e qual grupo de permissões e outros têm:
if [[ "$(stat -c "%a" conf.sh | egrep ".2.|.3.|.6.|.7.|..2|..3|..6|..7")" != "" ]] || [[ "$(stat -c "%u" conf.sh)" != "0" ]]; then
#don't execute the file"
fi
Estou sentindo falta de alguma coisa aqui? Existem melhores práticas?
Tags bash root security shell-script