1. 项目概述
两台Ubuntu主机之间的文件共享是日常开发和运维中的常见需求。相比传统的FTP或SCP方式,Samba协议提供了更接近Windows文件共享的体验,支持权限管理、断点续传等实用功能。本文将详细介绍如何在两台Ubuntu 20.04 LTS主机间建立稳定的Samba共享,包含从安装配置到排错的全流程。
实测环境:Ubuntu 20.04.4 LTS (内核5.13),适用于18.04及以上版本
2. 环境准备与安装
2.1 网络基础配置
首先确保两台主机位于同一局域网段,可以通过ip a命令查看网卡信息。建议为两台主机配置静态IP(以192.168.1.100和192.168.1.101为例):
# 编辑网络配置 sudo nano /etc/netplan/00-installer-config.yaml配置示例:
network: ethernets: enp3s0: addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] version: 2应用配置:
sudo netplan apply2.2 Samba服务安装
在两台主机上分别执行:
sudo apt update sudo apt install samba -y验证安装:
whereis smbd # 应返回/usr/sbin/smbd samba -V # 显示版本号(如4.13.17)3. 服务端配置详解
3.1 创建共享目录
建议使用独立分区或大容量存储设备:
sudo mkdir -p /srv/samba/share sudo chown -R nobody:nogroup /srv/samba/share sudo chmod -R 0775 /srv/samba/share关键参数说明:
- nobody:nogroup:Samba默认使用的低权限账户
- 0775:所有者完全权限,组用户读写执行,其他用户读执行
3.2 编辑Samba配置文件
备份原始配置:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak使用以下命令清空并重建配置:
sudo bash -c 'grep -v -E "^#|^;" /etc/samba/smb.conf.bak | grep -v "^$" > /etc/samba/smb.conf'添加共享配置:
sudo nano /etc/samba/smb.conf示例配置:
[global] workgroup = WORKGROUP server string = %h server (Samba, Ubuntu) log file = /var/log/samba/log.%m max log size = 1000 logging = file panic action = /usr/share/samba/panic-action %d server role = standalone server obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = yes [share] comment = Ubuntu File Share path = /srv/samba/share browsable = yes guest ok = yes read only = no create mask = 0775 directory mask = 0775 force user = nobody3.3 用户权限管理
如需密码访问(推荐):
sudo smbpasswd -a username # 添加Samba用户 sudo pdbedit -L # 查看用户列表4. 客户端连接配置
4.1 基础连接测试
安装客户端工具:
sudo apt install smbclient cifs-utils -y列出共享目录:
smbclient -L //192.168.1.100 -U username4.2 永久挂载配置
创建挂载点:
sudo mkdir -p /mnt/samba_share编辑/etc/fstab:
//192.168.1.100/share /mnt/samba_share cifs credentials=/etc/samba/credentials,uid=1000,gid=1000,file_mode=0775,dir_mode=0775 0 0创建凭证文件:
sudo nano /etc/samba/credentials内容格式:
username=your_username password=your_password设置权限:
sudo chmod 600 /etc/samba/credentials测试挂载:
sudo mount -a df -h | grep samba # 验证挂载5. 高级配置与优化
5.1 性能调优
在smb.conf的[global]段添加:
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536 min receivefile size = 16384 write cache size = 524288 getwd cache = yes5.2 多用户权限控制
按组设置权限:
[department] path = /srv/samba/dept valid users = @dept_group writable = yes create mask = 0770 directory mask = 07706. 故障排查指南
6.1 连接问题排查流程
基础网络检查:
ping 192.168.1.100 nmap -p 445 192.168.1.100Samba服务状态:
sudo systemctl status smbd journalctl -u smbd -f防火墙配置:
sudo ufw allow samba sudo ufw status numbered
6.2 常见错误解决方案
错误1:NT_STATUS_ACCESS_DENIED
- 检查selinux状态:
getenforce - 验证目录权限:
ls -ld /srv/samba/share - 确认smbpasswd已设置
错误2:NT_STATUS_HOST_UNREACHABLE
- 确认IP配置正确
- 检查交换机/路由器端口状态
- 测试其他协议(如HTTP)是否可达
7. 安全加固建议
禁用SMB1协议(在[global]段添加):
server min protocol = SMB2 client min protocol = SMB2启用加密传输:
smb encrypt = required限制访问IP:
hosts allow = 192.168.1. 127.0.0.1定期更新:
sudo apt update && sudo apt upgrade samba -y
8. 实际应用场景扩展
8.1 开发环境同步
配置IDE直接访问远程目录:
- VS Code安装"Remote - SSH"扩展
- 映射网络驱动器到开发机
- 实时编辑保存测试
8.2 备份方案集成
结合rsync实现定时备份:
rsync -avz --delete /mnt/samba_share/ /backup/samba_$(date +%F)添加到cronjob:
crontab -e # 每天3点执行 0 3 * * * /usr/bin/rsync -avz --delete /mnt/samba_share/ /backup/samba_$(date +\%F)9. 维护与管理技巧
日志分析工具:
sudo tail -f /var/log/samba/log.smbd连接监控:
sudo smbstatus配置语法检查:
testparm性能测试:
dd if=/dev/zero of=/mnt/samba_share/testfile bs=1M count=1024