Samba 是 Linux/Unix 系统与 Windows 系统之间实现文件共享、打印机共享和域控制的标准解决方案。它支持 Active Directory、域控制等企业级功能。
# 更新软件包列表
sudo apt update
# 安装Samba服务器
sudo apt install samba
# 安装Samba客户端工具
sudo apt install samba-client smbclient cifs-utils
# CentOS/RHEL 7/8
sudo yum install samba samba-client
# Fedora
sudo dnf install samba samba-client
# 启动Samba服务
sudo systemctl start smb
sudo systemctl start nmb
# 设置开机启动
sudo systemctl enable smb
sudo systemctl enable nmb
| 组件/命令 | 功能说明 |
|---|---|
smbd |
Samba 守护进程,处理文件和打印服务请求 |
nmbd |
NetBIOS 名称服务器,处理名称解析和浏览 |
smbclient |
SMB 客户端,类似 FTP 客户端,用于访问共享 |
testparm |
检查 smb.conf 配置文件的语法错误 |
smbstatus |
查看当前 Samba 连接状态 |
pdbedit |
Samba 用户数据库管理工具 |
net |
管理 Samba 域和用户(类似 Windows net 命令) |
mount.cifs |
挂载 Windows/Samba 共享到本地目录 |
Samba 的主要配置文件是 /etc/samba/smb.conf,包含全局设置和共享定义。
# 全局设置部分
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = SERVER01
security = user
map to guest = Bad User
dns proxy = no
# 共享定义部分
[共享名称]
comment = 共享描述
path = /path/to/shared/directory
browseable = yes
writable = yes
valid users = @groupname, username
read only = no
create mask = 0755
directory mask = 0755
| 参数 | 说明 | 示例值 |
|---|---|---|
workgroup |
工作组名称 | WORKGROUP |
server string |
服务器描述 | Samba Server 4.9.1 |
security |
安全模式 | user, share, domain, ads |
passdb backend |
密码数据库后端 | tdbsam |
map to guest |
访客映射 | Bad User, Never, Bad Password |
log file |
日志文件路径 | /var/log/samba/log.%m |
max log size |
最大日志大小 | 5000 |
# 添加Samba用户(必须先有系统用户)
sudo useradd smbuser
sudo smbpasswd -a smbuser
# 查看Samba用户列表
sudo pdbedit -L
# 删除Samba用户
sudo smbpasswd -x smbuser
# 禁用/启用Samba用户
sudo smbpasswd -d smbuser # 禁用
sudo smbpasswd -e smbuser # 启用
# 检查配置文件语法
sudo testparm
# 重新加载Samba配置(不中断现有连接)
sudo smbcontrol all reload-config
# 查看Samba服务状态
sudo systemctl status smb
sudo systemctl status nmb
# 重启Samba服务
sudo systemctl restart smb nmb
# 查看当前Samba连接状态
sudo smbstatus
# 查看详细连接信息
sudo smbstatus -v
# 查看特定用户的连接
sudo smbstatus -u username
# 查看共享列表
sudo smbclient -L localhost -U%
# 测试从Windows客户端访问
sudo smbclient //192.168.1.100/sharename -U username
# 连接到远程Samba共享
smbclient //server/sharename -U username
# 在smbclient中的常用命令
# ls - 列出文件
# get file - 下载文件
# put file - 上传文件
# mkdir dir - 创建目录
# rm file - 删除文件
# exit - 退出
# 挂载Samba共享到本地目录
sudo mount -t cifs //server/sharename /mnt/share -o username=user,password=pass
# 使用凭证文件挂载
sudo mount -t cifs //server/sharename /mnt/share -o credentials=/etc/samba/credentials
[public]
comment = Public Read-Only Share
path = /samba/public
browseable = yes
writable = no
guest ok = yes
read only = yes
create mask = 0755
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mask = 0700
directory mask = 0700
[group_share]
comment = Group Shared Directory
path = /samba/group_share
browseable = yes
writable = yes
valid users = @developers
create mask = 0775
directory mask = 0775
force group = developers
排查步骤:
# 1. 检查Samba服务是否运行
sudo systemctl status smb nmb
# 2. 检查防火墙设置
sudo firewall-cmd --list-all # CentOS/RHEL
sudo ufw status # Ubuntu
# 3. 检查SELinux状态(如有)
getenforce
sudo setenforce 0 # 临时关闭测试
# 4. 检查配置文件语法
sudo testparm -v
# 5. 查看Samba日志
sudo tail -f /var/log/samba/log.smbd
排查步骤:
# 1. 检查用户是否存在
sudo pdbedit -L
# 2. 重置用户密码
sudo smbpasswd username
# 3. 检查用户是否有访问共享的权限
# 检查smb.conf中的valid users设置
# 4. 检查系统用户和Samba用户的对应关系
id username
sudo pdbedit -Lv username
# 5. 测试本地认证
smbclient //localhost/sharename -U username
排查步骤:
# 1. 检查共享目录权限
ls -ld /path/to/share
ls -l /path/to/share
# 2. 检查Samba配置中的writable设置
# 确保共享设置为 writable = yes 或 read only = no
# 3. 检查创建掩码
# create mask 和 directory mask 设置
# 4. 检查SELinux上下文
ls -Z /path/to/share
sudo chcon -t samba_share_t /path/to/share -R
# 5. 检查force user/force group设置
valid users 限制访问hosts allow/deny[global]
workgroup = EXAMPLE
realm = EXAMPLE.COM
server role = active directory domain controller
dns forwarder = 8.8.8.8
idmap_ldb:use rfc2307 = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = yes
printable = yes
guest ok = yes
read only = yes
create mask = 0700
smbclientSMB 客户端
mount.cifs挂载共享
nmblookupNetBIOS 查询
findsmb发现 SMB 主机