本当にあった怖い話です。
前提
ubuntu14, 16で動作検証しております。
visudoについて
visudoは/etc/sudoers
を安全に編集する為のツールです。この/etc/sudoers
はsudo周りの重要な設定が書かれたファイルです。編集を失敗すると最悪sudoする事ができなくなる場合があります。
なのでvimなどでは絶対に編集してはなりませぬ。
/etc/sudoers のパーミッション
vagrant@vagrant-ubuntu-trusty-64:/$ ll /etc/sudoers
-r--r----- 1 root root 755 Oct 14 2016 /etc/sudoers
とwrite権限がそもそも与えられてないので編集するためにchmod +w
とするのもいけませぬ。
法をくぐり抜けるような悪い考えはやめましょう。
visudo
を使えば、シンタックスエラー等がある場合は編集時に教えてくれます。
root@vagrant-ubuntu-trusty-64:/# visudo
>>> /etc/sudoers: syntax error near line 20 <<<
What now?
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
What now?
ここで無理やり上書き保存やるような事は無いでしょう。
これで安全に扱える。と、思いきや。。
visudoでも事故るケース
visudoは-f
オプションで編集対象ファイルを指定できます。もう一つファイルを指定するオプションが-x
です。
ここで間違って以下のようなことをすると死にます。
sudo visudo -x <編集対象のsudoersファイル>
この後は、編集対象のsudoersファイルにjsonが吐き出されて、sudoersが壊れます。
ちなみに、この -x
オプションは何かというと、
vagrant@vagrant-ubuntu-trusty-64:/$ sudo visudo -h
visudo - safely edit the sudoers file
usage: visudo [-chqsV] [-f sudoers] [-x file]
Options:
-c, --check check-only mode
-f, --file=file specify sudoers file location
-h, --help display help message and exit
-q, --quiet less verbose (quiet) syntax error messages
-s, --strict strict syntax checking
-V, --version display version information and exit
-x, --export=file export sudoers in JSON format
jsonフォーマットでsudoersをエクスポートする。というものです。
つまり編集対象のsudoersファイルを有無を言わさず上書きします。
この時、パーミッションがrootのreadのみだったとしてもです!
sudoersという超重要なファイルを安全に編集する為のvisudoが凶器に変わります。
ちなみに私はこれで、AzureのとあるVM上で二度とsudoできなくなりました。。。
ご注意を!