# Samba文件共享 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- # 概述 Samba 是在 Linux 系统上构建文件共享和访问控制服务的常用工具,利用 SMB 协议实现局域网内不同设备之间的文件互访。通过在本地部署 Samba,可以方便地向 Windows、Linux 或 macOS 客户端提供共享目录,实现跨平台的文件传输与协作。 本文档介绍在 Quectel Pi(M1 / L1)Debian 系统下配置 Samba 文件共享服务,使 Windows 电脑能直接访问设备的共享文件夹。 # 准备工作 1. 确认设备环境: - 设备(M1 或 L1)可正常联网 - Windows 主机和设备处于同一局域网内 - M1 在 GNOME 图形环境下验证。L1 已在 Weston 图形环境下完成验证,Samba 文件共享不依赖 GNOME 桌面。 2. 检查网络连通: - 在终端执行 `ping 8.8.8.8`,若能看到返回的时间信息,则说明网络正常。 3. 登录开发板(L1 专属): - 若本地调试环境已可用,也可通过 ADB 进入系统;本文以串口进入为例。 - 串口连接方式可参考:debug_uart.md - L1 默认使用 `root` 用户登录,默认无密码。 # 安装 Samba 服务 Samba 是 Debian/Linux 上用于和 Windows 系统共享文件的服务程序。 1. 更新软件包列表: ```bash sudo apt-get update ``` > 💡 若开发板当前无法直接访问 Debian 软件源,可先在主机下载 `arm64` 的 `.deb` 安装包,再拷贝到开发板后使用 `dpkg -i` 安装;至少需要准备 `samba-common`、`samba-common-bin`、`samba`、`smbclient`,若版本不一致,还需一并补齐对应版本的依赖库。 2. 安装 Samba 及客户端工具: ```bash sudo apt-get install samba sudo apt-get install smbclient ``` > 💡 **`samba`**:服务器端软件,用于提供共享服务;**`smbclient`**:客户端工具,可用于测试连接是否成功。 3. 确认 Samba 安装成功: ```bash smbd --version smbclient --version ``` ```bash sudo samba -V ``` # 创建共享文件夹 > 💡 本文以用户 `q` 为示例说明 Samba 共享配置。若系统中尚未创建该用户,可改为已有用户(如 `root`),或先创建普通用户后再继续配置。 1. 创建共享目录: ```bash mkdir -p /home/q/share ``` 2. 创建测试文件: ```bash touch /home/q/share/test.txt ``` 3. 修改权限: ```bash chmod -R 777 /home/q/share ``` # 配置 Samba 服务 1. 打开配置文件: ```bash sudo vim /etc/samba/smb.conf ``` ```bash sudo nano /etc/samba/smb.conf ``` 2. 滚动到文件末尾,添加以下内容: ``` [myshare] comment = My Shared Folder browseable = yes path = /home/q/share create mask = 0777 directory mask = 0777 valid users = q force user = q force group = q public = no guest ok = no writable = yes available = yes ``` > 💡 **`[myshare]`**——Windows 客户端访问时看到的共享名称。**`path`**——共享目录的实际路径。**`create mask / directory mask`**——新建文件/文件夹的默认权限。**`valid users`**——允许访问 Samba 服务器的合法用户,此处示例用户为 `q`,实际使用时请替换为开发板上的真实用户。**`writable = yes`**——允许客户端在此目录中创建、修改和删除文件。 > 💡 **M1** 中 `public = yes`;**L1** 中 `public = no` 且 `guest ok = no`。请根据实际需求选择。若需允许匿名访问,可使用 `public = yes`(M1 方式);若需禁止匿名/访客访问,建议保留 `public = no, guest ok = no`(L1 方式)。 # 设置 Samba 用户和密码 Samba 的登录用户需要单独设置密码。以系统用户 `q` 为例: ```bash sudo smbpasswd -a q ``` 需输入两次密码确认(此密码将在 Windows 访问时使用)。 > 💡 若使用 `root` 作为 Samba 登录用户(L1 默认场景),可将上述命令替换为:`sudo smbpasswd -a root` 。 # 重启 Samba 服务使配置生效 ```bash sudo systemctl restart smbd ``` 设置 Samba 开机自动启动: ```bash sudo systemctl enable smbd ``` # 添加防火墙规则 ```bash #添加放行端口 sudo iptables -A INPUT -p tcp -m tcp --dport 445 -j ACCEPT sudo iptables -A INPUT -p tcp -m tcp --dport 139 -j ACCEPT #设置客户端IP允许通过防火墙 sudo iptables -A INPUT -p icmp --icmp-type echo-request -s 192.xx.xx.xx -j ACCEPT #保存规则 sudo sh -c 'iptables-save > /etc/iptables/rules.v4' ``` # 查看设备 IP 地址 ```bash hostname -I ``` 实际使用时,请以开发板当前查询到的 IP 地址为准。 # 在设备上访问 Windows 共享文件夹 除在 Windows 电脑上访问设备的共享目录外,也可以反向从设备访问 Windows 电脑上已共享的文件夹。 ## Windows 端创建共享目录 1. 在 Windows 电脑上新建一个用于共享的文件夹,例如: ``` device_share ``` 2. 右键该文件夹,选择"**属性**" → "**共享**" → "**高级共享**"。 3. 勾选"**共享此文件夹**",共享名设置为: - **L1 设备**:建议为 `l1_share` - **M1 设备**:建议为 `m1_share` ``` m1_share (M1) l1_share (L1) ``` 4. 点击"**权限**",为需要访问该共享目录的 Windows 用户添加读取或写入权限。 5. 切换到"**安全**"选项卡,确认该 Windows 用户在 NTFS 权限中也具备对应的读取或写入权限。 > 💡 Windows 共享权限和"安全"权限需要同时允许访问,否则设备侧可能能够看到共享名,但无法进入目录或创建文件。 ## Windows 端确认网络与防火墙 1. 确认 Windows 电脑与设备在同一可达网络内。本文实测 Windows 主机 IP 为 `10.66.84.17`(M1 环境示例)。 2. 在 Windows 的"高级共享设置"中开启: - 网络发现 - 文件和打印机共享 3. 确认 Windows 防火墙允许"文件和打印机共享(SMB-In)"。 ## 设备端检查连通性 在设备终端中执行以下命令,确认能访问 Windows 主机的 SMB 服务端口(请将 `` 替换为实际 IP,M1 实测为 10.66.84.17): ```bash # 查看设备当前IP地址 hostname -I # 测试Windows主机网络连通性 ping -c 3 # 测试SMB端口连通性 timeout 3 bash -c 'cat < /dev/null > /dev/tcp//445' && echo 445_open || echo 445_failed timeout 3 bash -c 'cat < /dev/null > /dev/tcp//139' && echo 139_open || echo 139_failed ``` 若输出 `445_open` 或 `139_open`,表示设备到 Windows SMB 服务端口可达。 ## 设备端使用命令行访问 使用 `smbclient` 查看 Windows 主机上的共享列表: ```bash smbclient -L // -U 'DOMAIN\username' ``` 示例(以 M1 实测 Windows IP 10.66.84.17 为例): ```bash smbclient -L //10.66.84.17 -U 'QUECTEL\username' ``` 按提示输入该 Windows 用户的登录密码。若认证成功,可在输出中看到共享目录名称,例如: ``` m1_share Disk ``` 访问指定共享目录并列出文件: ```bash smbclient ///<共享名> -U 'DOMAIN\username' -c 'ls' ``` 示例(以 M1 为例): ```bash smbclient //10.66.84.17/m1_share -U 'QUECTEL\username' -c 'ls' ``` 本文实测设备可正常列出 Windows 主机共享列表,并可进入对应共享目录。 ## 设备端使用图形界面访问(M1 专属) > 💡 此方式适用于 M1 GNOME 图形环境。L1 Weston 环境下请使用命令行方式访问。 Quectel Pi M1 Debian 图形环境中可通过文件管理器访问 Windows 共享目录。在文件管理器地址栏输入: ``` smb://10.66.84.17/m1_share ``` 随后按界面提示输入 Windows 用户名、域或工作组、密码即可访问共享目录。 ## Windows 电脑访问设备共享文件夹 1. 按下"**Win+R**"打开运行窗口。 2. 输入设备的共享访问路径,例如: ``` \\<开发板IP>\myshare \\10.66.84.182\myshare ``` 3. 输入用户名和密码,即可看到共享文件夹的内容。 - 用户名:Samba 配置中 `valid users` 指定的用户(M1 为 `q`) - 密码:执行 `smbpasswd -a <用户名>` 时设置的密码 4. 访问成功后,即可看到之前创建的测试文件 `test.txt`。