唤醒挂起后锁定系统(包括倒计时后强制关闭系统)?

唤醒挂起后锁定系统(包括倒计时后强制关闭系统)?

为了速度和方便,当我只离开几分钟时,我不会关闭我的系统,而是做一个pm-suspend!当系统“取消挂起”/恢复时,我希望有一个(屏幕)锁定(在 X 和所有其他终端上),此外,在一段时间没有登录的情况下,它还应该启动强制关闭。

已经向我指出了一些方法。这个问题寻求的特殊方面是:

  • 所有虚拟终端(tty1-tty6)都应无法访问
  • 并且 X 应该不可访问
  • 此外,我希望在恢复/唤醒后只有一个短暂的时间段可以再次登录,否则系统应该“自毁”

一个重要的原因/背景是我确实想限制暴露未锁定的 LUKS 分区的风险。虽然启动时磁盘受到保护,但当我仅让系统挂起时则不受保护。

答案1

这个sleep.d脚本应该可以工作(替换<youruser>为您有密码的用户。我第一次使用 root 运行它,但无法返回):

#!/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 的 tty),禁用 sysrq 并提示输入用户密码才能解锁。它保存vlock的pid以供以后使用。

等待timeout_vlock.shvlock 完成(当您输入密码时发生)。如果达到超时,则会关闭系统。

答案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如此关闭电脑电源的最快方法

相关内容