Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

ピリオド(.)を含むファイルは/etc/sudoers.dに配置しても読み込まれない

はじめに

久しぶりに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としたのが間違いだった。 そもそも、このファイルは読み込まれていないのか。。。