visudoの魔のオプションxとは

  • 6
    Like
  • 0
    Comment

本当にあった怖い話です。

前提

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できなくなりました。。。

ご注意を!