AWSにWindowsサーバを立ててLinux(RHEL)とファイル共有する機会があったのですが、クラウドなのでSMB暗号化を使ってみたいと思って調査した結果です。
環境は以下です。
- Windows_Server-2016-English-Full-Base-2019.07.12 (ami-0404c1383f6b870a2)
- RHEL-7.6_HVM_GA-20190128-x86_64-0-Hourly2-GP2 (ami-00b95502a4d51a07e)
Windows 8 以降のOSであれば標準で共有フォルダの暗号化ができますが、デフォルト無効なので有効にしてやります。
以下のようにします。
New-SmbShare -Name Share -Path C:\Share -EncryptData $True -FullAccess hoge
PowerShell を使わずに有効化するにはサーバマネージャの「ファイルサービスと記憶域サービス」のウィザードを使うようです。フォルダのプロパティにはそれらしいオプションは見当たらなかったので、サーバOS以外でやる場合は大人しくPowerShell使いましょう。
Linux からは以下のようにマウントします。root か sudo で実行します。
mount -t cifs -o 'username=hoge,password=pass,vers=3.0' //windows-ip/Share /mnt
vers=3.0
というのは無くても繋がるみたいですが、messages に警告が記録されるので明示してあげます。
mount
のオプションはカンマ区切りなので、パスワードにカンマやシングルクォートが入っているとマウントできず、エスケープする方法があれば知りたいところ。
Windows側から以下のようにすると接続しているSMBプロトコルのバージョン(ダイアレクトというらしい)を確認できます。
Get-SmbSession | select *
SmbInstance : Default
ClientComputerName : <Linux IP>
ClientUserName : <Windows Hostname>\Administrator
ClusterNodeName :
Dialect : 3.0 <----- SMB3.0で接続されている
NumOpens : 0
ScopeName : *
SecondsExists : 347
SecondsIdle : 347
SessionId : 292057776193
TransportName :
PSComputerName :
CimClass : ROOT/Microsoft/Windows/SMB:MSFT_SmbSession
CimInstanceProperties : {ClientComputerName, ClientUserName, ClusterNodeName, Dialect...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
双方で特に準備など不要というところが手軽で良いですね。IISでFTPSなどすると手間なので。
ログ監視
鯖缶としてはセキュリティだけでなく、エラーが出ないか気になるところなので確認してみました。
マウントした際に以下のようなメッセージが記録されますが、カーネルの問題らしいので抑止は諦めます。尚、修正は 4.17 らしいのですが RHEL7 はカーネル 3 系なので駄目みたい。
kernel: CIFS VFS: ioctl error in smb2_get_dfs_refer rc=-5
また、繋ぎっぱなしにしていると15分毎に以下のようなメッセージが出ますが、やはりカーネルの問題らしく4.4で修正されているとのこと。これもやはり諦め。
kernel: CIFS VFS: Free previous auth_key.response = ffff92647a8d1800
参考
第9回 強化されたファイル共有プロトコルSMB 3.0の概要:Windows Server 2012クラウドジェネレーション - @IT
SMB セキュリティ拡張機能 | Microsoft Docs