コンピュータを過度に使用するため、毎日23時から7時まで数時間コンピュータをブロックして、その間はコンピュータを使用できないようにしたいと思います。
現在、私は時間になるとコンピュータを一時停止/オフする習慣があり、crontab
1分ごとにそうするので、一般的にログインをしたり、コンピュータの電源を入れようとすると、数秒しか時間がありません。もう一度一時停止してください。問題は、この数秒でcrontabを変更してメカニズムをロックするのに十分であることです。
したがって、私は誰もが何らかの方法でコンピュータにアクセスできないように、23時から07時までの間、ログインプロセスを完全に(ルートを含む!)ブロックすることを検討しました。この動作を無効にするには、事前に無効にする必要があります。
それでは、何時間も誰もログインできないようにLinuxボックスをどのように設定しますか? PAMを使用する必要がありますか?それではどうですか?
注:GDMとシェルを使用したログインを防止したいと思います。
答え1
私は2つの攻撃をお勧めします:
- 2300時間にコンピュータをシャットダウン(一時停止)するようにスクリプト(ルートのcrontab経由)を設定します。最初のジョブがキャンセルされる場合に備えて、2300時から2315時まで1分ごとに実行されるように設定してください。これはあなたが寝る前にあなたを追い払うでしょう。
- 時間が2300時から0700時の間にシステムを停止するようにrootに
~/.bashrc
コマンドを設定します。これにより、この間にログインが防止されます。
しかし、私がコメントで述べたように、何もない無欠点に設定できます。あなたはあなたのボックスへのrootアクセス権を持っています。
これは、人間の問題に対する技術的な解決策を見つける典型的な例です。 23:00~07:00に眠りたい場合は、他の方法で治療するための自己トレーニングが必要です。ルートはあなたのためにこれを行うことはできません。なぜならはい根。それ〜する個人的な責任を負います。
私はこれについて非常に実行可能な情報をたくさん持っていますが、トピックから抜け出すことができるので、それにはそのままにします。 :)
答え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