smbd(Samba Daemon)是 Samba 套件的主要守护进程,它监听 SMB/CIFS 客户端请求,提供文件和打印机共享服务。smbd 处理用户认证、文件访问控制和数据传输等核心功能。
# 安装Samba服务器
sudo apt install samba
# 安装Samba客户端工具
sudo apt install samba-client cifs-utils
# 查看smbd版本
smbd --version
# CentOS/RHEL 7/8
sudo yum install samba
# Fedora
sudo dnf install samba
# 启动smbd服务
sudo systemctl start smb
sudo systemctl start nmb
# 设置开机启动
sudo systemctl enable smb
sudo systemctl enable nmb
# 基本语法
smbd [选项]
# 前台运行(调试)
smbd -F
# 指定配置文件
smbd -s /path/to/smb.conf
# 测试配置
smbd -t
注意: smbd 通常作为系统服务运行,但也可以手动启动用于调试或测试。
| 选项 | 说明 |
|---|---|
-D 或 --daemon |
以守护进程方式运行(默认) |
-F 或 --foreground |
前台运行(用于调试) |
-i 或 --interactive |
交互模式 |
-s 文件 |
指定配置文件(默认 /etc/samba/smb.conf) |
-t 或 --test-config |
测试配置文件语法 |
-V 或 --version |
显示版本信息 |
-d 级别 |
设置调试级别(0-10,默认0) |
-l 文件 |
指定日志文件 |
-P |
作为打印服务器运行 |
-p 端口 |
指定监听端口(默认 445) |
-a |
追加日志文件(不覆盖) |
-S |
标准输入模式(从标准输入读取配置) |
-h 或 --help |
显示帮助信息 |
# 在前台运行smbd,便于查看调试信息
sudo smbd -F
# 前台运行并指定配置文件
sudo smbd -F -s /etc/samba/smb.conf
# 前台运行并设置调试级别
sudo smbd -F -d 3
# 测试默认配置文件
sudo smbd -t
# 测试指定配置文件
sudo smbd -t -s /etc/samba/smb.conf.custom
# 测试配置并显示详细信息
sudo smbd -t -d 2
# 设置调试级别为5(详细)
sudo smbd -F -d 5
# 调试特定组件
sudo smbd -F -d 5 --debug-stdout
# 将调试信息输出到文件
sudo smbd -F -d 3 -l /var/log/samba/smbd.debug.log
# 在非标准端口运行
sudo smbd -F -p 8445
# 同时监听多个端口
# 需要在配置文件中配置
[global]
smb ports = 445 8445
# 或通过多个smbd实例实现
# 专门作为打印服务器运行
sudo smbd -P -F
# 打印服务器配置示例
[global]
load printers = yes
printing = cups
printcap name = cups
[printers]
comment = All Printers
path = /var/spool/samba
printable = yes
guest ok = yes
read only = yes
create mask = 0700
# 启动服务
sudo systemctl start smb
sudo systemctl start smbd # 某些系统
# 停止服务
sudo systemctl stop smb
# 重启服务
sudo systemctl restart smb
# 重新加载配置
sudo systemctl reload smb
# 或
sudo smbcontrol smbd reload-config
# 查看服务状态
sudo systemctl status smb
# 查看进程状态
ps aux | grep smbd
sudo pstree -p | grep smbd
# 查看监听端口
sudo netstat -tlnp | grep smbd
sudo ss -tlnp | grep smbd
# 启用开机启动
sudo systemctl enable smb
# 禁用开机启动
sudo systemctl disable smb
# 查看服务配置文件
sudo systemctl cat smb
# 编辑服务配置
sudo systemctl edit smb --full
[global]
# 网络设置
workgroup = WORKGROUP
server string = Samba Server
netbios name = SERVER01
# 安全设置
security = user
passdb backend = tdbsam
map to guest = Bad User
# 日志设置
log file = /var/log/samba/log.%m
max log size = 5000
# 性能优化
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
deadtime = 15
# 共享定义
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
[shared]
comment = Shared Directory
path = /srv/samba/shared
writable = yes
browsable = yes
guest ok = no
valid users = @smbusers
[global]
# 提高性能的配置
read raw = yes
write raw = yes
socket options = TCP_NODELAY IPTOS_LOWDELAY
# 大文件传输优化
min receivefile size = 16384
use sendfile = yes
# 连接优化
max connections = 0
max smbd processes = 1000
# 内存优化
large readwrite = yes
getwd cache = yes
[global]
# 访问控制
hosts allow = 192.168.1.0/24 10.0.0.0/8
hosts deny = 0.0.0.0/0
# 协议限制
server min protocol = SMB2_02
client min protocol = SMB2_02
server max protocol = SMB3
# 加密设置
smb encrypt = required
client ipc max protocol = SMB3
# 审计日志
log level = 1 auth:3
vfs objects = full_audit
full_audit:prefix = %u|%I|%m|%S
full_audit:success = connect disconnect mkdir rmdir
full_audit:failure = connect disconnect
可能原因: 配置错误或端口被占用
排查步骤:
# 1. 检查配置文件语法
sudo testparm
sudo smbd -t
# 2. 检查端口占用
sudo netstat -tlnp | grep :445
sudo netstat -tlnp | grep :139
# 3. 查看系统日志
sudo journalctl -u smb
sudo tail -f /var/log/samba/log.smbd
# 4. 前台运行查看错误
sudo smbd -F
# 5. 检查SELinux设置
getenforce
sudo setenforce 0 # 临时关闭测试
sudo ausearch -m avc -ts recent # 查看SELinux拒绝记录
可能原因: 用户不存在或密码错误
排查步骤:
# 1. 检查用户是否存在
sudo pdbedit -L
sudo pdbedit -Lv username
# 2. 重置用户密码
sudo smbpasswd username
# 3. 检查用户数据库
sudo tdbtool /var/lib/samba/private/passdb.tdb dump
# 4. 启用详细认证日志
# 在smb.conf中添加:
# log level = 3 auth:5
# 5. 测试本地认证
smbclient //localhost/sharename -U username
# 6. 检查PAM配置
sudo pam-auth-update
cat /etc/pam.d/samba
可能原因: 配置不当或资源不足
排查步骤:
# 1. 查看连接状态
sudo smbstatus
sudo smbstatus -v
# 2. 监控系统资源
top -p $(pgrep smbd)
htop -u smbd
# 3. 检查磁盘性能
iostat -x 1
iotop
# 4. 网络性能测试
iperf3 -c client_ip
ethtool eth0
# 5. 调整性能参数
# 参考上面的性能优化配置
# 6. 启用性能监控
sudo bmon
sudo nethogs
# Samba主日志
/var/log/samba/log.smbd
/var/log/samba/log.nmbd
# 按客户端分类的日志
/var/log/samba/log.192.168.1.100
/var/log/samba/log.clientname
# 系统日志
/var/log/syslog # Debian/Ubuntu
/var/log/messages # RHEL/CentOS
# 查看实时日志
sudo tail -f /var/log/samba/log.smbd
sudo journalctl -f -u smb
# 查找错误信息
grep -i error /var/log/samba/log.smbd
grep -i fail /var/log/samba/log.smbd
# 查看认证日志
grep -i auth /var/log/samba/log.smbd
# 统计连接数
grep "session setup" /var/log/samba/log.smbd | wc -l
# 查看文件操作
grep -E "(open|close|read|write)" /var/log/samba/log.smbd
# 分析客户端访问
awk '/connect to service/{print $NF}' /var/log/samba/log.smbd | sort | uniq -c
# 查看当前连接
sudo smbstatus
# 详细状态信息
sudo smbstatus -v
# 按用户查看连接
sudo smbstatus -u username
# 按共享查看连接
sudo smbstatus -S sharedname
# 持续监控
watch -n 1 'sudo smbstatus | head -20'
# 查看Samba统计
sudo smbcontrol smbd stats
# 重置统计计数器
sudo smbcontrol smbd zero-stats
# 查看进程统计
pidstat -p $(pgrep smbd) 1 3
# 查看内存使用
pmap -x $(pgrep smbd) | head -20
# 查看打开的文件
lsof -p $(pgrep smbd) | head -20
# 安装CTDB
sudo apt install ctdb # Debian/Ubuntu
sudo yum install ctdb # RHEL/CentOS
# 配置CTDB
sudo nano /etc/ctdb/nodes
# 添加集群节点IP
# 启动CTDB服务
sudo systemctl start ctdb
sudo systemctl enable ctdb
# 查看CTDB状态
sudo ctdb status
sudo ctdb ip
nmbdNetBIOS名称服务
smbclientSMB客户端
testparm配置测试
smbcontrol服务控制
smbpasswd密码管理
pdbedit用户管理
net
域管理
smbtree网络浏览