由于我过度使用电脑,我想将其屏蔽几个小时,例如每天23点到7点,这样我就无法在该时间范围内使用它。
目前,我习惯crontab
在时间到来时暂停/关闭计算机,并且每分钟都会这样做,因此 - 一般来说 - 如果我尝试登录或打开计算机,我只有几秒钟的时间再次被暂停。问题是这几秒钟足以更改 crontab 并锁定该机制。
因此,我考虑在 23 点到 7 点这几个小时内完全阻止登录过程(即使是 root!),这样就没有人可以以任何方式访问计算机。如果我想禁用此行为,我必须事先这样做。
那么,我如何配置我的 Linux 机器,以便在几个小时内没有人可以登录?我应该使用 PAM 吗?如果是,怎么办?
注意:我想阻止使用 GDM 和 shell 登录。
答案1
我建议采取两管齐下的攻击:
- 设置一个脚本(通过 root 的 crontab)在 2300 小时关闭(挂起)计算机。将其设置为从 2300 到 2315 每分钟运行一次,以防万一第一个任务被取消。这会在睡觉前把你踢出去。
- 如果时间在 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