macOS向けのSambaファイル共有の設定とSMB署名について

Linux

はじめに

macOSクライアントからSambaファイル共有に接続するため、Linuxサーバにおける最低限の設定を行います。

サーバーOSは、Ubuntu Server 24.04 LTS です。
Sambaバージョンは、Version 4.19.5-Ubuntu です。

クライアントOSは、macOSやiOSとWindowsです。
Windows 11 24H2以降の接続を考慮する為にSMB署名を有効にします。

クライアントOSの一覧は下記の通りです。
  • iPad iOS 15.7 6
  • iPhone iOS 18.2.1
  • macOS Ventura 13.1
  • macOS Sequoia 15.2
  • Windows 10 22H2
  • Windows 11 22H2
  • Windows 11 23H2

本設定は、MacでSMBファイル共有を設定する」と異なる設定です。
AFP(Apple Filing Protocol)は利用しません。

プロトコルはSMBv2からSMBv3の範囲を利用します。
古いiOSはSMBv3をサポートしていないようでした。

mDNSは、avahi-daemonを利用します。

ファイル共有の設定は、usershare を利用しません。

シナリオ

太郎さん(taro)が、セールスチーム(SalesTeam-1-1)に所属します。
また、セールスチーム(SalesTeam-1-1)はWindows共有フォルダ(nas)を所有します。

  • ユーザ名:taro
  • グループ名: SalesTeam-1-1
  • 共有名(Windows共有フォルダ名): nas
Windows共有フォルダは、次のディレクトリに格納します。
  • /srv/nas

同様に、macOSのTime Machine用のバックアップ領域も作成します。(オプション)
  • /srv/timemachine

インストールする

# apt install -y samba avahi-daemon

Linuxグループを作成する

#addgroup SalesTeam-1-1
info: Selecting GID from range 1000 to 59999 ...
info: Adding group `SalesTeam-1-1' (GID 1001) ...

LinuxユーザーをLinuxグループへ所属する

ユーザtaroをグループSalesTeam-1-1へ所属する
#usermod -aG SalesTeam-1-1 taro
SalesTeam-1-1グループへ所属しているか確認する
#groups taro
taro : taro ~略~ SalesTeam-1-1


アクセスするディレクトリに権限を付与する

#mkdir -p /srv/nas/
#chown -R root:SalesTeam-1-1 /srv/nas/
#chmod -R 770 /srv/nas/

#mkdir -p /srv/timemachine/
#chown -R root:SalesTeam-1-1 /srv/timemachine/
#chmod -R 770 /srv/timemachine/

#ls -l /srv/
drwxrwx--- 2 root SalesTeam-1-1 4096 Dec 18 15:31 nas
drwxrwx--- 2 root SalesTeam-1-1 4096 Dec 18 15:31 timemachine

smb.conf 設定ファイルを編集する

#vim /etc/samba/smb.conf

[global]
log file = /var/log/samba/log.%m
logging = file
max log size = 1000
panic action = /usr/share/samba/panic-action %d
# iPhone iOS 対策
server min protocol = SMB2
# Windows 11 24H2対策
client signing = required
# Windows 11 24H2対策
server signing = mandatory
# smb encryptを有効にしたとき、SMB署名は不要になる
#smb encrypt = mandatory
security = USER
# Windows 11 24H2対策
restrict anonymous = 2
fruit:model = Xserve
idmap config * : backend = tdb
server role = standalone server

[nas]
# プレフィックスに+をつけると明示的にLinuxグループと解釈する
valid users = +SalesTeam-1-1
delete veto files = Yes
veto files = /._*/.DS_Store/
force create mode = 0770
force directory mode = 0770
inherit permissions = Yes
path = /srv/nas
read only = No
vfs objects = fruit streams_xattr
fruit:metadata = stream
fruit:wipe_intentionally_left_blank_rfork = Yes

[TimeMachine]
path = /srv/timemachine
read only = No
vfs objects = fruit streams_xattr
fruit:time machine max size = 512G
fruit:time machine = Yes
fruit:advertise_fullsync = Yes

#EOF

SambaのユーザーDBに追加と関連付けをする

LinuxユーザーをWindowsファイル共有のユーザー名と関連付けします。
Windowsファイル共有におけるユーザー名に対するパスワードも設定します。
今回の例では、Linuxユーザーのパスワードと連携しません。
今後、pdbedit コマンドでパスワードリセットなどの運用を行います。

# pdbedit -a taro

new password: ******** Windowsファイル共有のパスワードを入力

retype new password: ******** Windowsファイル共有のパスワードを入力

Unix username:        taro


サービスを起動します

# systemctl enable nmbd smbd avahi-daemon
# systemctl restart nmbd smbd avahi-daemon

ファイアウォール設定を行う

# ufw allow samba
# ufw allow 5353/udp
# ufw reload

疎通の確認をします

macOSクライアントの場合

smb://<サーバのホスト名>.local/nas
または、smb://<IPアドレス>/nas

ID: taro
PW: Windowsファイル共有のパスワードを入力

Windowsクライアントの場合

¥¥<サーバのホスト名>.local¥nas
¥¥<サーバのIP>¥nas

ID: taro
PW: Windowsファイル共有のパスワードを入力

接続情報を表示

サーバーの場合

# smbstatus -b

Samba version 4.19.5-Ubuntu

PID     Username     Group        Machine                                   Protocol Version  Encryption           Signing

----------------------------------------------------------------------------------------------------------------------------------------

250310  taro         taro         <PCのIPアドレス> (ipv4:<PCのIPアドレス>:<ポート番号>)        SMB3_11           -                    partial(AES-128-GMAC)

Windows OS クライアントの場合

PowerShell を管理者権限で開く。

PS C:\Users\taro> Get-SmbConnection | Select-Object *

〜一部割愛〜

Credential            :<PCのホスト名>\taro

Dialect               : 3.1.1 #SMBv3で接続

Encrypted             : False #暗号化は無効

ServerName            : <サーバのIP>

Signed                : True #SMB署名は有効

UserName              : <PCのホスト名>\taro

最後に

SMB暗号化とSMB署名の関係についてです。
お互いの有効と無効は、当該設定は排反関係だと思います。
たぶん、仕様だと考えてます。間違ってたらコメントいただけると幸いです。

smb.conf によると、SMB暗号化が有効のときWindows 風の SMB 署名不要と読み取りました。

SMB 暗号化を選択した場合、Windows 風の SMB 署名 (server signingオプションを参照) はもはや不要で、GSSAPI フラグが署名とデータの署名と暗号化 両方を選択する。

auto 又は 既定値に設定した場合、SMB 暗号化は提供されるが、強制 ではない。mandatory に設定した場合、SMB 暗号化が要求され、 disable に設定した場合は、SMB 暗号化はネゴシエートされない。

 SMB暗号化を有効にするとSMB署名が無効になりました。

グローバルセクションの下記設定になります。

client signing = required

server signing = mandatory

#smb encryptを有効にしたとき、SMB署名は不要になる

smb encrypt = mandatory


QooQ