sudoのパスワード入力が煩雑
sudoのパスワード再入力は、sudoの起動毎にデフォルトでは5分繰り延べとなる。操作者がコンソールを5分以上root権限を以って操作しないのは無人状態かもしれないので、安全のため最大でもそのへんが大抵の場合の限度、ということだろう。ただこれ、私の場合はrootになってるコンソールとは別ttyや手元のブラウザなんぞであれこれ参照しつつ考えてる時間があったり、sudoでエディタを起動し設定ファイルを悩みながら書き換えてる時間があったりで、簡単に5分経ってしまい、すぐに再入力を要求される。5分では短い。煩雑に感じる。ここはバランスが安全側に倒してあるのだ。
ただしウチの場合
基本自分しか家に居ない+某社社員時代につけた習慣で、家から出るときや、家以外でノートPCなどで端末から離れる際、スクリーンロックしている。なので端末単位で相応の安全は確保されているので、パスワード再入力のタイムアウトは5分より長くて構わないだろう、と判断する。なお、某社時代はうっかりデスクから離れたり、ひとに話し掛けられてそのままコンソール放置になった場合に備えて、端末自体が無操作5分でスクリーンロック(パスワード付きスクリーンセーバ起動)するようにしていた。現在でもMacBook系でバッテリ動作時は数分でスクリーンロックするようにしてある。まあここ数年外にノート持って行くことは激減したけれども。
具体的にはパスワード再入力タイムアウトを5分から60分(1時間)に変更する。
変更方法
昔はsudo.confに直接書いて居たような気がするが、現在は visudo
を使って sudoers
に書け、ということになっている。また、 sudoers
の最後にディレクトリ sudoers.d
内の各ファイルを読み込むようになっており、機能やユーザで分けて整理した状態でここに置いておくことができる(FreeBSDのportsおよびmacOS付属で確認)。
/usr/local/etc/sudoers.d
/etc/sudoers.d
Linuxは……みてないけどmacOSと同じでしょうか。
結論として、ウチのFreeBSDの一つではこういう構成になっている。
% ls -l /usr/local/etc/sudoers.d
total 16
-r--r----- 1 root wheel 244 2月 10 09:01 01_wheel
-r--r----- 1 root wheel 89 2月 10 09:45 02_dump
-r--r----- 1 root wheel 270 2月 10 09:05 99_timeout
タイムアウトのデフォルト値の具体的な変更は下記の最後の行、 timestamp_timeout
に分単位で指定。私有端末からしかアクセスしないのでついでに timestamp_type
は気持ちゆるめ。
## must edit with "visudo -f" and check with "visudo -c"
## login as root user or "su -" to change timeout-period
## set this file's mode to 0440 (-r--r-----)
## extend timeout-period of asking paswword again
Defaults timestamp_type=ppid
Defaults timestamp_timeout=60
例えば、上記 99_timeout
作成・編集には -f
または --file
オプションで指定すればよい。
% sudo visudo --file=/usr/local/etc/sudoers.d/99_timeout
ファイル権限に注意
上記 99_timeout
にも一部コメントとして残してあるが、 sudoers
関連ファイルはオーナー:グループが root:wheel
(Linuxならroot:adminとかかな)で、パーミッションが 0440
(読み込みのみかつ他人はアクセス不可)でないといかんらしい。この辺は編集後に visudo -c
でチェックして指摘してくれる。
Defaults timestamp_timeout が効かん! なんでや!
最初わからずに1週間ほどあきらめてフテ寝してたけど、 Defaults
は最後に読み込まれたものが全体に適用される模様。ウチではwheelのタイムアウトは60分、dumpは5分にしたくて99_timeoutは当初作らず、01_wheelに Defaults timestamp_timeout=60
と、02_dumpに Defaults timestamp_timeout=5
と書いていて、全部が5分タイムアウトになっていた。
全体に効いてしまうものは最後に読み込まれるファイルに書くのがよろしかろう、ということでファイル名の辞書順で読み込まれるっぽいので、各ファイル名の先頭に2桁の数字を振って順序を確定させつつ99_timeoutに Defaults
をまとめたのであった。めでたしめでたし。
visudo使わずに編集失敗してsudoでけんくなった!
sudo vi sudoers
とかしててできたファイルが正しくなかった場合。これも最初やりました。FreeBSDであれば su -
でrootパスワード入力してsudoersを戻せばよし。macOSの場合はrootアカウントが無効化されているのでこの手はそのままでは通らないはず。最近のMacは簡単にroot取れないようにアレコレ仕組んであるのでそこは面倒ですが、やりようはあったはず(調べてない)。