社内でネットワークプリンタ問題と並んで悩ましいのが、SMBに関するセキュリティ問題から開けなくなる共有フォルダのトラブルシューティング。やむを得ず匿名アクセスを一部提供しているサーバへ、これまで通りアクセスするにはどうすればいいのか、Windows 10におけるレジストリ設定からAD下の一括適用まで、社内技術メモをまとめます。
SMB1.0は廃止済なのに
対象のファイルサーバはWindows 2012 R2で運用されていて、プリントサーバとしての役割の他、コピー複合機の受信したFAXのPDFファイルを保管し、社内ネットワーク内で閲覧出来るようにしています。
以前、SMB1.0に対する風当たりが強くなったのを理由に、Windows Server 2008からアップグレードした記憶があるので、SMB1.0ではサービスしていないつもりでしたが、念のためWindowsの機能の一覧を確認してみると、SMB1.0はチェックの入った状態でグレイアウトしており、変更不可になっていました。
sc.exe
でLanmanWorkstationとLanmanServerの状態を問い合わせてみます。
C:\Users\Administrator>sc qc lanmanworkstation [SC] QueryServiceConfig SUCCESS SERVICE_NAME: lanmanworkstation TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Windows\System32\svchost.exe -k NetworkService LOAD_ORDER_GROUP : NetworkProvider TAG : 0 DISPLAY_NAME : Workstation DEPENDENCIES : Bowser : MRxSmb20 : NSI SERVICE_START_NAME : NT AUTHORITY\NetworkService C:\Users\Administrator>sc qc lanmanserver [SC] QueryServiceConfig SUCCESS SERVICE_NAME: lanmanserver TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k netsvcs LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Server DEPENDENCIES : SamSS : Srv2 SERVICE_START_NAME : LocalSystem
この2つのサービスの前者がSMBクライアント、後者がSMBサーバ機能を司るものとざっくり理解していた程度でしたが、Microsoft Technetで図解されていました。
ファイル共有の仕組み – Server サービスと Workstation サービス – – social.technet.microsoft.com |
LanmanServerの依存サービス項にSrv2とあるので、SMB2.0がサービス提供されていることがわかります。
更にPowerShellでもSMBサービスバージョン情報を取得して、SMB2.0のみで運用されていることが確認できました。
Windows PowerShell Copyright (C) 2016 Microsoft Corporation. All rights reserved. PS C:\Users\Administrator> Get-SmbServerConfiguration | Select EnableSMB*Protocol EnableSMB1Protocol EnableSMB2Protocol ------------------ ------------------ False True
SMB2.0以降における匿名アクセス制限の現状
以上のように構成されたファイルサーバに対し、Windows10 から開こうとすると次のようなエラー(0x80070035)に遭遇することがあります。
これは、Windows 10 Fall Creators Update (version 1709)におけるセキュリティ強化の一環として、SMB2.0/3.0リソースへの匿名アクセスがデフォルトで無効になったことに起因します。
この辺りの仕様について、Microsoftでは個別のページで解説しています(日本語版は機械翻訳で微妙な表現になっているので敢えて英語原文へのリンクを掲載)。
Guest access in SMB2 disabled by default in Windows 10, Windows Server 2019. Guest access in SMB2 and SMB3 is disabled – Windows Server – docs.microsoft.com |
ここで匿名アクセス制限可否を定めるのが、次のレジストリ値です。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters] "AllowInsecureGuestAuth"=dword:00000000 ←無効 "AllowInsecureGuestAuth"=dword:00000001 ←許可
このレジストリ値に対する振る舞い方に関する、上記リンクの解説をかいつまむと次のような仕様ということでしょう。
- Windows 10 1709以降は
AllowInsecureGuestAuth=0
が設定されていたら無効
On Windows 10 1709, Windows 10 1803, Windows 10 1903, Windows 10 1909, and Windows Server 2019,
guest authentication is disabled if AllowInsecureGuestAuth exists with a value of 0 in AllowInsecureGuestAuth. - Windows 10 2004以降、エンタ・教育版は当該レジストリ値が存在していなくても無効
On Windows 10 2004, Windows 10 20H2, and Windows 10 21H1 Enterprise and Education editions with KB5003173 installed, guest authentication is disabled if AllowInsecureGuestAuth does not exist or if it exists with a value of 0
in AllowInsecureGuestAuth. - Windows 10 2004以降のHome・Pro版は引き続き1709以降の仕様を維持
Home and Pro editions allow guest authentication by default unless you disable it using group policy or registry settings.
以上より、一般的に使われているWindows 10 Home・Pro版では、当該レジストリ値が明示的に
と設定されていない限り、匿名アクセスは許可されているはずなのですが、先ほどエラーの出たPCを調べてみると、確かに
が設定されていました。上述のMicrosoftの解説でもこうした仕様については述べられているものの、いつ頃よりこのレジストリ値が追加されたのか、もしくは更新などで自動設定されることはないのか、その点に関する記述は残念ながら見当たりませんでした。
そしてもう一つ実際に遭遇したケースに、サーバ上の複数の共有フォルダのうち、1つでもゲストアクセスを許可していると、そのサーバ上の全てのリソースへのアクセスが制限されてしまう、と言う事例がありました。てっきりその共有フォルダのアクセス権設定に問題があるもの、と見直しても原因がそこには存在しないので、この仕様を知らないでいると泥沼にハマることになりかねません。
ADグループポリシーによる一括適用
Active Directoryが構成されているネットワークでは、このようなレジストリ操作をADグループポリシーとして配信することで、傘下のPCへ向けて一括適用させることが出来るので便利です。
ドメインコントローラ機のグループポリシーの管理
gpmc.msc
を開いて、新規グループポリシーオブジェクトを作成します。
作成したオブジェクトを右クリックから編集を選んで、ポリシーエディタを開きます。グループポリシーはレジストリをコンピュータレベル(下図左ペイン上)、ユーザレベル(同下)どちらへも適用可能なのですが、今回はユーザレベルで進めます。
エディタ右ペインの何もないところを右クリックし、アクションを加えたいレジストリ項目を次の要領で新規作成します。
Action : Replace Hive : HKEY_LOCAL_MACHINE Path : SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters Value Name : AllowInsecureGuestAuth Value Type : REG_DWORD Value Data : 1
記述を終えたらポリシーエディタを閉じ、スコープタブのリンク欄に適用させたいユーザを登録、そのセキュリティフィルタは、Authenticated Usersとします(昔、セキュリティフィルタ欄に適用させたいユーザを入れてしまい、ハマったことがありました)。
投稿 Windows10におけるネットワーク共有への匿名アクセス制限の回避策 は Fun Scripting 2.0 に最初に表示されました。