sudoersの書き換えに失敗してsyntax errorとか言われた→直した
Ubuntu(11.10)では /etc/sudoers というファイルがあって、*1
「新しく定義を追加する場合は /etc/sudoers.d/ 以下に書くことをオススメするよ」
的なことが書いてあります。つまり sudo するたびにパスワードを聞かれるのが鬱陶しいので
NOPASSWD 属性を付けようとしたんですが、あまりにもくだらない失敗をやらかしたのでメモ。
sudoers の書式は "man sudoers" すればとても詳しく出てくるんですが、
#(シャープ記号)で始まる行はコメントなんですね。
んで、Ubuntuの場合 /etc/sudoers の末尾に
#includedir /etc/sudoers.d
とか書いてある。
てっきり「これをコメントアウトすれば /etc/sudoers.d の中身が有効になるのかな」と思って
行頭の # を削除してドヤ顔で sudo してみたらエラー吐かれました。
結論から言うとこれコメントじゃなかったんですね。
#includedir それ自体がディレクティブになっているようで、
一旦書き換えて保存してしまうと、sudo がsyntax errorを吐いて使えなくなります。*2
- sudo が使えないのは困るのでsudoersを直したい
- そのためには root 権限が必要
- sudo vi /etc/sudoers → エラー
- sudo su - → エラー
- root のパスワードは隠蔽されているから su - を直接叩くわけにもいかない
- 最初に戻る
結局recovery modeでブートし、読み書きモードでファイルシステムをマウントし、
rootシェルから修正を行う羽目になりました。
目的はユーザがパスワード無しに sudo できるようにすることだったので、
まず /etc/sudoers の includedir を #includedir に直し、
/etc/sudoers.d/username に
username ALL=(ALL) NOPASSWD:ALL
と書き、
$ chmod 0440 /etc/sudoers.d/username
としてノーマルブート→解決となりました。*3