Samba / NFS 文件共享
Samba 用于与 Windows 系统共享文件(SMB/CIFS 协议),NFS 用于 Linux 之间的文件共享。
Samba 文件共享
安装 Samba
sudo apt update
sudo apt install samba samba-common-bin -y
# 查看版本
smbd --version
# 检查服务状态
sudo systemctl status smbd nmbd基本配置
Samba 配置文件为 /etc/samba/smb.conf:
# 备份原始配置
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
# 编辑配置
sudo nano /etc/samba/smb.conf公共共享(无需认证)
# /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Ubuntu File Server
security = user
map to guest = Bad User
dns proxy = no
# 性能优化
socket options = TCP_NODELAY IPTOS_LOWDELAY
read raw = yes
write raw = yes
max xmit = 65535
[public]
path = /srv/samba/public
browsable = yes
read only = no
guest ok = yes
create mask = 0664
directory mask = 0775
force user = nobody# 创建共享目录
sudo mkdir -p /srv/samba/public
sudo chown nobody:nogroup /srv/samba/public
sudo chmod 0775 /srv/samba/public用户认证共享
[shared]
path = /srv/samba/shared
browsable = yes
read only = no
guest ok = no
valid users = @smbgroup
create mask = 0660
directory mask = 0770
force group = smbgroup
[homes]
comment = Home Directories
browsable = no
read only = no
valid users = %S
create mask = 0600
directory mask = 0700# 创建 Samba 用户组
sudo groupadd smbgroup
# 创建系统用户并加入组
sudo useradd -M -s /usr/sbin/nologin smbuser
sudo usermod -aG smbgroup smbuser
# 设置 Samba 密码(与系统密码独立)
sudo smbpasswd -a smbuser
sudo smbpasswd -e smbuser # 启用用户
# 创建共享目录
sudo mkdir -p /srv/samba/shared
sudo chown root:smbgroup /srv/samba/shared
sudo chmod 0770 /srv/samba/shared验证和启动
# 测试配置文件语法
testparm
# 重启服务
sudo systemctl restart smbd nmbd
# 设置开机自启
sudo systemctl enable smbd nmbd
# 防火墙开放 Samba 端口
sudo ufw allow samba客户端连接
Linux 客户端
# 安装客户端工具
sudo apt install cifs-utils smbclient -y
# 浏览共享
smbclient -L //server-ip -U smbuser
# 挂载共享
sudo mkdir -p /mnt/samba
sudo mount -t cifs //server-ip/shared /mnt/samba -o username=smbuser,password=yourpass,uid=$(id -u),gid=$(id -g)
# 开机自动挂载(/etc/fstab)
# 先创建凭据文件
sudo tee /etc/samba/.credentials << 'EOF'
username=smbuser
password=yourpass
EOF
sudo chmod 600 /etc/samba/.credentials
# 添加 fstab 条目
echo "//server-ip/shared /mnt/samba cifs credentials=/etc/samba/.credentials,uid=1000,gid=1000,iocharset=utf8 0 0" | sudo tee -a /etc/fstab
sudo mount -aWindows 客户端
在文件资源管理器地址栏输入:
\\server-ip\shared映射网络驱动器:
- 右键”此电脑” -> “映射网络驱动器”
- 输入
\\server-ip\shared - 勾选”使用其他凭据连接”
NFS 文件共享
安装 NFS 服务器
sudo apt update
sudo apt install nfs-kernel-server -y
# 查看状态
sudo systemctl status nfs-server配置导出目录
编辑 /etc/exports:
# /etc/exports
# 格式:目录 客户端(选项)
# 允许单个 IP
/srv/nfs/data 192.168.1.100(rw,sync,no_subtree_check)
# 允许整个子网
/srv/nfs/data 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
# 允许多个客户端
/srv/nfs/shared 192.168.1.0/24(rw,sync,no_subtree_check) 10.0.0.0/8(ro,sync,no_subtree_check)
# 只读共享
/srv/nfs/public *(ro,sync,no_subtree_check)常用选项说明
| 选项 | 说明 |
|---|---|
rw | 读写权限 |
ro | 只读权限 |
sync | 同步写入(更安全) |
async | 异步写入(更快但有风险) |
no_subtree_check | 禁用子树检查(提升性能) |
no_root_squash | 保留客户端 root 权限 |
root_squash | 将 root 映射为 nobody(默认) |
all_squash | 所有用户映射为 nobody |
anonuid/anongid | 指定匿名用户的 UID/GID |
创建并启动共享
# 创建共享目录
sudo mkdir -p /srv/nfs/data /srv/nfs/shared /srv/nfs/public
sudo chown nobody:nogroup /srv/nfs/data /srv/nfs/shared /srv/nfs/public
sudo chmod 0777 /srv/nfs/data
# 应用导出配置
sudo exportfs -ra
# 查看当前导出
sudo exportfs -v
# 防火墙开放 NFS 端口
sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw allow from 192.168.1.0/24 to any port 111 # rpcbindNFS 客户端
# 安装客户端
sudo apt install nfs-common -y
# 查看服务器导出列表
showmount -e server-ip
# 挂载 NFS 共享
sudo mkdir -p /mnt/nfs
sudo mount -t nfs server-ip:/srv/nfs/data /mnt/nfs
# 挂载 NFS v4
sudo mount -t nfs4 server-ip:/srv/nfs/data /mnt/nfs
# 开机自动挂载(/etc/fstab)
echo "server-ip:/srv/nfs/data /mnt/nfs nfs defaults,_netdev 0 0" | sudo tee -a /etc/fstab
sudo mount -a使用 autofs 自动挂载
# 安装 autofs
sudo apt install autofs -y
# 配置主映射文件
echo "/mnt/nfs /etc/auto.nfs" | sudo tee -a /etc/auto.master
# 配置 NFS 映射
echo "data -rw,soft,intr server-ip:/srv/nfs/data" | sudo tee /etc/auto.nfs
# 重启 autofs
sudo systemctl restart autofs
# 访问时自动挂载
ls /mnt/nfs/dataNFS 性能优化
# 服务端:增加 NFS 线程数
# 编辑 /etc/nfs.conf
sudo tee -a /etc/nfs.conf << 'EOF'
[nfsd]
threads = 16
EOF
# 客户端:挂载选项优化
sudo mount -t nfs -o rw,hard,intr,rsize=1048576,wsize=1048576,timeo=600 server-ip:/srv/nfs/data /mnt/nfsSamba vs NFS 对比
| 特性 | Samba (SMB/CIFS) | NFS |
|---|---|---|
| 协议 | SMB/CIFS | NFS v3/v4 |
| 适用场景 | Windows + Linux 混合 | Linux/Unix 之间 |
| 用户认证 | 独立密码数据库 | 基于 UID/GID 或 Kerberos |
| 性能 | 较好 | 更好(Linux 间) |
| 配置复杂度 | 中等 | 简单 |
| Windows 支持 | 原生支持 | 需要额外软件 |
| ACL 支持 | 完整 | 基本 |
| 加密传输 | SMB3 支持 | NFS v4 + Kerberos |
故障排查
# Samba 日志
sudo tail -f /var/log/samba/log.smbd
# NFS 检查
showmount -e server-ip
rpcinfo -p server-ip
nfsstat
# 检查挂载
mount | grep -E "(cifs|nfs)"
df -h | grep -E "(cifs|nfs)"
# 检查端口
ss -tlnp | grep -E "(445|139|2049|111)"Last updated on