SMB(Server Message Block)通信协议是微软和英特尔在 1987 年制定的协议,主要是作为 Microsoft 网络的通讯协议。后来,著名大牛 Andrew Tridgwell 基于 SMB 协议开发( 实际是逆向 )能够解决 linux 系统和 windows 系统之间的文件的问题--也就是 SMB Server 服务测序。后来被命名为 samba。samba 可以在几乎所有的类 unix 平台上运行,linux samba 服务( linux samba service )打通了windows和linux之间的文件共享访问,极大方便了用户。家用 nas 、机顶盒等设备基本都是 linux 系统,本文以 armbian 为基础平台,但相应的方法也适用于 linux samba service 配置。同时,synology 等家用成品 nas 也同样是 linux 系统,synology samba share 配置出现问题,与其困在原地,不如回溯至linux,从 linux 层面通过系统命令和配置文件来解决 synology samba share 问题。
在任何 linux 平台上部署 samba 基本都是一样的,高级 SMB 协议不需要关注底层细节和平台架构,如前文所述 samba 是一组软件包,是 SMB/CIFS(Server Message Block / Common Internet File System)的协议实现。SMB 的优点包括兼容性好、提供端到端加密、安全性高、支持 ACL、支持多种认证模式,而这些优点在使用 samba 时都会得到充分体现。SMB 是典型的C/S结构,我们要安装、配置的 samba 是服务端实现,本文介绍在 armbian 上部署、配置 samba 服务以实现远程访问 armbian 所连接、挂载的存储设备的方法。
背景与条件
移动硬盘或U盘等便携式存储设备,是没有必要配置 samba 服务的。老E老旧、仅有USB接口的4盘位硬盘柜,移动不便,切换连接至 armbian 盒子后,还是有以下需求需要通过 windows 访问:
- Jellyfin 刮削拉跨,tmm(tinymediamanager)等工具在 armbian 上工作不佳并且不需要长期运行
- Armbian 盒子只适合串流,解码、转码尚无硬件驱动支持
- 通过 transmission 等 bt 工具下载的资源往往都需要进行适当整理,比如规范命名等
本文示例涉及的平台、设备、相关工具均已配置完成,包括armbian设备(m401a)连接4盘位硬盘柜并挂载了所有硬盘、示例硬盘的挂载点为/media/sda1等,相关内容本文不重复记录分享,对应博文分别为:
Samba服务的安装
建议使用ophub armbian自带的 armbian-config 脚本安装 samba 服务。
armbian-config
运行脚本后,伪GUI界面首页中选择第四项『Software』。
这样在接下来的界面中,第一项就是『Samba』(Windows compatible file sharing)。空格键复选上,Tab键将焦点移动至『Install』,回车安装。
安装过程中,会要求分别输入samba用户名、密码。当然,我们可以『Cancel』,在安装后再手动创建samba账户,只是需要多敲一个命令。
可以使用 useradd 添加系统用户后使用 smbpasswd 设置用户的密码并添加进 samba 服务配置文件,当设置密码的用户不存在时,系统会提示“Failed to add entry for user”。安装过程及安装后创建的用户,都可以通过 pdbedit 命令进行查看。
如果使用的不是自带 armbian-config 脚本的其他非官方版本armbian,或者ubuntu/debian,也可以通过以下命令安装 samba。
apt install samba -y
安装完成后,一般情况下系统会自动启动 samba 服务,需要在配置后才能进行访问。
Samba 服务的配置
Samba 服务的主配置文件为 /etc/samba/smb.conf ,需要修改配置文件以正确设置smb服务、共享目录和文件。
cd /etc/samba nano smb.conf
以下是一个简单的示例配置文件,可以直接使用。
[global] workgroup = smbgroup security = user server string = %h server hosts allow = 192.168.1. syslog = 0 getwd cache = yes aio read size = 0 min protocol = SMB3 [Disk1] comment = Shared files path = /media/sda1 browsable = yes writable = yes read only = no guest ok = no create mask = 0755 directory mask = 0755
[global] 指定了全局变量,重点配置项包括 security、vliad users、host allow、host deny、min protocol 等,其中:
- security 可选参数依照安全性由低到高分别为 share、user、server、domain、ads,share 参数允许客户端匿名登录、不需要输入用户名和密码就可以浏览Samba服务器的资源
- valid users、host allow、host deny 等均为访问控制选项,可以使用 vliad users 实现用户访问控制,也可以使用 hosts allow 和 hosts deny 实现该访问控制,分别设置允许和禁止访问的客户端(IP地址段)
- min protocol 指定了客户端连接时接受的最低协议版本,早期 SMB 协议速度慢、不稳定的问题可以通过使用更高版本的协议加以解决
在全局配置中,可以指定 security 选项为 share 来允许客户端匿名访问,但即使指定了secirity 为 user ,也可以搭配全局的 guest ok 选项来实现。
security = user map to guest = bad user guest ok = yes
示例配置文件中 [Disk1] 就是每一个共享目录,半角方括号中的Disk1就是客户端访问时显示的名称,其中设置了正确的共享路径(path = /media/sda1)。这里的配置客户端必须输入正确的用户名、密码才能登录访问,并且在登录后的文件和文件夹操作权限为 755。主配置文件修改保存后,使用如下命令重启samba服务。
systemctl restart smb nmb
之后在客户端就可以使用用户名、密码登录,访问 samba 服务器上的共享文件了。
Windows下访问 samba 服务
Windows下可以如上文在文件浏览器中输入 \\ip 访问 samba 服务,这种方式等同于使用 win+r 快捷键然后输入 \\ip。
当然,我们还可以直接映射为 windows 下的固定盘符。在『此电脑』处,点击上方菜单(或工具图标)的三个点,选择『映射网络驱动器』。
在弹出的对话框中输入共享的网络路径就可以映射为固定的本地磁盘了。
相比NFS(Network File System)Samba 应用更为广泛,支持端到端加密、身份验证等特性,使得其具有更高的安全性。拥有多分支机构的组织,会优先选择通过 AD 对 SMB 进行统一管理,用户登录、使用组织内的共享资源,无需考虑本地资料的存储和安全问题。这方面的典型体现就是无需对本地磁盘进行分区,登录域后按照下发的策略远程挂载使用,可以极大提高效率。
文章评论