为了速度和方便,当我只离开几分钟时,我不会关闭我的系统,而是做一个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.sh
vlock 完成(当您输入密码时发生)。如果达到超时,则会关闭系统。
答案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
如此关闭电脑电源的最快方法