Opção de intervalo de tempo no encerramento de um usuário em sudoers

2

Eu preciso dar privilégios de sudo a um usuário para permissões de desligamento. Mas o usuário só pode enviar uma solicitação de desligamento com um tempo maior que 3 horas. Eu tenho tentado implementar globbing.

Por exemplo:

username ALL=/usr/sbin/shutdown +[[:digit:]] -> Trial for any number 
username ALL=/usr/sbin/shutdown +[180-*] -> Trial for 180 minutes and beyond

E vários outros casos, mas nada funciona.

    
por Shazam 14.10.2018 / 01:39

1 resposta

2

Meu primeiro pensamento foi um script wrapper no qual você concede acesso ao sudo a esse script e, em seguida, faz a verificação de parâmetro nesse script.

username ALL=/usr/local/sbin/shutdown-wrapper

E então algo assim para o wrapper de encerramento:

#!/bin/sh

case $1 in
  *[!0-9]*) echo Invalid; exit 2;;
esac

if [ "$1" -ge 180 ]
then
  /usr/sbin/shutdown +"$1"
else
  echo Invalid
  exit 2
fi

... e instrua o usuário a chamar sudo /usr/local/sbin/shutdown-wrapper N , onde N é o número de minutos.

Outra opção é soletrar, usando intervalos de caracteres da seção curinga do Página man sudoers :

username ALL=(ALL:ALL) /usr/sbin/shutdown +18[0-9], \
                       /usr/sbin/shutdown +19[0-9], \
                       /usr/sbin/shutdown +[2-9][0-9][0-9], \
                       /usr/sbin/shutdown +[1-9][0-9][0-9][0-9]*

Isto explicita os minutos de 180 a 189, 190 a 199, 200 a 999 e, em seguida, qualquer coisa (numérica ou outra!) que comece com pelo menos 4 dígitos, o primeiro dos quais não pode ser zero. Isso permitiria intervalos de tempo inválidos, como /usr/sbin/shutdown +9999jeff , o que resultaria simplesmente em um erro de análise de shutdown :

Failed to parse time specification: +9999jeff

    
por 14.10.2018 / 02:37