现代化局域网文件共享软件之samba4

局域网文件共享基本属于必需品了,在这里就介绍如何在 OpenWrt 系统中安装对应的软件来实现这个功能。

Samba 官方网站:https://www.samba.org/

Samba 开源项目:https://github.com/samba-team/samba

准备工作

  1. 确认路由器系统有足够的剩余空间,至少 9MB。
  2. 路由器连接了可用的存储设备,建议使用 EXT4 格式的硬盘。(路由器格式化硬盘教程
  3. 路由器已正常联网。

开始操作

1. 安装 samba4,软件界面名称:luci-i18n-samba4-zh-cn

2. 打开“NAS”-“网络共享-samba4”

3. 按需配置软件,创建需要的共享目录,即可开始使用。

界面配置项说明

  • 常用的配置选项需要注意的是“接口”,只有已勾选的接口才能访问到 samba 共享目录。
  • “允许旧协议”则适合某些不支持最新 smb 协议的客户端,以允许其访问共享目录。
  • 如果不希望被局域网内的客户端扫描到共享目录,则应当勾选 “禁用 Netbios” 选项。

示例:将路由器本地目录 /mnt/sdb/test 共享为 Video 目录,且允许所有人匿名只读访问。
Windows 访问示例:\\192.168.9.1\Video

共享目录配置项说明

序号说明
1共享目录的名称,此名称按需自定义,这是让客户端看到的名称。
2要共享目录的本地路径,可通过的“系统”-“文件助手”查找目录。
3允许客户端看到共享目录名称,如果不勾选,则必须输入完整路径才能访问。
4勾选后则完全只读,任何账户都无法进行写操作。
5勾选后则强制将所有访问用户映射为 root 权限,即允许匿名用户进行写入操作。
6此处输入操作系统(OpenWrt)内的用户名称,表示只允许这个用户访问。
7允许匿名访问 samba 共享。
8将访问权限映射为来宾用户,即默认的 nobody 用户。
9子目录的权限继承自父目录。
10客户端创建文件时的权限掩码。
11客户端创建目录时的权限掩码。
12与苹果系统访问有关,加载所需的 VFS 模块。
13允许苹果系统的“时间机器”访问。
14“时间机器”占用空间的上限。

共享目录配置示例

初次使用的用户可能不知道 “共享目录” 的路径怎么填,首先你需要确认已经挂载好了硬盘,

打开“系统”-“挂载点”查看硬盘当前挂载路径,如果自动挂载成功,则可以在 “已挂载的文件系统” 中看到相关信息。

例如:硬盘挂载点为 /mnt/sdb ,如果想直接共享整个硬盘,则在 samba 共享目录中填入 /mnt/sdb 即可。

如果想翻找子目录,可以打开“系统”-“文件助手”翻阅系统目录,一般硬盘都会自动挂载至 /mnt 目录下。

例如:想共享硬盘内的 qBittorrent 目录,则在 samba 共享目录中填入 /mnt/sdb/qBittorrent 即可。

samba 用户管理(密码保护共享)

有时会需用启用 samba 的用户管理功能,以将共享目录限制为特定用户才能访问。

  • samba 不能直接使用操作系统的用户名和密码,需要为操作系统内已有的用户配置专用的 samba 访问密码。
  • samba 配置文件默认禁止 root 用户登录,一般也不建议启用 root 用户访问共享目录。

示例:为 ftp 用户添加 samba 专用密码,然后将共享目录 /mnt/sdb/test 限制为仅允许 ftp 用户访问。

# 为 FTP 用户创建 samba 专用密码,根据提示输入两遍密码,然后就可以凭此密码访问共享目录。
smbpasswd -a ftp

# 访问此共享目录时提示输入用户名密码,用户名:ftp   密码:已设置的 samba 专用密码。

# 如果要禁用此用户访问共享目录,删除 FTP 用户的 samba 专用密码即可。
smbpasswd -x ftp

# 如果要分配给 FTP 用户的目录权限不匹配,还应当修改目录权限,否则将导致无法进行写操作。
chown -R ftp:ftp /mnt/sdb/test

如果要让同一个共享目录允许多个用户访问,只需在 “允许用户” 选项填入多个用户名即可,用英文逗号分隔不同用户名。

添加自定义用户

有时可能想要自行创建自定义用户名,例如想创建一个用户名:xyz,首先需要创建操作系统用户,然后再为其添加 samba 专用密码即可。

# 安装 OpenWrt 下的用户添加工具。
opkg update
opkg install shadow-useradd
# 或安装全部支持组件,以支持各类用户管理命令。(与 Linux 系统相同)
opkg install shadow

# 执行添加用户命令。
useradd xyz

# 为用户添加 samba 专用密码,以允许登录 samba 共享目录。
smbpasswd -a xyz

# 为方便使用,可创建一个专用的存储目录,并修改目录权限。
# 示例
mkdir -p /mnt/sdb/mydir
chown xyz:xyz /mnt/sdb/mydir

# 或修改其它目录权限,递归修改目录权限,即目录下的子目录也一起修改权限。
chown -R xyz:xyz /mnt/sdb/test


# 如果需要禁用,可删除该用户。
# 先删除 samba 专用密码。
smbpasswd -x xyz

# 然后从操作系统中删除用户。
userdel xyz

CIFS 挂载共享目录

samba 提供了文件共享服务后,可以通过客户端访问共享或者挂载共享目录进行使用,Windows 下比较简单,添加为“映射网络驱动器”即可,如果想在 Linux 类系统下挂载共享目录进行使用,则需要使用 CIFS 挂载命令。

例如想在 OpenWrt 下挂载其它设备提供的 samba 共享目录。

# 安装 cifs 软件界面
opkg update
opkg install luci-i18n-cifs-zh-cn

按需配置所需参数即可,当前网页界面不太规范美观,但不影响使用。

使用命令行方式挂载网络共享目录

因为挂载命令只需要系统启动时执行一次即可,所以也可以直接使用命令行的方式挂载网络共享目录,利用 OpenWrt 的开机启动脚本可自动执行命令,打开“系统”-“启动项”-“本地启动脚本”按需添加即可,一行一条命令。

示例:将位于 192.168.9.1 的名为 net 的网络共享目录挂载至本地路径 /mnt/net ,使用 ftp 账号登录。

# 先确认本地路径是否可用,如果本地目录缺失,则应先创建。
mkdir -p /mnt/net

# 按需执行挂载命令。
mount -t cifs //192.168.9.1/net /mnt/net -o username=ftp,password=123456,domain=WORKGROUP,iocharset=utf8,rw,vers=3.1.1

# cifs 挂载命令格式:mount -t cifs 远程路径 本地路径 -o 附加参数
# 各个附加参数之间用英文逗号分隔。


# 如果想匿名挂载共享目录,则省略密码参数即可。
mount -t cifs //192.168.9.2/video /mnt/video -o username=guest,domain=WORKGROUP,iocharset=utf8,ro,vers=3.1.1

CIFS 挂载参数说明

参数用途
guest作为匿名用户访问。
username=name访问共享目录时使用的用户名。
password=123456用户名对应的 samba 专用密码。
domain=WORKGROUP设置工作组名称。
iocharset=utf8设置字符编码(单选)。常用编码:
utf8,cp437,cp936,cp850,iso8859-1
ro只读访问。
rw允许读写。
noperm禁用权限检查。
noacl禁用 POSIX ACL。
sfu兼容 Unix 服务。
directio禁用缓存。
file_mode=0777,dir_mode=0777设置写入文件和文件夹的权限掩码。
nounix禁用 Unix 扩展。
noserverino禁用服务器 inode 编号。
vers=3.1.1明确指定使用的 SMB 协议版本号。
常用版本号:3.1.1,2.1,1.0

Windows 10 访问匿名共享目录

默认情况下,Windows 10 操作系统无法访问匿名共享目录,会提示错误代码:0x80004005

解决方法:打开 “本地组策略编辑器”-“计算机配置”-“管理模板”-“网络”-“Lanman 工作站”-“启用不安全的来宾登录”-已启用。

Windows 10 家庭版访问匿名共享目录

Windows 10 家庭版无法使用“组策略编辑器”,如要启用访问匿名共享目录,需要添加注册表键值“DWORD (32 位) 值”。

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters
"AllowInsecureGuestAuth"=dword:00000001