Para resolver seu primeiro problema:
how can I write "script would detect if it was running with the right permissions and not call sudo at all"?
Existe uma verificação simples e POSIX para root:
#!/bin/sh
AmIRoot()
{
[ "$(id -u)" -eq 0 ]
}
Como alternativa, no Bash, mais codificadores orientados a desempenho podem usar:
#!/bin/bash
AmIRoot()
{
! (( ${EUID:-0} || $(id -u) ))
}
Note que encapsulou intencionalmente o código em funções para reutilização.
Para resolver seu segundo problema:
how can I improve its security to avoid the problem of giving superuser privileges to commands which don't need them when running the script with sudo?
Você não pode fazer muito sobre isso. Pelo menos nada vem à minha mente. Se eu vi o roteiro, posso ter sugestões. Mas como você não o incluiu na sua pergunta ... Se você executar o script inteiro com sudo
ou como root
, não vejo como controlar isso.
Para abordar o comentário:
What do you think of "use sudo inside it vs run it with sudo"
Em meus scripts, eu costumo prosseguir com a última abordagem, mas isso não significa necessariamente que eu recomendo para você. Porque depende de quem o script é destinado - para root
apenas; para o usuário, principalmente com a exceção de alguns usuários terem sudo
direitos; você teria que incluir literalmente o seu script na pergunta para eu poder responder com qualquer valor.