以前の「sambaサーバにアクセス出来ないんですが… - treedown’s Report」の根本的解決策として、PC側でNTLM v2で通信するようにする、という対処策を実施しましたのでご報告です。
実施後、sambaサーバではNTLM v1通信を廃止。
暫定措置としてちょっとセキュリティのレベルを下げていた設定を元の設定に戻して完了としました。
sambaサーバの設定変更(元に戻す)
sambaサーバの設定ファイル「/etc/samba/smb.conf」を開いて、前回設定したオプションを無効化してしまいます。
--------------------------------------------------------------
smb.conf(のglobalセクション)
--------------------------------------------------------------
#======================= Global Settings =======================
[global]
# NTLMv1 Enable=yes Disable=No or CommentOut
#ntlm auth = yes
--------------------------------------------------------------
※単純にglobalセクションの「ntlm auth = yes」という行をコメントアウトします。
--------------------------------------------------------------
設定ファイルを編集後、
# systemctl restart smbd
# systemctl restart nmbd
でプロセス(サービス)リスタート。これで有効化されます。
これでサーバは以前の状態に戻りました。
試しにアクセス不調が出ていたPCでアクセスすると、きちんとユーザ名とパスワードの入力を促すウインドウが表示されました。
対象のPCで実施した設定
次に対象PCでサーバの「ntlm auth = yes」が有効でなくてもアクセス可能になるように設定を実施します。設定にはレジストリエディタを起動します。
レジストリエディタ起動後に、「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa」を開きます。
末尾が
こうなっていればOKです。
Lsa内(右ペインから)のキー名「LmCompatibilityLevel」を探します。
エラーの時はこうなっていました。(「2」と表記されています。)
この「2」を「3」に書き換えます。(詳しくは後述)
あとはOKボタンをクリックして確定させます。
これで完成でござる。
設定完了後、OSの再起動が必要になります。
もうちょっと詳しく「LmCompatibilityLevel」を
設定した「LmCompatibilityLevel」というキーとその数字は何なのか、という点をメモ。
前回も参照した
https://www.atmarkit.co.jp/ait/articles/1112/16/news140.html
このページにキーに設定する数値の解説が掲載されています。
以下はこのページと重複する内容になりますが、自分用のメモとして。
ざっくりと一覧(メモ)
- 「0」:LMとNTLM応答を送信(古いクライアントサーバ向け)
- 「1」:LMとNTLM送信する(ネゴシエートした場合NTLMv2を使う)
- 「2」:NTLM 応答のみ送信(NTLM v1、今回の原因のキー)
- 「3」:NTLMv2 応答のみ送信(samba4.5ではこれが必要)
- 「4」:NTLMv2 応答のみ送信 (LMは拒否)
- 「5」:NTLMv2 応答のみ送信 (LMとNTLMは拒否)
LmCompatibilityLevelキーが存在する場合、Windowsはこのキーで指定されたNTLMレベルでサーバと通信を実行します。
これが「2」だとNTLM応答のみ送信するとあるので、NTLM v1ので接続することになります。で、samba4.5以降のサーバがNTLM v2を要求してくるから通信が合致しないでアクセス不調になった、というのが今回の現象。そこでサーバにNTLM v1を有効化する設定を入れて通信できるようにしていました。
今回は再びサーバの設定をNTLM v2のみに戻しています。そこで、LmCompatibilityLevelキーを「3」にすることでNTLM v2応答のみ送信するように動作が変更されるので、サーバが要求するNTLM v2と合致することでNTLM v1の通信が無効化されたsamba4.5相手でもアクセスが可能になります。
ちなみに、他のPCではLmCompatibilityLevelキーの指定がなかったため、LmCompatibilityLevelキーが存在しない場合には、「3」を指定したときと同じ動作をする、と思える動きをしていました。
このキーは「0」から「5」までの6段階の指定があり、NTLMv2非対応なサーバ(の共有リソース)にアクセスできるようにするためには、明示的に0~2のいずれかに設定する必要があります。
なんか、いろいろありますね。
ポイントは、「共有フォルダ(共有プリンタ)をホストするサーバが要求するNTLMレベルに、アクセスするクライアント側のNTLMレベル(バージョン)を合わせなきゃいけないよ。」という点がポイントです。古いサーバでは古いNTLMバージョンに、新しいサーバでは新しいNTLMバージョンに、セキュリティを気にするならより新しいNTLMバージョンを使うように、ってことになります。