Skip to Content
文档服务器Samba / NFS

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 -a

Windows 客户端

在文件资源管理器地址栏输入:

\\server-ip\shared

映射网络驱动器:

  1. 右键”此电脑” -> “映射网络驱动器”
  2. 输入 \\server-ip\shared
  3. 勾选”使用其他凭据连接”

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 # rpcbind

NFS 客户端

# 安装客户端 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/data

NFS 性能优化

# 服务端:增加 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/nfs

Samba vs NFS 对比

特性Samba (SMB/CIFS)NFS
协议SMB/CIFSNFS 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