Isto não é diretamente possível a partir do próprio sudo, mas é possível com alguma técnica hackea.
sudo_timeout.sh :
#!/bin/bash
timeout=10 #seconds
set -m
echoerr() { echo "$@" 1>&2; }
keep_eye_on() {
pid=$1
time_passed=0
while kill -0 $pid &> /dev/null; do
sleep 1
let time_passed=time_passed+1
if [ $time_passed -ge $timeout ]; then
echoerr "Timeout reached."
kill -9 $pid
exit 1
fi
done
}
if [ -z "$1" ]; then
echoerr "Please specify a process to run!"
exit 1
fi;
sudo $@ &
pid=$!
keep_eye_on $pid &
while true; do
if kill -0 $pid &> /dev/null; then
fg sudo > /dev/null; [ $? == 1 ] && break;
else
break
fi
done
A variável timeout
mantém o tempo limite em segundos para aguardar antes de matar o processo sudo que está solicitando senha.
Uso:
./sudo_timeout.sh <command>
Exemplo:
./sudo_timeout.sh ls -al
Caso o tempo limite seja atingido, você verá:
alex@MaD-pc:~$ ./sudo_timeout.sh ls -al
[sudo] password for alex: Timeout reached.
./sudo_timeout.sh: line 34: 14583 Killed sudo $@
Caso você digite sua senha antes do tempo limite, o comando será executado normalmente.
Disclaimer: O acima é testado com comandos simples como ls
e nano
, com e sem argumentos, mas não posso garantir que funcionará em todos os casos, porque eu não testei completamente, é apenas algo Eu vim com.