修复Samba
前言
本文是对 飞牛smb和备份服务异常的技术性分析和修复,和这篇 【修复】[docker]及[smb]&[备份]异常的修复指南 文章有异曲同工之处,均可参考。本文更偏向于技术分析和修复,更适合开发者参考。 
原文地址: https://gitee.com/kuma_fixfnos/fix-samba
本文提供的资源都在 原文地址 里,请 【克隆/下载】=> 【下载zip】。一切更新以上面的 原文地址 为准。
需要权限为root,请SSH登录飞牛并切换为root。
提供的脚本代码清晰,修复所需的额外下载资源来源可靠,这些均可自行审#查。
本文的一切操作,都是本人亲自实践检验可行的,如果你使用了还是无法解决问题,那可能是你所遇到的情况超出本文的范围了,请回复反馈。
另外有 【修复 飞牛 NTFS 驱动】,这个不再单独发帖了,基本上是安装应用商店的ntfs驱动。但作者的这个只采用了默认的apt源,导致国内下载缓慢,安装缓慢容易失败。我的方案是魔改这个应用,希望作者能更新。
简介
修复飞牛smb服务。
问题列表
1、smb启动失败
飞牛系统更新后,smb无法启动,经排查,journalctl -xeu smbd.service 包含如下
smbd.service: Failed at step EXEC spawning /usr/sbin/smbd: No such file or directory
可以确定,是包损坏或未安装,需要重新安装相关包。
重装时,建议备份Samba相关数据。详见 install_samba.sh。
要下载哪些包,详见 download_samba.sh。
2、smb修复后,客户端访问异常
smb修复后,能启动,但客户端变为无法访问,之前是能正常访问的,现在修改密码也无法访问。
客户端输入用户名密码后,显示 网络名不存在等等。
飞牛中日志表现为,大量类似
pam_unix(samba:session): session closed for user admin
经排查,/var/log/samba/log.<ClientHostName> 中 包含如下
/usr/lib/x86_64-linux-gnu/samba/vfs/trim_perms.so: cannot open shared object file: No such file or directory
此文件不存在。可从iso中提取,位于 <ISO挂载盘符>:\trimfs.tgz\trimfs.tar\usr\lib\x86_64-linux-gnu\samba\vfs\trim_perms.so,放置到指定路径后,客户端可正常访问smb资源。
3、飞牛备份服务异常
飞牛备份服务异常,表现为 加载失败...。
飞牛备份服务用到的是smb客户端(libsmbclient),可重装此包来解决问题。
下载地址: ftp.cn.debian.org (Ctrl+F: libsmbclient)
mkdir -p /tmp/libsmbclient_u3_amd64
curl -L -o /tmp/libsmbclient_u3_amd64/libsmbclient_4.17.12+dfsg-0+deb12u3_amd64.deb \
http://ftp.cn.debian.org/debian/pool/main/s/samba/libsmbclient_4.17.12+dfsg-0+deb12u3_amd64.deb
cd /tmp/libsmbclient_u3_amd64 && dpkg -i --force-depends *.deb
# 或如下u2版本
mkdir -p /tmp/libsmbclient_u2_amd64
curl -L -o /tmp/libsmbclient_u2_amd64/libsmbclient_4.17.12+dfsg-0+deb12u2_amd64.deb \
http://ftp.cn.debian.org/debian/pool/main/s/samba/libsmbclient_4.17.12+dfsg-0+deb12u2_amd64.deb
cd /tmp/libsmbclient_u3_amd64 && dpkg -i --force-depends *.deb
下载符合自己硬件的包,安装即可。
dpkg -i --force-depends libsmbclient_4.17.12+dfsg-0+deb12u3_amd64.deb
详见 download_samba.sh 和 install_samba.sh。
4、优化smb配置(可选)
smb.conf中,默认是包含如下配置
include = /etc/samba/users/%Y.share.conf
%Y,年份。但实际路径下是用户ID(UID),如 1000.share.conf。这将导致 include无法加载到需要的文件,表现为网络共享中看不到任何共享的文件资源。
1000.share.conf 此类配置文件,在飞牛客户端中的配置路径为
文件共享协议 -> SMB -> 可见文件夹范围(我的文件、他人共享)
目前测试,仅 我的文件、他人共享的配置数据保存在此,其它配置数据保存位置不清楚。
Samba中也没有提供直接的UID变量,可修改为 %U,然后根据 1000.share.conf这样的数字UID来创建对应用户名的软链接。
即,/etc/samba/users/用户名.share.conf -> /etc/samba/users/UID.share.conf。
因为当前,飞牛官方仍是采用UID来命名文件的。详见 create_samba_share_links.sh,update_samba_smbConf.sh
经测试,%U 实际值为小写,符合系统用户名。可能是Samba当前版本bug吧,暂时采用大写U。
Samba常用变量分类
- 用户和连接相关变量
%U - 当前连接用户的用户名(大写)
%u - 当前连接用户的用户名(小写)
%G - 当前连接用户的主组名
%g - 当前连接用户的主组名(小写)
%H - 用户的home目录
%m - 客户端NetBIOS名称
%M - 客户端DNS名称
%I - 客户端IP地址
%a - 客户端架构(如Samba、Windows等)
- 服务器相关变量
%h - 服务器主机名
%L - 服务器NetBIOS名称
%N - NIS服务器名
%v - Samba版本
- 时间和日期变量
%T - 当前日期和时间
%d - 当前日期
%t - 当前时间
%D - 当前域
%w - 当前周
- 共享和文件相关变量
%P - 当前共享的根目录
%p - 当前共享的根目录(小写)
%S - 当前共享名
%s - 当前共享名(小写)
资源
当前提供的脚本等资源有:
init.sh : 初始化。主要是给其它脚本添加执行权限。
download_samba.sh : 下载Samba相关安装包(Deb)。
install_samba.sh : 安装Samba包(Deb)。
create_samba_share_links.sh : 为Samba用户配置文件创建软链接。
update_samba_smbConf.sh : 更新smb.conf。
trim_perms\trim_perms.so : 补丁资源,提取自ISO。
使用
init.sh : 初始化。主要是给其它脚本添加执行权限。
# 给脚本添加执行权限: chmod +x init.sh
# 运行脚本: ./init.sh
download_samba.sh : 下载Samba相关安装包(Deb)。
# 功能: 下载Samba相关包
# 给脚本添加执行权限:chmod +x download_samba.sh
# 运行脚本:./download_samba.sh [arg1,2,3,4]
# arg1, 版本(4.17.12...)
# arg2, 架构(amd64|i386|arm64|mips64el|ppc64el|s390x)
# arg3, 标签(deb12u3|deb12u2)
# arg4, URL(http://ftp.cn.debian.org)
下载包有,类似如下
samba_4.17.12+dfsg-0+deb12u3_amd64.deb
samba-common_4.17.12+dfsg-0+deb12u3_all.deb
samba-common-bin_4.17.12+dfsg-0+deb12u3_amd64.deb
samba-dsdb-modules_4.17.12+dfsg-0+deb12u3_amd64.deb
samba-libs_4.17.12+dfsg-0+deb12u3_amd64.deb
samba-vfs-modules_4.17.12+dfsg-0+deb12u3_amd64.deb
libsmbclient_4.17.12+dfsg-0+deb12u3_amd64.deb
默认从 ftp.cn.debian.org 下载,并打包到当前脚本下。
Samba包
samb - Samba主包,包含smbd服务守护进程
samba-common-bi - Samba通用二进制文件,包含smbd、nmbd等核心服务
samba-commo - Samba通用配置文件和脚本
samba-lib - Samba库文件,提供基础库支持
samba-vfs-module - 虚拟文件系统模块,提供额外的VFS功能
samba-dsdb-module - 目录服务数据库模块,用于域控制器功能
install_samba.sh : 安装Samba包(Deb)。
# 功能: 安装Samba相关包
# 给脚本添加执行权限:chmod +x install_samba.sh
# 运行脚本:./install_samba.sh [arg1,2]
# arg1, 版本(4.17.12...)
# arg2, 架构(amd64|i386|arm64|mips64el|ppc64el|s390x)
# arg3, 标签(deb12u3|deb12u2)
根据 download_samba.sh 脚本打包的文件,进行安装。当前脚本目录下需要存在相应的tar文件。
请根据自己的硬件安装对应的包。
该脚本将备份/etc/samba/目录,备份/var/lib/samba目录。
Samba安装成功后,首次启动测试,启动成功后才进行配置恢复,然后重启服务,并清理备份的相关资源,部分资源保留,供用户选择是否清理。
create_samba_share_links.sh : 为Samba用户配置文件创建软链接。
# 功能: 为Samba用户配置文件创建软链接
# 给脚本添加执行权限: chmod +x create_samba_share_links.sh
# 运行脚本: ./create_samba_share_links.sh
查找所有 /etc/samba/users/*.share.conf文件并创建软链接,可在新建用户后再次运行,以便为新用户创建相关文件。
update_samba_smbConf.sh : 更新smb.conf。
# 功能: 更新smb.conf
# 给脚本添加执行权限: chmod +x update_samba_smbConf.sh
# 运行脚本: ./update_samba_smbConf.sh
该脚本只需运行1次。主要用于修改smb.conf中的include语句,使用sed替换%Y为%U。
trim_perms\trim_perms.so : 补丁资源,提取自ISO。
此补丁在 install_samba.sh 中会自动检测并安装,如果系统中不存在的话。
目前只检测 "/usr/lib/x86_64-linux-gnu/samba/vfs/" ,其它硬件可能不适用,将不会被安装。