17 December 2023

(Linux)Sambaの設定とコマンドでの調査方法

Ubuntu Linuxで「初期設定」のままでSambaサーバ(SMB - Server Message Block サーバ)を立ち上げたら、アクセスできなかった...

ということで、どう設定したらよいのか。LinuxのコマンドラインでSambaサーバの状況を確認する方法をメモしておく。

サーバ検証環境
・Version 4.15.13 / Ubuntu 22.04

目次
(Linux)Sambaの設定とコマンドでの調査方法
(Linux)Sambaの応用設定

参考資料

smb.conf Ubuntu 22.04 manpage
smb.conf 現行バージョン(Ver 4.17.0)マニュアル 日本語版
smb.conf バージョン 4(Ver 4.1.20 - 4.1.22)マニュアル 日本語版
smb.conf バージョン 3(Ver 3.5.16 - 3.5.20)マニュアル 日本語版

samba 現行バージョン(Ver 4.17.0)マニュアル目次 日本語版
samba バージョン 4 マニュアル目次 日本語版
samba バージョン 3 マニュアル目次 日本語版

基本的事項

SMBサーバをネットワーク上から検索し、アクセスする方法は次のように行った。

ワークグループ名「WORKGROUP」として公開されているネットワーク上のSMBサーバ一覧は次のように表示する。(パスワード保護されているサーバでも、認証無しでブラウズできるリソースタイプ 00 で検索する)

$ nmblookup WORKGROUP#00
192.168.1.11 WORKGROUP<00>
192.168.1.13 WORKGROUP<00>
192.168.1.1 WORKGROUP<00>

指定したIPアドレスのSMBサーバについて、次のように問い合わせる。リソースタイプ0x20を持つマシンはファイルサーバ機能を示している(黄色着色部)。

また、このコマンドでNetBIOS名も判明する。

$ nmblookup -A 192.168.1.13
Looking up status of 192.168.1.13
  ELITEDESK800G1  <00> -         B  
  WORKGROUP       <00> - <GROUP> B  
  ELITEDESK800G1  <20> -         B  
  WORKGROUP       <1e> - <GROUP> B  

  MAC Address = 50-65-F3-2F-41-8D
NetBIOS リソースタイプ一覧
Named resource値(16進数)
Standard Workstation Service00
_ _MSBROWSE_ _01
Messenger Service03
RAS Server Service06
Domain Master Browser Service1B
Logon server1C
Master Browser name1D
Normal Group name1E
NetDDE Service1F
Fileserver20
RAS Client Service21
Network Monitor AgentBE
Network Monitor UtilityBF

ファイルサーバ機能があるSMBサーバに対して、共有名の一覧を問い合わせは次のように行う。

$ smbclient -L ELITEDESK800G1 [-U vm]
Password for [WORKGROUP\vm]:

  Sharename       Type      Comment
  ---------       ----      -------
  ADMIN$          Disk      Remote Admin
  C$              Disk      Default share
  D$              Disk      Default share
  IPC$            IPC       Remote IPC
  SambaShare      Disk      
  Users           Disk      
Reconnecting with SMB1 for workgroup listing.

  Server               Comment
  ---------            -------

  Workgroup            Master
  ---------            -------

デフォルトの smb.conf

デフォルトの設定ファイルは、findコマンドで検索すると /usr/share/samba にある。設定カスタマイズに失敗したら、これを書き戻せば良い。

$ find /usr -name 'smb.conf' -print
/usr/share/doc/nautilus-share/examples/smb.conf
/usr/share/samba/smb.conf

この初期設定値の概要は

$ testparm /usr/share/samba/smb.conf
Load smb config files from /usr/share/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed

Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
  log file = /var/log/samba/log.%m
  logging = file
  map to guest = Bad User
  max log size = 1000
  obey pam restrictions = Yes
  pam password change = Yes
  panic action = /usr/share/samba/panic-action %d
  passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
  passwd program = /usr/bin/passwd %u
  server role = standalone server
  server string = %h server (Samba, Ubuntu)
  unix password sync = Yes
  usershare allow guests = Yes
  idmap config * : backend = tdb

[printers]
  browseable = No
  comment = All Printers
  create mask = 0700
  path = /var/spool/samba
  printable = Yes

[print$]
  comment = Printer Drivers
  path = /var/lib/samba/printers

SambaサーバのSMBバージョン設定

クライアントからの応答に答える、サーバ側のSMBプロトコルの範囲を指定できる。

/etc/samba/smb.conf に追加(黄色着色部はdefault値)
[global]
  server max protocol = SMB3
  server min protocol = SMB2_02
SMBプロトコル設定値一覧
プロトコル設定値(別名)同等Windows Ver
CORE
COREPLUS
LANMAN1
LANMAN2
NT1Windows XP/NT (CIFS)
SMB2SMB2_10Windows 7
SMB3SMB3_11Windows 10

Ubuntu 20.04, 22.04 では SMB1をサポートするSMBサーバにしかアクセスできない?

デフォルト設定でのUbuntuでは、SMB2以上のSambaサーバにアクセスできない。例えば、smb.confでSMBサーバのバージョン設定を(デフォルト設定値の) SMB2〜SMB3とした場合

/etc/samba/smb.conf のデフォルト設定値
[global]
  server max protocol = SMB3
  server min protocol = SMB2

UbuntuからSambaサーバをブラウズすると... SMB1で応答がないのでエラーとなる

$ smbclient -L UBUNTU2204M720Q
Password for [WORKGROUP\vm]:

  Sharename       Type      Comment
  ---------       ----      -------
  print$          Disk      Printer Drivers
  public          Disk      anonymous access
  IPC$            IPC       IPC Service (Ubuntu2204M720q server (Samba, Ubuntu))
Reconnecting with SMB1 for workgroup listing.
smbXcli_negprot_smb1_done: No compatible protocol selected by server.
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Unable to connect with SMB1 -- no workgroup available

コマンドラインと同様に、Nautilusでも「匿名アクセス」の選択肢が無いダイアログが出てきて、先に進めない。

20231217-nautilus-auth.jpg

これを解消するには、サーバをSMB1までサポートさせれば良い

/etc/samba/smb.conf に追加
[global]
  server min protocol = NT1

UbuntuからSambaサーバをブラウズすると... エラーなくアクセスできる

$ smbclient -L UBUNTU2204M720Q
Password for [WORKGROUP\vm]:

  Sharename       Type      Comment
  ---------       ----      -------
  print$          Disk      Printer Drivers
  public          Disk      anonymous access
  IPC$            IPC       IPC Service (Ubuntu2204M720q server (Samba, Ubuntu))
Reconnecting with SMB1 for workgroup listing.

  Server               Comment
  ---------            -------

  Workgroup            Master
  ---------            -------
  WORKGROUP            TP-SHARE

Nautilusでも、ちゃんと匿名アクセスの選択肢が示されてアクセス可能となっている。

20231217-nautilus-anonymous.jpg

Windows 11 と Ubuntu 20.04, 22.04 よりSambaサーバにアクセスした場合の応答バージョン

ここで扱うマシンは
・192.168.1.13 = ELITEDESK800G1 = Windows 11
・192.168.1.11(172.0.0.1) = UBUNTU2204M720Q = Ubuntu 22.04
・192.168.1.193 = DYNABOOKR63U = Ubuntu 20.04

$ sudo smbstatus -d

Samba version 4.15.13-Ubuntu
PID     Username     Group        Machine                                   Protocol Version  Encryption           Signing              
----------------------------------------------------------------------------------------------------------------------------------------
17438   nobody       nogroup      192.168.1.193 (ipv4:192.168.1.193:55482)  SMB3_11           -                    -                    
17458   nobody       nogroup      192.168.1.13 (ipv4:192.168.1.13:50471)    SMB3_11           -                    -                    
17438   (auth in progress)        192.168.1.193 (ipv4:192.168.1.193:55482)  SMB3_11           -                    -                    
17428   nobody       nogroup      dynabookr63u (ipv4:192.168.1.193:44990)   NT1               -                    -                    
17631   nobody       nogroup      ubuntu2204m720q (ipv4:127.0.0.1:43424)    NT1               -                    -                    
17651   (auth in progress)        127.0.0.1 (ipv4:127.0.0.1:58504)          SMB3_11           -                    -                    
17651   nobody       nogroup      127.0.0.1 (ipv4:127.0.0.1:58504)          SMB3_11           -                    -                    

Service      pid     Machine       Connected at                     Encryption   Signing     
---------------------------------------------------------------------------------------------
IPC$         17428   dynabookr63u  月 12月 18 10時00分03秒 2023 JST -            -           
IPC$         17631   ubuntu2204m720q 月 12月 18 10時00分59秒 2023 JST -            -           
public       17458   192.168.1.13  月 12月 18 10時00分16秒 2023 JST -            -           
public       17651   127.0.0.1     月 12月 18 10時01分02秒 2023 JST -            -           
public       17438   192.168.1.193 月 12月 18 10時00分06秒 2023 JST -            -           

Windows 11からはSMB3プロトコルのみでアクセスが完結している。それに対して、Ubuntu 20.04と22.04からはSMB1とSMB3の双方のプロトコルを使ってアクセスを行っている。

つまり、UbuntuからSambaサーバにアクセスするには、SMB1のサポートが必要なようだ。

SambaクライアントのSMBバージョン設定

SMBサーバに接続するときに、SMB1プロトコルが必要となるため、次の1行を設定ファイルに加える。

/etc/samba/smb.conf に追加
[global]
  client min protocol = NT1
SMBプロトコル設定値一覧
プロトコル設定値(別名)同等Windows Ver
CORE
COREPLUS
LANMAN1
LANMAN2
NT1Windows XP/NT (CIFS)
SMB2SMB2_10Windows 7
SMB3SMB3_11Windows 10

ゲストアクセス可能な共有フォルダを作成する

Sambaの設定ファイルに追記する

/etc/samba/smb.conf に追加
[public]
  path = /media/samba_share/public/
  comment = anonymous access
  create mask = 0666
  directory mask = 0777
  guest ok = yes
  guest only = yes
  read only = no
;  browsable = yes      ; default value

共有フォルダを作成する

$ sudo mkdir -p /media/samba_share/public
$ sudo chown -R nobody:nogroup /media/samba_share/public
$ sudo chmod 0777 /media/samba_share/public

Sambaサービスを再起動する

$ sudo systemctl restart smbd.service
$ sudo systemctl restart nmbd.service

ユーザ認証が必要な共有フォルダを作成する

Sambaの設定ファイルに追記する

/etc/samba/smb.conf に追加
[vm_share]
  path = /media/samba_share/vm_share/
  comment = user vm only share folder
  create mask = 0666
  directory mask = 0777
  valid users = vm vm-root
  read only = no
;  browsable = yes      ; default value

valid usersには、スペースで区切ってユーザ名を列挙できる。また、UNIXグループ名は「@」をつけてvalid users = @admin @sambashareなどと記述する。

共有フォルダを作成する

$ sudo mkdir -p /media/samba_share/vm_share
$ sudo chown -R vm:vm /media/samba_share/vm_share
$ sudo chmod 0777 /media/samba_share/vm_share

Sambaで利用するユーザ名を作成(Linuxの資格情報からコピー)する。

$ sudo pdbedit -a vm
new password:
retype new password:
Unix username:        vm
NT username:          
Account Flags:        [U          ]

... 以下省略

$ sudo pdbedit -L
vm:1001:vm