sudoers(5) で負けそうになったが思い止まった

色々面倒くさくなって,sudoers(5) に,こう設定しそうになった:

%sudo ALL=(ALL) ALL

%sudo ALL=(ALL) NOPASSWD:ALL

NOPASSWD: を付けると sudo がパスワードを尋ねなくなる.
ここに至るまでに色々考えた.最後の "ALL" は,その行の指定が適用されるコマンドの集合を表すので,デフォルトは NOPASSWD 無しにしておき,「パスワードを尋ねるのを省略してよいコマンドの集合」を定義して,それらだけに NOPASSWD を適用すればよいかな.しかし会社で管理してる開発サーバならともかく自宅PCではほとんど無意味だ.突然 /dev/sda を hexdump(1) したくなるとき*1とか,かなりの頻度なので.
とは言え NOPASSWD は,潔癖症の私*2の基準からは敗北以外の何者でもない.そこで一度パスワードを入力した後,パスワードの失効までの時間を長く取ることにした:

Defaults    env_reset

Defaults    env_reset, timestamp_timeout = 180

一度パスワードが受け付けられれば,180分に渡って,その端末ではパスワードを尋ねるステップが省略される.デフォルトでは5分で,これは結構「安全側」に寄っている.なお仕組みとしては

1:34 [nodakai@zbox]~ $ sudo ls /var/lib/sudo
nodakai
1:38 [nodakai@zbox]~ $ sudo ls -l /var/lib/sudo/nodakai
合計 20
-rw------- 1 root nodakai 40 1985-01-01 00:00 0
-rw------- 1 root nodakai 40 2010-12-24 09:35 1
-rw------- 1 root nodakai 40 2010-12-28 18:38 2
-rw------- 1 root nodakai 40 2010-12-30 00:02 3
-rw------- 1 root nodakai 40 2010-12-30 01:38 4
1:38 [nodakai@zbox]~ $ tty
/dev/pts/4

このようにファイルに情報を記録するようになっている.最初,「じゃあ同じPTY番号ならシェルを立ち上げ直してもパスワード入力は省略されるかな?」と思ったんだが,そうではなかった.
そもそも sudoers(5) ってかなり難解だよね...

*1:http://blog.miraclelinux.com/asianpen/2006/12/hexdump_0849.html アジアのペンギン: hexdump でパーティションテーブルを覗いてみる

*2:みなさん,cronでrsync over sshする際にはsshでリモート実行できるコマンドをrsyncのみに制限しておきましょうね! http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html rsync + cron + ssh (rsyncd を立てない編)