はじめに
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
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共有フォルダは、次のディレクトリに格納します。
同様に、macOSのTime Machine用のバックアップ領域も作成します。(オプション)
# 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