配置网络存储服务器,核心思路其实就两个:选对协议和配好权限。
在 Linux 环境下(无论是 CentOS 还是 Ubuntu),最主流的方案无非是 NFS(Network File System)和 Samba/SMB(Server Message Block)。
- NFS:适合纯 Linux/Unix/macOS 环境之间共享文件,性能极高,开销低,但 Windows 原生不支持。
- Samba (SMB):适合混合环境(Windows + Linux + macOS),兼容性无敌,配置稍复杂,性能略低于 NFS。
下面我以生产环境常用且稳定的角度,分别给出两套方案的实操步骤。假设你的服务器 IP 是 192.168.1.100,要共享的目录是 /data/share。
方案一:搭建 NFS 服务(推荐用于 Linux 集群、开发环境、NAS 内部互联)
NFS 配置简单,启动快,延迟低。
1. 安装软件包
Ubuntu:
sudo apt update
sudo apt install nfs-kernel-server portmap -y
CentOS 7/8:
# CentOS 7
sudo yum install nfs-utils rpcbind -y
# CentOS 8/Stream (使用 dnf)
sudo dnf install nfs-utils -y
注意:CentOS 8 之后
rpcbind已合并或不再需要单独强调,主要依赖nfs-utils。
2. 创建共享目录并设置权限
sudo mkdir -p /data/share
# 建议将所有者改为 nobody:nogroup 或者特定用户,避免 root 权限过大风险
sudo chown -R nobody:nogroup /data/share
sudo chmod -R 755 /data/share
3. 配置导出规则 (/etc/exports)
编辑 /etc/exports 文件:
sudo nano /etc/exports
添加一行,例如允许整个子网访问,只读模式:
/data/share 192.168.1.0/24(rw,sync,no_subtree_check)
参数解释:
rw: 读写权限。sync: 同步写入磁盘,保证数据一致性(生产环境必选)。no_subtree_check: 不检查父目录权限,提升性能。192.168.1.0/24: 允许访问的网段。*强烈建议指定具体 IP 或网段,不要写 ``**,防止被全网扫描。
如果想限制单个 IP:
/data/share 192.168.1.50(rw,sync,no_subtree_check)
保存后,执行以下命令使配置生效:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server # Ubuntu
sudo systemctl restart nfs-server # CentOS
4. 客户端挂载测试
在另一台 Linux 机器上:
# 安装客户端工具
sudo apt install nfs-common # Ubuntu
sudo yum install nfs-utils # CentOS
# 挂载
sudo mount -t nfs 192.168.1.100:/data/share /mnt/nfs_share
# 查看是否成功
df -h | grep nfs
方案二:搭建 Samba 服务(推荐用于 Windows 访问、家庭 NAS、混合办公)
Samba 基于 SMB/CIFS 协议,Windows 资源管理器直接就能映射网络驱动器,体验最好。
1. 安装软件包
Ubuntu:
sudo apt install samba -y
CentOS:
sudo yum install samba -y
2. 创建共享目录和用户
sudo mkdir -p /data/samba_share
sudo groupadd sambashare
sudo useradd -M -s /bin/false -G sambashare smbuser
sudo passwd smbuser # 设置密码,比如 123456
sudo chown -R smbuser:sambashare /data/samba_share
sudo chmod -R 2775 /data/samba_share
关键点:Samba 的用户必须是系统用户,但我们可以不给他登录 shell 权限(
-s /bin/false),只用于文件访问。
3. 配置 Samba (/etc/samba/smb.conf)
备份原配置:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
编辑配置文件:
sudo nano /etc/samba/smb.conf
在文件末尾添加:
[MyShare]
comment = Shared Folder for Team
path = /data/samba_share
browseable = yes
read only = no
guest ok = no
valid users = smbuser
create mask = 0775
directory mask = 0775
force user = smbuser
参数解释:
[MyShare]: 在网络邻居中看到的文件夹名称。valid users: 允许访问的用户。guest ok = no: 禁止匿名访问,安全起见。force user: 强制以指定用户身份操作文件,解决权限混乱问题。
4. 添加 Samba 密码并重启服务
Samba 有自己的密码数据库,必须单独设置:
sudo smbpasswd -a smbuser
输入两次密码。
重启服务:
sudo systemctl restart smbd
sudo systemctl enable smbd
5. 防火墙放行
Ubuntu (UFW):
sudo ufw allow from 192.168.1.0/24 to any port 445
CentOS (firewalld):
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
6. 客户端连接
在 Windows 上:
- 打开“此电脑” -> “映射网络驱动器”。
- 文件夹路径填:
\192.168.1.100MyShare - 输入用户名
smbuser和密码即可。
进阶优化与避坑指南(干货部分)
1. 性能调优
- NFS: 如果传输大文件,可以在
/etc/exports中加入insecure参数(如果客户端端口大于 1024),并在内核参数中调整 TCP 窗口大小。对于 SSD/NVMe 存储,确保sync不会成为瓶颈,可以考虑使用async(但需承担数据丢失风险,仅用于非关键日志)。 - Samba: 在
smb.conf中添加socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072可以提升小文件并发性能。
2. 安全性加固
- 不要暴露公网:NFS 和 Samba 默认没有强加密,建议在局域网内使用。如果需要远程访问,务必通过 OpenXX 或 XX 建立隧道,而不是直接开放 139/445 或 2049 端口到公网。
- SELinux/AppArmor:
- CentOS 默认开启 SELinux。如果挂载失败,可能是上下文不对。可以使用
semanage fcontext修改上下文,或者临时setenforce 0排查。 - Ubuntu 默认有 AppArmor,通常影响较小,但若遇到权限拒绝,检查
/var/log/syslog。
- CentOS 默认开启 SELinux。如果挂载失败,可能是上下文不对。可以使用
3. 自动化挂载 (fstab)
为了方便重启后自动挂载,可以编辑 /etc/fstab:
NFS 客户端 fstab 条目:
192.168.1.100:/data/share /mnt/nfs_share nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Samba 客户端 fstab 条目:
//192.168.1.100/MyShare /mnt/samba_share cifs credentials=/etc/samba/credentials,uid=1000,gid=1000,vers=3.0 0 0
注意:Samba 挂载需要在
/etc/samba/credentials文件中明文存放用户名密码,权限设为600,否则会有安全风险。
4. 监控与维护
- 使用
nfsstat查看 NFS 状态。 - 使用
smbstatus查看当前连接的 Samba 会话。 - 定期清理
/var/lib/samba/下的缓存文件,防止 inode 耗尽。
总结
- 如果你是开发者、运维团队,服务器全是 Linux,追求极致性能和简单配置,选 NFS。
- 如果你要给普通员工、Windows 用户提供文件共享,或者家里做 NAS 给手机/电视看,选 Samba。
两者都可以通过 Docker 容器化部署,但在生产环境中,裸机或虚拟机直接部署更利于调试和性能控制。记得做好快照备份,毕竟存储服务器的数据无价。
云技术博客