結論を先に。根本的な原因はsudoersファイルの構文エラー。
元の状態。
file '/etc/sudoers.d/dev' do
owner 'root'
group 'root'
mode 0440
content '%dev ALL=(ALL) NOPASSWD: ALL'
end
opsを追加したかったので、コードを追加してこんな感じ。で、cook。
file '/etc/sudoers.d/dev' do
owner 'root'
group 'root'
mode 0440
content '%dev ALL=(ALL) NOPASSWD: ALL'
end
file '/etc/sudoers.d/ops' do
owner 'root'
group 'root'
mode 0440
content '%ops ALL=(ALL) NOPASSWD: ALL'
end
そしたらsudoできなくなりました。
$ sudo su -
sudo: >>> /etc/sudoers.d/dev: syntax error near line 1 <<<
sudo: parse error in /etc/sudoers.d/dev near line 1
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
$
sudoersは終端に改行がないとエラーになるみたいです。有名みたいです。というわけでそれぞれ
content "%ops ALL=(ALL) NOPASSWD: ALL\n"
みたいに改行を入れておけばOK。
おまけのvisudo -cf
visudo -cf ファイル
で、構文チェックできる。しらなかた。でも、今回の問題は指摘されない。
おまけのpkexec
一旦、シンタックスエラーのまま保存するともうsudoできないので素直にシングルユーザなんとかでごにょごにょしたりすればいいんですが、このサイトによると pkexec visudo
とかやってなんとかなるそうです。
全部ちゃんと読んでないし、入ってなかったし。未検証。
pkexecは、polkitってパッケージらしいのであらかじめ入れといたらいいかも。
おまけの/etc/sudoers
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
includedirの左の#はコメントアウトじゃないのね。すぐ上に書いてあった。
難しいYO!
Chefはあんまり関係ないね。