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) ってかなり難解だよね...