如何“锁定”我的 Linux 机器几个小时?

如何“锁定”我的 Linux 机器几个小时?

由于我过度使用电脑,我想将其屏蔽几个小时,例如每天23点到7点,这样我就无法在该时间范围内使用它。

目前,我习惯crontab在时间到来时暂停/关闭计算机,并且每分钟都会这样做,因此 - 一般来说 - 如果我尝试登录或打开计算机,我只有几秒钟的时间再次被暂停。问题是这几秒钟足以更改 crontab 并锁定该机制。

因此,我考虑在 23 点到 7 点这几个小时内完全阻止登录过程(即使是 root!),这样就没有人可以以任何方式访问计算机。如果我想禁用此行为,我必须事先这样做。

那么,我如何配置我的 Linux 机器,以便在几个小时内没有人可以登录?我应该使用 PAM 吗?如果是,怎么办?

注意:我想阻止使用 GDM 和 shell 登录。

答案1

我建议采取两管齐下的攻击:

  1. 设置一个脚本(通过 root 的 crontab)在 2300 小时关闭(挂起)计算机。将其设置为从 2300 到 2315 每分钟运行一次,以防万一第一个任务被取消。这会在睡觉前把你踢出去。
  2. 如果时间在 2300 到 0700 小时之间,请在您的~/.bashrc以及 root 中设置一个命令来停止系统。这将阻止在这些时间登录。

然而,正如我在评论中提到的,没有什么你可以设置会万无一失。您拥有对自己盒子的 root 访问权限。

这是寻找人类问题的技术解决方案的典型例子;如果你想在2300点到0700点之间睡觉,你需要通过其他方式来处理这方面的自律。 Root 无法为你做到这一点,因为你根。它将要承担个人责任。

关于这一点,我有很多非常可行的信息,但我会保留它,因为它会偏离主题。 :)

答案2

另一种方法是禁用鼠标和键盘(假设系统具有 USB 输入设备):

00 23 * * * rmmod usbhid
00  7 * * * modprobe usbhid

这不会阻止您再次关闭和打开系统,这将重新启用键盘和鼠标...如果您想防止这种情况,您可以将模块列入黑名单,但您可能需要重建您的系统每次都会启动 initramfs(usbhid需要在启动过程中尽早加载,因为您需要一个可以工作的键盘来在系统无法启动时修复问题)。

如果usbhid内置于您系统的内核中(例如Fedora),解除所有HID设备的绑定仍然可以达到同样的效果;困难的部分是在早上 7 点重新绑定它们 — 您需要将它们解除绑定的驱动程序存储在某个地方(除非有办法重新枚举它们)。解除所有设备绑定:

for device in /sys/bus/hid/devices/*; do
    echo ${device##*/} > ${device}/driver/unbind
done

(当然要进行适当的错误检查)。要重新绑定,您需要记住所${device}/driver指向的驱动程序以及驱动程序目录中的echo设备标识符。bind

答案3

在这些时间内停止 gdm 和 getty。

答案4

您可以创建一个服务,比方说self_discipline,创建服务因系统而异但有很多在线指南

服务可以启动的示例脚本如下所示。

#!/bin/bash
while [ true ]
do
   HOUR="$(date +%H)"
   if [ "$HOUR" -gt 23 ] || [ "$HOUR" -lt 07 ]
   then
      shutdown -h now
   fi
   sleep 60                                                                                
done 

然后只需将此服务设置为在启动时运行,这应该可以防止您通过简单地重新启动它来禁用它。如果你想提前关闭它,你可以service self_discipline stop

相关内容