Bloquear o sistema após a suspensão acordada (incl. sistema de desligamento forçado após a contagem regressiva)?

3

Para velocidade e conveniência, não encerro o sistema quando estou ausente há alguns minutos, mas faço um pm-suspend ! Quando o sistema "não suspender" / retoma, eu gostaria que houvesse um bloqueio (tela) (no X e em todos os outros terminais) que, além disso, deveria iniciar um desligamento forçado após algum tempo sem login.

já indica algum caminho para mim. E os aspectos especiais procurados nesta questão são:

  • AMBOS todos os terminais virtuais (tty1-tty6) devem estar inacessíveis
  • E X deve estar inacessível
  • ALÉM DISSO, eu gostaria que após o resumo / ativação houvesse apenas um curto espaço de tempo para fazer login novamente e, caso contrário, o sistema deveria "se autodestruir"

Uma razão importante / backgroud é que eu quero limitar o risco de expor uma partição LUKS desbloqueada. Enquanto na inicialização o disco está protegido mas não quando deixo o meu sistema suspenso.

    
por humanityANDpeace 20.10.2014 / 16:55

2 respostas

1

Este script sleep.d deve funcionar (substitua <youruser> por um usuário para o qual você tenha a senha. Eu o executei com root pela primeira vez e não pude voltar):

#!/bin/sh

case "$1" in
    hibernate|suspend)
       ;;
    thaw|resume)
       USER=<youruser> /usr/bin/vlock -ans &
       echo $! > /var/run/vlock.pid
       /opt/bin/timeout_vlock.sh &
       ;;
    *) exit $NA
       ;;
esac

O conteúdo de /opt/bin/timeout_vlock.sh :

#!/bin/bash

TIMEOUT=10

while kill -0 $(< /var/run/vlock.pid); do
    [ $TIMEOUT -le 0 ] && break
    sleep 1
    let TIMEOUT--
done

rm /var/run/vlock.pid
[ $TIMEOUT -le 0 ] && shutdown -h now

Ajuste TIMEOUT para o valor desejado e certifique-se de dar permissão de execução: 'chmod + x /opt/bin/timeout_vlock.sh'.

O script sleep.d usa vlock para bloquear todos os ttys (mesmo aquele com X), desabilitar sysrq e solicitar sua senha de usuário para desbloquear. Ele salva o pid do vlock para uso posterior.

O timeout_vlock.sh espera que o vlock termine (o que acontece quando você insere sua senha). Se TIMEOUT for atingido, ele desligará o sistema.

    
por 24.10.2014 / 19:39
0

Esta resposta está aumentando a resposta sugerida pelo @gnp. A diferença é que para reduzir o risco de vlock de bloqueio da troca de console / terminal virtual ser impactado pelos habituais hacks pm-suspend etc que mexem com os consoles.

Semelhante a resposta do @gnp precisamos de dois arquivos

/etc/pm/sleep.d/20_lock_with_countdown (com permissão de arquivo + x)

#!/bin/sh

case "$1" in
    hibernate|suspend)

       # generate a kernel/console keymap that has no Console_1 .... Console7
       # and no Incr_Console and no Decr_Console keymappings
       dumpkeys -f |\
       tee /tmp/oldkeymap |\
       sed 's/Console_[0-9]*/VoidSymbol/g' |\
       sed 's/Incr_Console/VoidSymbol/g' |\
       sed 's/Decr_Console/VoidSymbol/g' > /tmp/keymap.with.chvtkeys.disabled

       #set the new "castrated" keymap
       loadkeys /tmp/keymap.with.chvtkeys.disabled
       ;;
    thaw|resume)
       USER=<username> /usr/bin/vlock -ans &
       echo $! > /var/run/vlock.pid
       /opt/bin/timeout_vlock.sh &
       ;;
    *) exit $NA
       ;;
esac

e, em seguida, um script para o desbloqueio da contagem regressiva /opt/bin/timeout_vlock.sh :

#!/bin/bash

TIMEOUT=<timeout>

while kill -0 $(< /var/run/vlock.pid); do
    [ $TIMEOUT -le 0 ] && break
    sleep 1
    let TIMEOUT--
done

rm /var/run/vlock.pid
# restore keymap with previous "chvt enabled" keys enabled
loadkeys /tmp/oldkeymap
[ $TIMEOUT -le 0 ] && shutdown -h now

Como na outra resposta, o campo <timeout> e <username> deve ser ajustado nos scripts.

Por último, mas não menos importante, é possível mudar a última linha de /opt/bin/timeout_vlock.sh

< [ $TIMEOUT -le 0 ] && shutdown -h now
----
> [ $TIMEOUT -le 0 ] &&  echo u > /proc/sysrq-trigger '
> [ $TIMEOUT -le 0 ] &&  echo o > /proc/sysrq-trigger

'

para evitar outra pequena janela de interação de oportunidade mal-intencionada, pois nem sempre é shutdown -h now a maneira mais rápida de desligar seu PC

    
por 25.10.2014 / 13:16