【Linux】sudoersを設定したのにパスワード無しでsudo実行出来ない問題を解決!
前回sudoコマンドをパスワード無しで実行できるようにするための設定手順を公開しましたが、この設定を行ってもsudoコマンドを実行したときにパスワードを求められてしまう場合に疑うべきことと解決方法をメモします。
↓前回のsudoパスワード無し実行の設定記事
では、疑うべきポイントを確認しましょう。
まず、設定対象のユーザは一度ログアウトする
疑うべきはsudoersファイルかと思いますが、その前にファイル更新後に適用操作をしたかということを確認しましょう。
最新のsudoersファイルを適用させる操作はどのようにするのか
パスワード無しsudo設定を追記した対象のユーザを一度ログアウトし再ログインすることで解決します。
もしくはTeratermを使っている場合はTeraterm画面の上部にある「ファイル(F) >セッションの複製(U) 」を選択すると別ターミナルで再ログインするので更新後のsudoersファイルが適用された状態でログインされます。
sudoersファイルに追記した部分が保存されていない可能性
まずは、sudoersファイルに意図した追記があるかを確認します。
普段vi エディターを使っている場合は、以下のコマンドでsudoersファイルを編集した際にvisudoで使用しているnanoエディタ操作があやふやなまま追記作業していて正しく保存出来ていない可能性があります。
sudo visudo
設定確認は上記のコマンドでも良いですが、慣れている他のコマンドで確認してみたいと思うので、catコマンドでsudoersファイルを開きます。
※一般ユーザではsudoersファイルに参照・書き込み・実行の権限がないのでsudoコマンドを使用するかrootユーザになってからsudoersファイルを見る必要があります。
$ sudo cat /etc/sudoers
もしくは
$ su -
# cat /etc/sudoers
このファイル内に以下の一文が記載されていることを確認します。
例:Linuxユーザ「hayana」にパスワード無しのsudoコマンド権限を与える場合
hayana ALL=(ALL:ALL) NOPASSWD:ALL
もし、この一文が無い場合はnanoエディタの使い方を確認しましょう。
誤字脱字がある可能性
設定をしているのは人間なので、誤字脱字は意外とあります。
スペースの位置がおかしかったり、NOPASSWDの中で誤字脱字があったりと様々ですので、一文字づつ確認してください。
既にsudo権限があるグループに属している可能性
まずは以下のコマンドを入力してみてください。
※設定対象のユーザが「hayana」の場合
$ id
もしくは
$ id hayana
上記のidコマンドはそのユーザが「どのユーザidを持っているのか」、「どのグループidを持っているのか」、「他にはどのグループに属しているのか」といったことが書いてあります。
uid=1000(hayana) gid=1000(hayana) groups=1000(hayana),省略,27(sudo),省略
「uid=1000(hayana)」はユーザid1000番というIDを持つhayanaというユーザを表しています。
「gid=1000(hayana)」はグループid1000番というIDを持つhayanaというグループのユーザであることを表しています。
「groups=1000(hayana),省略,27(sudo),省略」はhayanaグループを含めてユーザhayanaが所属しているグループすべてを表示しています。
groupsに注目すると、、、
いろいろ省略していますが、ユーザhayanaはグループhayanaのほかにグループid27番のsudoにも属していることがわかりました。
ではsudoersファイルを見てみましょう。
以下はsudoersファイルのユーザやグループにsudo権限を与えている記述が書いてある部分です。
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
「%sudo ALL=(ALL:ALL) ALL」という部分でグループsudoに属しているユーザはsudo権限(パスワード有)が使えますよという設定になっています。
この設定のせいで、「hayana ALL=(ALL:ALL) NOPASSWD:ALL」を設定してもパスワード無しの設定が適用されていない可能性があります。
では、どのように設定すればよいでしょうか。
【解決方法】設定追記する場所を気を付ける
上記のような場合はsudoグループに属しているユーザが例外としてパスワード無しで実行できるように設定するということになりますので、sudoersに追記する設定文の場所を気を付ける必要があります。
今回、ユーザ用設定だからと言ってsudoersファイル内にある「# User privilege specification(和訳:ユーザー権限指定)」のroot設定の真下に追記していないでしょうか?
正解の追記場所は以下の通り「%sudo ALL=(ALL:ALL) ALL」の真下です。
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
hayana ALL=(ALL:ALL) NOPASSWD:ALL
「# Allow members of group sudo to execute any command」という場所は和訳すると「# sudoグループのメンバーに任意のコマンドの実行を許可する」だから勝手にユーザ設定を追記してはいけないのでは?
とも思うかもしれませんが、ぶっちゃけた話このようなコメントアウトの文には設定的な効果はなく、単なる目安でしかありません。
そのため、厳密に従う必要もありません。
それより重要なのは設定の優先度です。
このsudoersファイルは上から順に設定を読み込んでいるため、上に記載されている設定よりも下に記載されている設定の方が優先されます。
なので、、、
root設定の真下にユーザhayanaの設定を記述したときは、最初にユーザhayanaのパスワード無sudoコマンドの設定が読み込まれてから、hayanaが属しているグループsudoのパスワード有sudoコマンドが読み込まれたためパスワード有sudoが優先されてしまいます。
そのため、%sudo設定の真下に記述し直すと読み込みの順序が逆になり優先度も逆になることから、パスワード無しsudoを実行することができるようになります。
上記のいずれかでパスワード無しsudoコマンドが使えるようになったかと思います。
ディスカッション
コメント一覧
まだ、コメントがありません