절전 모드 해제 후 시스템을 잠그시겠습니까(카운트다운 후 시스템 강제 종료 포함)?

절전 모드 해제 후 시스템을 잠그시겠습니까(카운트다운 후 시스템 강제 종료 포함)?

속도와 편의를 위해 몇 분 동안 자리를 비울 때 시스템을 종료하는 대신 시스템을 종료합니다 pm-suspend! 시스템이 "일시 중단 해제"/재개될 때 (X 및 기타 모든 터미널에서) (화면) 잠금을 설정하고, 또한 한동안 로그인이 발생하지 않으면 강제 종료를 시작해야 합니다.

몇 가지 방법이 나에게 지적되었습니다. 이 질문에서 추구하는 특정 측면은 다음과 같습니다.

  • 모든 가상 터미널(tty1-tty6)에 액세스할 수 없어야 합니다.
  • X에는 ​​접근할 수 없어야 합니다.
  • 또한 복구/깨우기 후 잠시 후에 다시 로그인하기를 원합니다. 그렇지 않으면 시스템이 "자체 파괴"되어야 합니다.

한 가지 중요한 이유/배경은 잠금 해제된 LUKS 파티션이 노출될 위험을 제한하고 싶다는 것입니다. 디스크는 부팅 시 보호되지만 시스템을 일시 중지 상태로 두면 보호되지 않습니다.

답변1

sleep.d스크립트는 작동해야 합니다( <youruser>비밀번호가 있는 사용자로 바꾸십시오. 처음에는 루트로 실행했지만 다시 가져올 수 없었습니다).

#!/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

콘텐츠 /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

원하는 값으로 조정 TIMEOUT하고 실행 권한을 부여하십시오: "chmod +x /opt/bin/timeout_vlock.sh".

스크립트 sleep.d는 vlock을 사용하여 모든 tty(X가 있는 경우도 포함)를 잠그고 sysrq를 비활성화하고 잠금 해제할 사용자 비밀번호를 묻는 메시지를 표시합니다. 나중에 사용할 수 있도록 vlock의 pid를 저장합니다.

vlock이 완료될 때 까지 기다립니다 timeout_vlock.sh(비밀번호를 입력하면 발생). 시간 초과에 도달하면 시스템이 종료됩니다.

답변2

이 답변은 @gnp가 제안한 답변을 기반으로 합니다. 차이점은 콘솔을 패치하는 일반적인 해킹에 의해 영향을 받는 vlock가상 콘솔/터미널 전환 잠금 의 위험을 줄이는 것입니다.pm-suspend

@gnp의 답변과 유사하게 두 개의 파일이 필요합니다.

/etc/pm/sleep.d/20_lock_with_countdown(+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

그런 다음 잠금 해제를 위한 카운트다운 스크립트가 있습니다 /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

다른 답변의 필드와 마찬가지로 <timeout>이는 <username>스크립트에서 조정되어야 합니다.

마지막으로 마지막 줄을 전환하는 것이 가능합니다 /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

`

악의적인 상호 작용이 발생할 수 있는 또 다른 짧은 기회를 피하기 위해 항상 그런 것은 아닙니다 shutdown -h now.컴퓨터 전원을 끄는 가장 빠른 방법

관련 정보