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 バージョン 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> - BWORKGROUP <00> - <GROUP> B ELITEDESK800G1 <20> - B WORKGROUP <1e> - <GROUP> B MAC Address = 50-65-F3-2F-41-8D
Named resource | 値(16進数) |
---|---|
Standard Workstation Service | 00 |
_ _MSBROWSE_ _ | 01 |
Messenger Service | 03 |
RAS Server Service | 06 |
Domain Master Browser Service | 1B |
Logon server | 1C |
Master Browser name | 1D |
Normal Group name | 1E |
NetDDE Service | 1F |
Fileserver | 20 |
RAS Client Service | 21 |
Network Monitor Agent | BE |
Network Monitor Utility | BF |
ファイルサーバ機能がある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
プロトコル設定値 | (別名) | 同等Windows Ver |
---|---|---|
CORE | ||
COREPLUS | ||
LANMAN1 | ||
LANMAN2 | ||
NT1 | Windows XP/NT (CIFS) | |
SMB2 | SMB2_10 | Windows 7 |
SMB3 | SMB3_11 | Windows 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でも「匿名アクセス」の選択肢が無いダイアログが出てきて、先に進めない。
これを解消するには、サーバを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でも、ちゃんと匿名アクセスの選択肢が示されてアクセス可能となっている。
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
プロトコル設定値 | (別名) | 同等Windows Ver |
---|---|---|
CORE | ||
COREPLUS | ||
LANMAN1 | ||
LANMAN2 | ||
NT1 | Windows XP/NT (CIFS) | |
SMB2 | SMB2_10 | Windows 7 |
SMB3 | SMB3_11 | Windows 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