ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Home Assistant Samba share 完全指南:通过 SMB/CIFS 共享配置目录与安全调优

Home Assistant Samba share 完全指南:通过 SMB/CIFS 共享配置目录与安全调优 智能家居物联网【免费下载链接】addons:heavy_plus_sign: Docker add-ons for Home Assistant项目地址https://gitcode.com/GitHub_Trending/add/addons点击查看免费下载本文围绕 Home Assistant 的Samba share前身即 Samba add-on展开介绍如何在 Home Assistant 中安装、配置并通过 SMB/CIFS 协议将配置、备份、媒体等目录暴露到局域网供 Windows、macOS 等设备访问。读完本文你将掌握用户名/密码与共享目录的配置方法、七类共享目录的用途、全部可选参数含协议兼容、NetBIOS、WS-Discovery、SMB 签名等的安全含义以及这些配置在 smb.gtpl 与 config.yaml 中的底层实现逻辑。插件概览Samba share 是 Home Assistant 官方应用文档中称 app旧称 add-on其作用是在网络中以 Windows 文件共享SMB/CIFS方式暴露 Home Assistant 的各类目录让你可以从 Windows、macOS 等设备直接读写配置文件与数据。插件描述为 Expose Home Assistant folders with SMB/CIFS见 config.yaml支持 aarch64 与 amd64 两种架构。从运行时配置看config.yaml它需要hassio_api: true与host_network: true前者用于通过 Supervisor API 读取主机名、网络接口等信息后者使插件直接使用宿主机的网络栈从而让 SMB 服务对局域网设备可达这也是后续 WS-Discovery、NetBIOS 广播等能力的前提。安装步骤按官方文档安装过程如下在 Home Assistant 中进入SettingsAppsInstall app找到 Samba share 应用并点击点击INSTALL按钮完成安装。安装完成后首次使用前需要在配置中设置认证信息见下文如何配置一节因为启动脚本会在缺少用户名或密码时直接报错退出Setting a username and password is required!见 init-smbd/run。如何使用在配置部分设置一个用户名和密码。该用户名/密码与登录 Home Assistant 的凭据完全无关也与你要使用 Samba 的电脑登录凭据无关——它是 Samba 服务自身独立的账户体系。检查启用的共享目录列表关闭你不打算使用的共享之后需要时随时可以重新启用。若enabled_shares为空启动会被拒绝提示 Samba is a tool for sharing folders. Starting it without sharing any folders defeats the purpose.init-smbd/run。如何连接共享连接方式取决于客户端系统Windows在资源管理器地址栏输入\\IP_ADDRESS\macOS在 Finder 中使用smb://IP_ADDRESS。插件通过 SMBSamba暴露以下目录| 目录 | 说明 | | -- | -- | |local_apps| 用于存放你的本地应用local apps | |app_configs| 用于存放各应用的配置文件 | |backup| 用于存放备份 | |config| 用于存放 Home Assistant 配置 | |media| 用于存放本地媒体文件 | |share| 用于存放应用与 Home Assistant 之间共享的数据 | |ssl| 用于存放 SSL 证书 |旧共享名的兼容迁移local_apps与app_configs之前分别叫addons与addon_configs。现有配置会自动迁移到新名称同时新旧两个名字都会继续暴露并指向同一目录因此迁移期间既有连接不会中断。这一逻辑在源码中有完整实现init-smbd/run启动时脚本会读取 Supervisor 中保存的enabled_shares将其统一转为小写并把addons重命名为local_apps、addon_configs重命名为app_configs同时去重再写回 Supervisor API。而在 smb.gtpl 中只要enabled_shares包含新旧任一名字就会同时生成新旧两个共享段其中旧共享段[addons]、[addon_configs]通过preexec在用户连接时向系统日志写入一条提示建议用户切换到新共享名例如/usr/bin/logger -s -t smbd -p local0.warning %u connected to deprecated share %S from %m (%I), please switch to the local_apps share完整配置示例应用配置App configuration示例如下username: homeassistant password: YOUR_PASSWORD workgroup: WORKGROUP enabled_shares: - local_apps - app_configs - backup - config - media - share - ssl compatibility_mode: false apple_compatibility_mode: true netbios: true local_master: true network_discovery: true server_signing: default veto_files: - ._* - .DS_Store - Thumbs.db - icon? - .Trashes allow_hosts: - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 - 169.254.0.0/16 - fe80::/10 - fc00::/7以上默认值均可在 config.yaml 的options段中找到。各选项的校验规则schema同样定义于此username/workgroup为字符串、password为密码类型UI 中不回显明文、开关项为布尔值、server_signing被限制为default|auto|mandatory|disabled之一enabled_shares的每一项必须匹配正则^(?i:(local_apps|app_configs|addons|addon_configs|backup|config|media|share|ssl))$——注意它不区分大小写且兼容新旧共享名。选项username必填用于向 Samba 服务器进行身份验证的用户名。选项password必填与上述用户名配套的认证密码。补充一个源码层面的细节若配置的用户名中包含空格启动脚本会生成一个内部 Samba 用户名将空格替换为下划线并通过/etc/samba/smbusers做映射最终valid users使用该内部用户名init-smbd/run随后脚本创建同名系统用户并以smbpasswd -a -s写入密码第 90-97 行。因此用户名带空格也能正常工作。选项workgroup必填将其修改为符合你网络环境的工作组名。它会被写入 smb.conf 的workgroup 字段并用于 WS-Discovery 的广播见下文network_discovery。选项enabled_shares必填可访问的 Samba 共享列表。从列表中移除或注释掉的共享将不可访问——对应地smb.gtpl 中每个共享段[config]、[local_apps]、[ssl]、[share]、[backup]、[media]等都用{{ if (has xxx .enabled_shares) }}条件包裹未启用的共享根本不会出现在生成的 smb.conf 中。选项allow_hosts必填允许访问共享文件夹的主机/网段列表。它对应 smb.conf 中的hosts allow并且模板固定附加了127.0.0.1smb.gtpl。默认值覆盖了 RFC1918 私有网段10/8、172.16/12、192.168/16、链路本地网段169.254/16、fe80::/10与 ULA 网段fc00::/7因此典型的家庭/办公局域网客户端都能访问。若你的客户端不在这些网段内需要显式添加。选项veto_files可选既不显示也不可访问的文件列表用于阻止客户端在共享里乱扔临时隐藏文件例如 macOS 的.DS_Store、Windows 的Thumbs.db。模板中将其渲染为veto files /._*/.DS_Store/.../以斜杠包裹、逗号分隔风格并且当列表非空时同时启用delete veto files yessmb.gtpl意味着这些文件即使被客户端创建也会被静默删除而不会残留在共享中。选项compatibility_mode设为true会启用旧的遗留 Samba 协议可能解决部分无法处理新协议的客户端的兼容问题但会降低安全性。仅在确实需要并理解后果时使用。在模板中开启该选项会同时设置client min protocol NT1与server min protocol NT1smb.gtpl即允许最低使用 NT1CIFS 时代协议进行会话这会让 SMB1 相关的已知漏洞重新暴露。默认值为false。选项apple_compatibility_mode启用针对 Apple 设备互操作性的 Samba 配置。对不支持 xattr扩展属性的文件系统如 exFAT可能引发问题。模板中开启后会加载 Samba 的 VFS 模块catia fruit streams_xattrsmb.gtplfruit提供 Apple 专有协议AAPL支持streams_xattr将资源分支映射为 xattrcatia处理特殊字符映射从而改善 macOS 客户端的体验。默认值为true。选项netbiosNetBIOS 是访问 SMB/CIFS 共享的遗留网络协议。仅当存在早于 Windows Vista 的旧客户端Windows 95/98/ME、Windows NT、Windows 2000、Windows XP、LanManager或 OS X 10.9Mavericks及更早系统时才需要启用。默认开启是为了兼容旧设备现代安装建议关闭。模板层面的证据关闭netbios后smb.conf 会被限制为smb ports 445smb.gtpl即只监听现代 SMB 端口而运行时层面enable-check.sh 会根据该选项决定是否启用nmbd服务负责 NetBIOS 名字服务与浏览。选项local_master当 NetBIOS 启用时尝试成为子网内的本地主浏览器local master browser。对应 smb.conf 的local master yes/nosmb.gtpl。默认值为true。选项network_discovery通过 Web Services Dynamic DiscoveryWS-Discovery在网络中通告主机使宿主机会自动出现在 Windows 文件资源管理器的网络列表中。如果你习惯用主机名或 IP 直连、不想让主机主动广播自身可关闭此选项。关闭它不影响共享的可用性只影响自动发现。运行时层面enable-check.sh 控制wsdd服务的启停而 wsdd/run 会读取主机名与workgroup配置收集所有启用的网络接口以wsdd -i iface ... -n hostname -w workgroup的方式启动广播守护进程。默认值为true。选项server_signing配置 SMB 服务器签名要求通过强制消息签名可抵御中间人攻击提升安全性。可选值与 smb.conf 手册一致default、auto、mandatory、disabled直接透传到server signing 字段smb.gtpl。默认值为default由 Samba 按协议协商决定。底层实现与运行原理配置渲染链路插件的配置渲染链路清晰可见Supervisor 将 UI 中保存的选项写入/data/options.jsoninit-smbd/run 用jq注入运行时探测到的网络接口列表、将enabled_shares统一转小写、把配置用户名替换为内部 Samba 用户名然后交给tempio模板引擎渲染 smb.gtpl最终输出/etc/samba/smb.conf。全局安全基线生成的 smb.conf 中有几项固定的安全相关配置smb.gtplsecurity user基于用户账户认证ntlm auth yesusername map配合上文提到的含空格用户名映射bind interfaces only yes、interfaces lo 已启用接口只监听回环与 Home Assistant 中启用的网络接口接口列表来自 network-interfaces.sh通过bashio::network.enabled过滤hosts allow 127.0.0.1 allow_hosts接入控制白名单load printers no/disable spoolss yes不暴露打印相关功能dos charset CP850、unix charset UTF-8、mangled names no控制文件名编码与名字修饰行为。所有共享段均使用valid users username限制访问并以force user root/force group root将写入文件的属主固定为 rootsmb.gtpl 中每个共享段确保容器内文件权限一致、可被 Home Assistant 读取。服务编排容器使用 s6-overlay 管理多个服务samba/rootfs/etc/s6-overlay/s6-rc.dsmbd核心文件共享服务前台运行smbd --foreground --debug-stdout --no-process-groupnmbdNetBIOS 名字服务受netbios选项控制wsddWS-Discovery 广播受network_discovery选项控制init-smbd启动前一次性任务负责校验凭据、迁移旧共享名、探测接口、渲染 smb.conf、创建 Samba 用户并写入密码。常见问题与排障思路连不上 / 看不到共享先确认allow_hosts是否覆盖了客户端所在网段再确认客户端是否处于bind interfaces only所绑定的接口网络若关闭了network_discovery请改用\\IP_ADDRESS\或smb://IP_ADDRESS直连。旧客户端无法连接确认compatibility_mode与netbios的取舍——前者降低协议安全性后者提供旧协议支持仅在必要时启用。macOS 上出现文件系统异常apple_compatibility_mode依赖 xattr若共享位于 exFAT 等不支持 xattr 的文件系统上需关闭该选项。启用了共享却仍不可访问检查enabled_shares是否真的包含该共享名且名字拼写合法schema 正则不区分大小写同时留意veto_files是否误把目标文件/目录列入了隐藏名单。用户名含空格无法认证系统会自动将空格映射为下划线并生成内部用户名认证时使用带空格的原始用户名即可。获取帮助遇到问题时可以在 Home Assistant 官方社区渠道Discord 聊天服务器、Community Forum、Reddit 的 r/homeassistant 子版块寻求帮助若确认是插件本身的缺陷可在 Home Assistant addons 仓库提交 issue。本文所有配置行为均可在 samba/DOCS.md、samba/config.yaml、samba/rootfs/usr/share/tempio/smb.gtpl 与 samba/rootfs/etc/s6-overlay 各运行脚本中核对验证。赞分享智能家居物联网【免费下载链接】addons:heavy_plus_sign: Docker add-ons for Home Assistant项目地址https://gitcode.com/GitHub_Trending/add/addons点击查看免费下载相关推荐JuiceFS 通过 Samba 共享目录从挂载到 SMB/CIFS 共享的完整配置指南JuiceFS 通过 Samba 共享目录从挂载到 SMB/CIFS 共享的完整配置指南 导读 本文介绍如何把 JuiceFS 文件系统中的目录通过 Samb存储分布式文件系统云原生大数据rclone SMB/CIFS 后端详解接入 Samba 与 Windows 共享盘从配置到连接池原理rclone SMB/CIFS 后端详解接入 Samba 与 Windows 共享盘从配置到连接池原理 rclone 的 SMB 后端v1.60 引入让CLI数据同步对象存储Ceph 的 cephadm SMB Service 实战指南编排 Samba 容器提供 SMB 共享Ceph 的 cephadm SMB Service 实战指南编排 Samba 容器提供 SMB 共享 Ceph 的 cephadm 编排器提供了一种原生的存储分布式文件系统对象存储后端高可用上一篇GTA5线上小助手怎么用5 个技巧带你快速上手这款免费辅助工具下一篇Easydict Agent 执行上下文统一记录plan 与 history 模板的 Agent Name / Model / Environment 规范解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表