はじめに
久しぶりにsudo
の設定を変更したところ、思いの外ハマったので、忘れないようにメモしておく。
環境
# cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 20.04.1 LTS"
やりたかったこと
あるユーザについて、sudo
を実行する時にパスワードを入力不要にするために、sudo
の設定を変更したかった。
やってみた => 設定が反映されない
まずは以下のコマンドを実行してファイル/etc/sudoers.d/10-nopassword.conf
を作成した。
# sudo visudo -f /etc/sudoers.d/10-nopassword.conf
このファイルに、例えば以下のような内容を書き込んで、保存する。
jaybanuan ALL=(ALL:ALL) NOPASSWD:ALL
動作確認のために、対象ユーザでログインして、適当に以下のようなコマンドを打ってみる。
# sudo ls ~/ [sudo] jaybanuan のパスワード:
設定が反映されておらず、パスワードの入力が求められてしまった。
調べた結果
/etc/sudoers.d/README
をよく読んでみる。
以下抜粋。
This will cause sudo to read and parse any files in the /etc/sudoers.d directory that do not end in '~' or contain a '.' character.
言葉を補いつつ訳すと以下のようになる。
これ(#includedir)によりsudoは、ディレクトリ
/etc/sudoers.d
に配置したファイルのうち、ファイル名の末尾が'~'でないファイル、あるいはファイル名に'.'を含まないファイルを読み込んでパースする。
つまり、自分の作ったファイル10-nopassword.conf
には拡張子.conf
でピリオドが含まれていたことが、期待しない動作の原因になっていた。
これは分かりにくい。。。
ファイル名を変えてみた => 成功
ファイル名をピリオドを含まないようにリネーム。
# sudo mv 10-nopassword.conf nopassword
ついでに、プレフィックスの数字も意味がなさそうなので、あわせて削除した。 そして、対象ユーザでログインして、再度動作確認してみる。
# sudo ls ~/ Desktop Documents Downloads Music Pictures Public Templates Videos
設定が反映されており、パスワードの入力は求められなかった。
何故ハマったか
ファイル名を考える際に、/etc/sudoers.d
に既に配置されているファイルがあれば参考にしようと思い、ls
を実行してみた。
# ls /etc/sudoers.d/ 99-snapd.conf README
99-snapd.conf
という名前のファイルがあったので、これを参考に10-nopassword.conf
としたのが間違いだった。
そもそも、このファイルは読み込まれていないのか。。。