💬

PasswordAuthenticationで躓いたお話

2023/05/27に公開
5

はじめまして!今回これが最初の記事になります。
色々とつたないことも多いかと思いますが、生暖かい目で見守っていただければうれしいです。
間違い・もっといい方法などがあれば、ぜひ教えてくださいね!

概要

今回はUbuntuをインストールし、最初の設定をごちゃごちゃやってる時に発生したものです。
PasswordAuthenticationをnoに設定したのに、パスワード認証が出来てしまう!
これを解決すべく色々探して、解決できました!
(正しくない方法かもしれないという前提でお願いします・・・)

環境

  • VMWare Workstation Player による仮想環境
  • OS : Ubuntu Server 22.04.2 LTS (Minimized)
  • ssh : OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022

現象

下記の通り、/etc/ssh/sshd_config を変更しました。
がしかし、パスワード認証が出来てしまう・・・

sshd_config
# パスワードによる認証を禁止する
PasswordAuthentication no
# チャレンジレスポンスでの認証を禁止する
challengeResponseAuthentication no

原因

/etc/ssh/sshd_config.d/50-cloud-init.conf に以下のような記述がありました。

50-cloud-init.conf
PasswordAuthentication yes

解決方法

/etc/ssh/sshd_config.d/50-cloud-init.conf を書き換えましょう!
/etc/ssh/sshd_config.d/50-cloud-init.confは書き込んじゃだめそうです!
/etc/ssh/sshd_config.d/に50以上の数字を先頭につけたファイル名のconfを作成して、その中に書くのがよさそうですね!
たとえば、99-custom.confとか・・・

99-custom.conf
# PasswordAuthentication yes
PasswordAuthentication no

以上です!ご覧いただき、ありがとうございました。
きっと少し経ったら忘れてるんだろうなぁ・・・

蛇足1(解決後感想とか)

これ、意外と検索してもなかなか見つけられませんでしたorz
そう、人に言えないほど時間をかけすぎたのですよ!悔しい!

皆さんはどのようにして探しているのでしょうか?
情報を探す力が不足しているとしみじみ思いました。

探しても探しても大体が sshd_config を変更しましょう が多いように感じました。
普通ならそれだけで反映されるのが普通なのでしょうか・・・・私の場合が特殊?

よく見た気がする情報

sshd_config
PasswordAuthentication no # -> noに変更
challengeResponseAuthentication no # -> 追記 or noに変更
UsePAM no # -> noに変更

PasswordAuthentication と challengeResponseAuthentication に関しては、 noにすることに対してためらいはなかったんですが、UsePAM に関しては、調べるうちに抵抗感というかコレジャナイ感というかそんなのが出てきて、結局変更はしませんでした。

で、結局頼ったのはChatGPTでした(笑)

もうどうにでもなれ!の感覚で設定を貼り付けて「以下のように設定した場合、パスワード認証が出来てしまいます。原因は何ですか?」と聞きました。
(仕事じゃ絶対にできない手法・・・・)

そしたら以下のように帰ってきました。

おっしゃる通り、設定ファイルにおいてパスワード認証が無効化されているにもかかわらず、パスワード認証がまだ有効であるようです。

この場合、他の設定がパスワード認証を有効にしている可能性があります。PasswordAuthenticationとChallengeResponseAuthenticationの設定が正しく行われているにもかかわらず、パスワード認証が有効になっているのは奇妙です。

問題の特定には、以下の手順をお試しください:

  1. sshd_configファイル内の他の設定を確認して、パスワード認証を有効にする可能性のある項目を見つけます。
  2. sshd_config.dディレクトリ内の他の設定ファイルも確認し、そこでパスワード認証が有効にされている場合があるか確認します。
  3. SSHサーバーの再起動前に設定変更を保存し、再起動後に設定が正しく反映されるようにしてください。

また、UbuntuではSSHサーバーがAppArmorによって制限される場合があります。AppArmorプロファイルが設定されている場合、パスワード認証が有効になることがあります。その場合、AppArmorの設定を確認し、適切な変更を行ってください。

もし問題が解決しない場合や詳細なサポートが必要な場合は、Ubuntuのバージョンや他の環境の情報などを提供していただけると助かります。その情報に基づいて、より具体的なサポートを提供できるかもしれません。

まさに、これの2番目のやつですよね。はっとさせられました。
きっとしっかり知識を持っている方なら気づかれるのかと思いますが、
何となくさわっている私には難しかったです。

蛇足2(sshd_config.dとか50-cloud-init.confとか)

もうここで終わっておけばいいような気がしますが、やはり気になってしまいます(笑)
たぶん将来見返したときに、気になりそうなので書いておこうと思います。

sshd_config.dとは

OpenSSHの設定ファイルであるsshd_configを機能ごとに分割して管理するためのディレクトリで、このディレクトリは、異なる設定項目を分割して管理するために使用されるそうです。
なるほど、sshd_configに追記される形になるのかなー?

設定が上書きされてるんだから、そらいくら書いても無駄になるわな!!!!

50-cloud-init.confとは

Ubuntuシステムにおいてネットワークの設定を管理するための設定ファイルで、cloud-initと呼ばれるツールが使用する設定ファイルの1つだそうです。
色々調べましたが要約できそうにないです。ごめんなさい。

蛇足3(2024/11/24 追記)

お久しぶりでs(ry 1年半ぶりくらいですね!

コメントにて otnさんに教えていただいた通り、たしかに以下の一行が書かれてました!
otnさん、ありがとうございます!

sshd_config
Include /etc/ssh/sshd_config.d/*.conf

いろいろ見直してみたけど、解決方法は以前書いた通りでよさそうと思いました!
むしろ変更する場合は、50-cloud-init.confに追記したほうが良いのかも?
(シンプルにしたいなら一行をコメント化してしまうのもありか?許されるのか?)

さて、ここからが蛇足の本編です(笑)

sshd_configにはじまり、いろいろ読んでいくとガッツリ書かれてましたねーアッハイ
(英文読むのは避けて通れない運命だったのですね。。。)

ファイルの最初に

sshd_config
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

ってありますね!

これはsshdサーバのシステム全体にかかわる構成ファイルだよー
(全体に影響を与えるからあんまりいじらないほうがいいのかな?)
詳細はsshd_config(5)を参照してねーって書かれてるみたいです。

で、私思ったわけですよ、「sshd_config(5)」ってなんやねん!と(泣きそう)

結局のところ、マニュアルのsshd_configを読んでね!マニュアルのセクション5にあるよ!ってことを表してるみたいです。

察しの良い方ならお気づきかもしれませんが、次に私はこう思うわけですよ。
マニュアルってなんやねん!!!と(泣きそう再び)
安心してください、ちゃんとコマンドがありましたよ!

$ man 調べたい単語

このコマンド、マニュアルというだけあっていろいろイケる・・・だと・・!
これでコマンドはカンペキに理解した!ができそう(笑)

今回の場合は、調べたい単語は「sshd_config」なので以下のようになります

$ man sshd_config

そしたらば、つらつらと出てくるわ出てくるわで、
特に説明欄にガッツリ書いてて思わず笑ってしまいました。

Note that the Debian openssh-server package sets several options as standard in /etc/ssh/sshd_config which are not the default in sshd(8):

訳すと、Debian の openssh-server パッケージでは、/etc/ssh/sshd_config に sshd(8) のデフォルトではないいくつかのオプションが標準で設定されていることに注意してください
ってことらしいのですが、一覧の一番上の目立つところですよね・・・
合わせて気を付けたほうがよさそうなところも・・・

• Include /etc/ssh/sshd_config.d/.conf
• KbdInteractiveAuthentication no
• X11Forwarding yes
• PrintMotd no
• AcceptEnv LANG LC_

• Subsystem sftp /usr/lib/openssh/sftp-server
• UsePAM yes

んでもってその下の文章で書かれてましたねー

/etc/ssh/sshd_config.d/*.conf files are included at the start of the configuration file, so options set there will override those in /etc/ssh/sshd_config.

訳すと、/etc/ssh/sshd_config.d/*.confファイルは設定ファイルの先頭に含まれるため、ここで設定されたオプションは/etc/ssh/sshd_config内のものより優先されます。
ってことらしいです。アッハー

結局、ちゃんと書かれていることを読みましょう!足元をすくわれるよ!ってことですね!!!

ほんとのおわり

しばらくはUbuntu関連かなぁを思いつつ、また行き詰ったりで書いていけるように頑張ります。
こんな内容ですが、誰かの助けになることが出来れば幸いです。

2024/11/26 追記
教えていただいたotnさんには感謝を。おかげさまでいろいろと勘所みたいなのが増えました!
もともと長いと思ってたのに、気づけばさらに長く・・・

これにて本当に終わりです。
ここまでお付き合いいただき、ありがとうございました。

Discussion

ShotaShota

記事を見て大変参考になりました。確かにChatGPTを活用した方がいいですね。
検索で引っかからないのはその通りだと思います。

otnotn

/etc/ssh/sshd_configの設定が、/etc/ssh/sshd_config.d/50-cloud-init.confの設定で上書きされたということは、/etc/ssh/sshd_configの中に Include /etc/ssh/sshd_config.d/*.confのような記述があるはずで、それに気づいていればすぐに解決でしたね。

今のUbuntu だとデフォルトでそうディレクトリを作るいう設定と言うことでしょう。このあたりはOS次第かと思います。ググってみると、Ubuntu の他に Amazon Linux でもそうみたいです。他にもあるかも。

2024/10時点で「ubuntu PasswordAuthentication」でググルと「sshd_config.d/*.confがあるよ」という情報はすぐ見つかるので、2023/5に見つからなかったということはここ2年以内くらいの変更なのですかね。いずれにせよ、sshd_configに書いてあることなのでファイルの中を見ていれば気づきます。

ochanomaochanoma

おっしゃる通りでした!教えていただきありがとうございます!
他の場所でも気を付ける必要がありそうですね・・・

Fumihiko ShiroyamaFumihiko Shiroyama

99-custom.conf ではなく 00-custom.conf などのように 50-cloud-init.conf より 若い 数字でないとうまく設定が効かないと思います。/etc/ssh/sshd_config.d/*.conf に関してご自身で書いておられるように、先に出てきた設定が優先されます。