MSアカウントを使用したWindows10 EnterpriseからRHEL9 Sambaにゲストアクセスしたい ～その1～

表題の内容ですが、悩ましかったので備忘。記事は複数回に分けます。

# Microsoft情報

https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/guest-access-in-smb2-is-disabled-by-default

↑Windows10 Enterpriseについては以下の記述があります。

>Windows 10 Enterprise and Windows 10 Education no longer allow a user to connect to a remote share by using guest credentials by default, even if the remote server requests guest credentials.

このno longer allowとby defaultがどこにかかるのか悩ましいところ。以下の日本語版を読んでも解釈が難しい。

https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/networking/guest-access-in-smb2-is-disabled-by-default

>Windows 10 Enterprise と Windows 10 Education では、リモート サーバーがゲストの資格情報を要求した場合でも、ユーザーは既定でゲストの資格情報を使用してリモート共有に接続することができなくなりました。

結論として、当該のレジストリ値を入れてみても当方の環境(Windows 10 Enterprise 22H2 OS Build 19045.2965　w/ MSアカウント)では**ゲストアクセスを有効にできません**でした。

ということで、色々やってみてゲストアクセスっぽくしてみた話です。
Sambaのデバッグログを見て色々と分かることもあったので書いておきます。

上述の情報などは後で調べて分かったことで、そもそもは、**「Windows10 Proでゲストアクセス出来ているので、Windows10 Entでも出来るはず」**、という思い込みから始まってます。

# 環境

samba-4.17.5-102.el9.x86_64
Red Hat Enterprise Linux release 9.2 (Plow)

以下smb.confの内容抜粋です。
~~~
[global]
	security = user
	map to guest = bad user
	
[share]
	path = /smb_share
	read only = No
	guest ok = Yes
~~~
※guest accountはデフォルト値: nobody
※/smb_shareはOwner:nobodyでパーミッションはrwx------
~~~
# grep nobody /etc/passwd
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
# ls -ld /smb_share
drwx------. 2 nobody nobody 6  5月  8 02:09 /smb_share
#
~~~


Win10ProからのゲストアクセスはOKで、Win10EntからのゲストアクセスはNG。
以下のようなメッセージウィンドウです。

_￥￥XXXXX￥share に対するアクセス許可がありません。ネットワーク管理者にアクセス許可を要求してください。_

# Sambaのデバッグログ出力

Sambaのログ内容が乏しいため、デバッグログを出させて違いを見ます。
/etc/sysconfig/sambaファイルのSMBDOPTIONSを以下のように編集します。Debugレベルは出してみないと分からないので最高の10で出しました。
~~~diff_conf
- SMBDOPTIONS=""
+ SMBDOPTIONS="-d 10"
~~~

Sambaをリスタートします。
~~~
# systemctl restart smb
# systemctl status smb
● smb.service - Samba SMB Daemon
     Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; preset: disa>
     Active: active (running) since Tue 2023-05-20 18:47:25 JST; 41s ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 93360 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 3 (limit: 407656)
     Memory: 5.7M
        CPU: 39ms
     CGroup: /system.slice/smb.service
             ├─93360 /usr/sbin/smbd --foreground --no-process-group -d 10
             ├─93362 /usr/sbin/smbd --foreground --no-process-group -d 10
             └─93363 /usr/sbin/smbd --foreground --no-process-group -d 10

 5月 20 18:47:25 XXXXX smbd[93360]:   dsdb_password_audit: 10
 5月 20 18:47:25 XXXXX smbd[93360]:   dsdb_password_json_audit: 10
 5月 20 18:47:25 XXXXX smbd[93360]:   dsdb_transaction_audit: 10
 5月 20 18:47:25 XXXXX smbd[93360]:   dsdb_transaction_json_audit: 10
 5月 20 18:47:25 XXXXX smbd[93360]:   dsdb_group_audit: 10
 5月 20 18:47:25 XXXXX smbd[93360]:   dsdb_group_json_audit: 10
 5月 20 18:47:25 XXXXX smbd[93360]: [2023/05/20 18:47:25.598528,  0, pid=93360,>
#
~~~
ということでsmbdに-d 10が付いて、デバッグレベル10で再起動されました。
Win10ProとWin10Entでアクセスしてみて、違いを見ます。/var/log/samba/log.smbdに大量のログが吐かれます。もう少しデバッグレベルを落として見ると楽かもしれませんが、初回は多いに越したことはありません。

# それぞれのOSからのアクセス

Win10Proだと、以下の通り"nobody"@"XXXXX"のアクセス。(XXXXXはSambaサーバー名)
SIDはWin10Pro側から7つ渡されています。
NT_STATUS_OKで、問題なくアクセス出来ます。ファイルも作れます。
~~~
:
:
                          info                     : *
                              info: struct auth_user_info
                                  account_name             : *
                                      account_name             : 'nobody'
                                  user_principal_name      : NULL
                                  user_principal_constructed: 0x00 (0)
                                  domain_name              : *
                                      domain_name              : 'XXXXX'
                                  dns_domain_name          : NULL
                                  full_name                : NULL
                                  logon_script             : NULL
                                  profile_path             : NULL
                                  home_directory           : NULL
                                  home_drive               : NULL
                                  logon_server             : NULL
                                  last_logon               : NTTIME(0)
                                  last_logoff              : NTTIME(0)
                                  acct_expiry              : NTTIME(0)
                                  last_password_change     : NTTIME(0)
                                  allow_password_change    : NTTIME(0)
                                  force_password_change    : NTTIME(0)
                                  logon_count              : 0x0000 (0)
                                  bad_password_count       : 0x0000 (0)
                                  acct_flags               : 0x00000000 (0)
                                  authenticated            : 0x00 (0)
                          unix_info                : *
                              unix_info: struct auth_user_info_unix
                                  unix_name                : *
                                      unix_name                : 'nobody'
:
:
  Security token SIDs (7):
    SID[  0]: S-1-5-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-501
    SID[  1]: S-1-5-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-514
    SID[  2]: S-1-22-2-65534
    SID[  3]: S-1-1-0
    SID[  4]: S-1-5-2
    SID[  5]: S-1-5-32-546
    SID[  6]: S-1-22-1-65534
   Privileges (0x               0):
   Rights (0x               0):
:
:
  smbd_check_access_rights_sd: File [.] requesting [0x100081] returning [0x100001] (NT_STATUS_OK)
:
:
~~~
Win10Entは以下の通りで、"ANONYMOUS LOGON"@"NT AUTHORITY"でアクセスしに来てます。
ローカルアカウントじゃないってのも影響しているかもしれませんが、これは当方の制約でローカルアカウントは使用出来ず、MSアカウントでのログオンのままゲストアクセスさせたいのです。

で、次にSID。
Win10Proは7つでしたが、Win10Entは5つ渡っています。

そしてNT_STATUS_ACCESS_DENIED。

どうやらこの5つのSIDが評価されて、最終的に以下の3つが引っかかってNGのようです。
1: SEC_DESC_DACL_PRESENT    
1: SEC_DESC_DACL_PROTECTED
1: SEC_DESC_SELF_RELATIVE   

owner_sidはS-1-5-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-501とのことで、Win10Proでは一番最初に渡されてますが、Win10Entから渡っているSIDには存在しません。
Sambaの内部的にこのSIDがguest accountと紐付いていて、Win10Ent側からこのSIDが渡されないことにより、最終的にアクセスが拒否されていると考えられます。

これは当方の環境では、上述のMSページに記載のレジストリ値を手動で入れても変わらずでした。
~~~
:
:
                          info                     : *
                              info: struct auth_user_info
                                  account_name             : *
                                      account_name             : 'ANONYMOUS LOGON'
                                  user_principal_name      : NULL
                                  user_principal_constructed: 0x00 (0)
                                  domain_name              : *
                                      domain_name              : 'NT AUTHORITY'
                                  dns_domain_name          : NULL
                                  full_name                : *
                                      full_name                : 'Anonymous Logon'
                                  logon_script             : *
                                      logon_script             : ''
                                  profile_path             : *
                                      profile_path             : ''
                                  home_directory           : *
                                      home_directory           : ''
                                  home_drive               : *
                                      home_drive               : ''
                                  logon_server             : *
                                      logon_server             : 'XXXXX'
                                  last_logon               : NTTIME(0)
                                  last_logoff              : NTTIME(0)
                                  acct_expiry              : NTTIME(0)
                                  last_password_change     : NTTIME(0)
                                  allow_password_change    : NTTIME(0)
                                  force_password_change    : NTTIME(0)
                                  logon_count              : 0x0000 (0)
                                  bad_password_count       : 0x0000 (0)
                                  acct_flags               : 0x00000010 (16)
                                  authenticated            : 0x00 (0)
                          unix_info                : *
                              unix_info: struct auth_user_info_unix
                                  unix_name                : *
                                      unix_name                : 'nobody'
:
:
  Security token SIDs (5):
    SID[  0]: S-1-5-7
    SID[  1]: S-1-1-0
    SID[  2]: S-1-5-2
    SID[  3]: S-1-22-1-65534
    SID[  4]: S-1-22-2-65534
   Privileges (0x               0):
   Rights (0x               0):
:
:
  smbd_check_access_rights_sd: File [.] requesting [0x100080] returning [0x100000] (NT_STATUS_ACCESS_DENIED)
:
:
       sd: struct security_descriptor
          revision                 : SECURITY_DESCRIPTOR_REVISION_1 (1)
          type                     : 0x9004 (36868)
                 0: SEC_DESC_OWNER_DEFAULTED 
                 0: SEC_DESC_GROUP_DEFAULTED 
                 1: SEC_DESC_DACL_PRESENT    
                 0: SEC_DESC_DACL_DEFAULTED  
                 0: SEC_DESC_SACL_PRESENT    
                 0: SEC_DESC_SACL_DEFAULTED  
                 0: SEC_DESC_DACL_TRUSTED    
                 0: SEC_DESC_SERVER_SECURITY 
                 0: SEC_DESC_DACL_AUTO_INHERIT_REQ
                 0: SEC_DESC_SACL_AUTO_INHERIT_REQ
                 0: SEC_DESC_DACL_AUTO_INHERITED
                 0: SEC_DESC_SACL_AUTO_INHERITED
                 1: SEC_DESC_DACL_PROTECTED  
                 0: SEC_DESC_SACL_PROTECTED  
                 0: SEC_DESC_RM_CONTROL_VALID
                 1: SEC_DESC_SELF_RELATIVE   
          owner_sid                : *
              owner_sid                : S-1-5-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-501
          group_sid                : *
              group_sid                : S-1-22-2-65534
          sacl                     : NULL
          dacl                     : *
:
:
~~~

**次回"ANONYMOUS LOGON"ってユーザーを作ったら、に続く。**

//