Lockoutユーティリティを使って高い生産性を実現

 コンピュータのDNSレコードをいくつか変更して、その変更を「Lockout」を使って強制すれば、コンピュータを使ってなまけること、すなわち仕事をせずにDiggやRedditといったウェブサイトを何かにとりつかれたかのようにリロードし続けることなどをやめることができる。Lockoutは、自己を厳しく律し生産性を高めるためのツールだ。

 Lockoutは、簡単な方法であなたの生産性を高める。つまり、あなたがなまけるのを防止するようにシステムを設定しておくと、設定した時間内は、あなたが管理用のスーパーユーザ(ルート)になるのをLockoutが防止してくれるのだ。ルートアクセスを取り戻す方法は2つしかなく、設定した時間が過ぎてLockoutがルートアクセスを返してくれるのを待つか、コンピュータを再起動するかだ。GNU/Linuxユーザにとって再起動は通常のことではないため、システムのロックが解除されるまで何か生産的なことをするはずだという考え方がLockoutの前提となっている。

 LockoutはPerlで書かれていてGNU GPLの下にリリースされている。インストール方法は簡単だが、手順は各ディストリビューションによって異なる。DebianとUbuntu Universeのユーザは、lockoutパッケージをインストールすれば良い。Fedoraやその他のRPMベースのディストリビューションのほとんどでは、LockoutのホームページにあるRPMをインストールすることができる。その他のディストリビューションのユーザは、Lockoutのホームページからtarパッケージ(.tgzファイル)をダウンロードして、ルートユーザになってルートディレクトリに展開する。Lockoutを使用するために必要となるのはcronとPerlだけだが、どちらもほぼすべてのディストリビューションでデフォルトでインストールされている。

 Lockoutの設定を間違うと、Lockoutがシステムのロックを解除しなくなり、ルートアクセスができなくなってしまう可能性がある。そこでLockoutがシステムのロックをちゃんと解除できることを確実にするため、Lockoutを最初に実行する際には、端末エミュレータを開いてsuか「sudo su」を使用してスーパーユーザになり、緊急事態の発生時に備えてウィンドウを最小化して待機させておこう。次に端末ウィンドウをもう一つ開いて、(ルートユーザで)「lockout lock 1m」としてLockoutを実行する。するとLockoutが実行環境を調べて、適切にインストールされていることを確認し、システムを1分間ロックする。

 Lockoutを初めて実行する場合は、特に最初のロックの解除が危険な部分だ。「lockout status」コマンドを実行すればどのユーザでも、システムがロックされていることと、ロックが自動的に解除されるまでの残り時間とを知ることができる。その時間を過ぎた後に「lockout status」を実行して次のようなエラーが表示された場合は、Lockoutはシステムの解除に失敗したということだ。

Your system should have been unlocked by now. Is cron running? If not, you might have a problem. Try rebooting your machine first. If that doesn’t restore the root password, try booting in single user mode to change the password. Good luck.
(本来であればこのシステムはすでにロックが解除されているはずです。cronは実行されていますか? cronが実行されていない場合には困るかもしれません。まずはマシンの再起動を試してみてください。マシンを再起動してもルートのパスワードが元に戻っていない場合には、シングルユーザモードで起動してパスワードを変更してみてください。幸運を祈っています。)

 以上のようなエラーが出た場合には、先ほどルートでログインして最小化しておいた緊急用の端末エミュレータを使用して、「lockout unlock force」コマンドを実行すれば、ルートアクセスを取り戻すことができる。その後、/etc/cron.d/lockoutとしてインストールされているLockoutのロック解除用cronジョブが実行されなかった原因を突き止めておこう。

 期待通りにシステムのロックが解除された場合、つまり上記のようなエラーメッセージが表示されなかった場合には、DNSレコードの変更を始めよう(なおこの後、この変更を自動化する方法を説明する)。以下のような行を/etc/hostsに追加すれば、ウェブブラウザはDiggやRedditのトップページを表示することができなくなる。

0.0.0.0       digg.com
0.0.0.0       reddit.com

注意:Mozilla Firefoxとその派生ブラウザは、DNS情報を1分間キャッシュする。したがってブロックしたいサイトを上記のような変更を行う直前に読み込んでいた場合、ブロックされるようになるまでに1分かかるはずだ。キャッシュを削除することもできるが、そうするとすべてのウェブサイトの読み込みに時間がかかるようになる可能性がある。

 上記では、ループバックデバイスを指すが滅多に使用されない0.0.0.0というネットワークアドレスを使用しているため、sedコマンドを使用することでLockout経由でDNSの変更を簡単に有効にしたり無効にしたりすることができる。まず以下の中の、sedコマンドから始まっている、コメントではない行の1行目を、システムをロックする際に実行されるスクリプトである/etc/lockout/lock.shファイルに追加しよう。次にコメントではない行の2行目を、システムのロックを解除する際に実行されるスクリプトである/etc/lockout/unlock.shに追加しよう。

#### Add to /etc/lockout/lock.sh ####
# Removes the leading comment from lines starting with #0.0.0.0 in /etc/hosts
sed -ie '/^#0\.0\.0\.0/s/#//' /etc/hosts

#### Add to /etc/lockout/unlock.sh ####
# Restores the leading comment to lines starting with 0.0.0.0 in /etc/hosts
sed -ie '/^0\.0\.0\.0/s/^/#/' /etc/hosts

 これにより、「lockout lock 1m」コマンドでLockoutを実行するとDiggとRedditがブロックされるようになり、1分後に自動的にシステムのロックが解除される時、それらのサイトに対するブロックが解除されるようになる。

 ルートアクセスのためにsudoやその他のルートパスワードの入力を要求しない認証方法を使用している場合は、システムのロック中はそれらを無効にしておかなければ、Lockoutの効果がなくなってしまう。sudoの設定は/etc/sudoersファイルに書かれているため、sudoを無効にする最も簡単な方法は一時的に/etc/sudoersファイルを読み取り不可にしておくことだ。以下の中のコメントではない2つの行をそれぞれ適切なファイル(/etc/lockout/lock.shと/etc/lockout/unlock.sh)に追加しておけば、読み取りパーミッションを適切に変更してくれる。

#### Add to /etc/lockout/lock.sh ####
# Removes user and group read permissions from /etc/sudoers
chmod ug-r /etc/sudoers

#### Add to /etc/lockout/unlock.sh ####
# Restores user and group read permissions from /etc/sudoers
chmod ug+r /etc/sudoers

 一度準備を片付けてしまえば、Lockoutを使うのは簡単だ。Lockoutは手頃な時間の指定方法のほとんどを受け付ける。以下に挙げたコマンドはすべて有効だ。

lockout lock 30m        # 30分間ロックアウト
lockout lock 1h         # 1時間ロックアウト
lockout lock 12:00      # 正午までロックアウト
lockout lock 8pm        # 午後8時までロックアウト

 Lockoutの状態は、デスクトップ上の空いている場所に小さな端末ウィンドウを開いて「watch -n 10 lockout status」コマンドを実行しておけば、常に監視し続けることができる。

 他のサービスを無効にしたり制限したりすることも、lock.shファイルとunlock.shファイルにコマンドラインを追加するだけで簡単に行なうことができる。例えばLockoutにはサンプルとして、インターネットのほとんどをブロックするファイアウォールのスクリプト(lockoutのマニュアルページに説明がある)が含まれている。コンピュータを使っているときの自分のなまけ癖を注意深く分析すれば、最適なLockoutの設定を行なうことができるはずだ。

Linux.com 原文