努力
加油

CentOS或Ubuntu系统如何配置成网络存储服务器?

配置网络存储服务器,核心思路其实就两个:选对协议和配好权限。

在 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 上:

  1. 打开“此电脑” -> “映射网络驱动器”。
  2. 文件夹路径填:\192.168.1.100MyShare
  3. 输入用户名 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。

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 容器化部署,但在生产环境中,裸机或虚拟机直接部署更利于调试和性能控制。记得做好快照备份,毕竟存储服务器的数据无价。