企业文件服务器怎么搭建?共享目录、权限管理与备份方案

几乎每家公司都需要一个"公共盘":财务的凭证、销售的合同、设计的素材、研发的文档,大家一起用、按权限访问、定期备份。需求听起来简单,真搭起来坑却不少——权限配错导致越权访问,磁盘满了没人发现,误删了文件找不回来,甚至被勒索软件加密了整盘资料。这些事故大多不是技术太难,而是搭建时没想清楚。

这篇文章从零讲一套企业内部文件服务器怎么建。先比较 Samba(SMB)和 NFS 两种主流方案该怎么选,再讲共享目录和权限怎么规划(用户、组、ACL),然后是磁盘配额、备份方案和安全加固,最后给出 Samba 的配置示例和 Windows/Linux 客户端挂载方法。文中涉及的操作会同时给出 RHEL/CentOS/Rocky 和 Debian/Ubuntu 两套命令。

读完你应该能独立搭起一台有权限体系、有配额、有备份、相对安全的文件服务器,而不是简单地开个共享就完事。

一、Samba 还是 NFS:先选对协议

企业文件共享有两大协议阵营:

对比项 Samba(SMB/CIFS) NFS
主要客户端 Windows 原生支持,macOS/Linux 也可 Linux/Unix 原生,Windows 支持弱
认证方式 支持用户/密码、AD 域集成 通常基于 IP/主机和 UID/GID,认证较弱
权限模型 支持 SMB 权限 + 底层 POSIX + ACL,细粒度 基于 POSIX/ACL,粒度较粗
性能 局域网内表现好,小文件友好 大文件、Linux 间传输效率高
配置复杂度 中等,参数较多 相对简单
典型场景 混合办公环境(大量 Windows 客户端) 纯 Linux 环境、集群内部共享

选型其实很简单:办公室里有大量 Windows 电脑、需要按用户精细控权,选 Samba;环境全是 Linux 服务器、要跑集群共享存储,选 NFS。混合环境当然可以两者都装,但权限体系最好统一规划,避免两套规则打架。绝大多数企业的"公共盘"需求,Samba 是更合适的答案,本文也以 Samba 为主线。

二、安装与基础共享配置

先装 Samba 服务。

# RHEL/CentOS/Rocky(8/9 用 dnf,7 用 yum)
dnf install -y samba samba-client
# Debian/Ubuntu
apt-get update && apt-get install -y samba samba-common-bin

# 启动并设置开机自启(不同系统服务名可能有差异,RHEL 系通常为 smb)
systemctl enable --now smb
systemctl status smb

规划好目录结构再动手。 一个清晰的结构能省掉后面大量的权限混乱。推荐按部门建目录:

/srv/samba/
├── public/        # 全员可读,只读或受限写入
├── finance/       # 财务组专属
├── sales/         # 销售组专属
├── design/        # 设计组专属
└── homes/         # 个人目录

创建目录和用户组:

# 建部门组
groupadd finance
groupadd sales

# 建目录并设置属主属组
mkdir -p /srv/samba/{public,finance,sales}
chown root:finance /srv/samba/finance
chmod 770 /srv/samba/finance      # 属组可读写,其他人无权访问

# 建 Samba 用户(必须是系统已有用户)
useradd -M -s /sbin/nologin zhangsan
smbpasswd -a zhangsan             # 设置 SMB 密码,与系统密码独立
usermod -aG finance zhangsan      # 加入财务组

Samba 配置文件在 /etc/samba/smb.conf。一个务实的配置示例:

[global]
   workgroup = WORKGROUP
   server string = Company File Server
   security = user                    # 使用本地用户认证
   map to guest = bad user            # 无效用户当作访客
   log file = /var/log/samba/log.%m
   max log size = 1000
   # 提高兼容性与性能的参数
   server min protocol = SMB2         # 禁用不安全的 SMB1
   socket options = TCP_NODELAY IPTOS_LOWDELAY

[public]
   path = /srv/samba/public
   browseable = yes
   read only = no
   valid users = @users               # 仅 users 组可访问,@ 前缀表示组
   create mask = 0664
   directory mask = 0775
   force group = users

[finance]
   path = /srv/samba/finance
   browseable = no                    # 不在列表里显示,增加隐蔽性
   read only = no
   valid users = @finance
   create mask = 0660
   directory mask = 0770
   force group = finance

改完配置先检查语法再重载,避免配置错误导致服务起不来:

testparm                    # 检查 smb.conf 语法
systemctl reload smb        # 平滑重载配置

valid users = @finance 里的 @ 表示这是一个组,只有 finance 组成员能访问该共享。browseable = no 让敏感共享不在网络邻居里显示,但这只是"眼不见",真正的安全靠 valid users 和底层目录权限,两者要配合。

三、权限管理:用户、组与 ACL

文件服务器最常见的纠纷就是"权限不对"。要把权限设计对,记住一个原则:用组管权限,不用个人管权限。给每个部门建组,共享目录授权给组,人员进出只需要调整组成员,不用改目录权限。

Linux 文件权限分三层:属主(user)、属组(group)、其他人(other)。Samba 的权限是两层叠加:SMB 层(valid users、read only、write list)+ 底层文件系统权限(POSIX/ACL),最终权限取两者中更严格的那个。所以经常出现"我在 smb.conf 里给了写权限,用户还是写不进去",多半是底层目录属组不对或没有组写权限。

对于更细粒度的需求(比如让两个组都能访问一个目录但权限不同),用 ACL:

# 安装 ACL 工具:RHEL/CentOS/Rocky 包名为 acl,Debian/Ubuntu 同
dnf install -y acl
apt-get install -y acl

# 查看目录 ACL
getfacl /srv/samba/project

# 给 sales 组读写、finance 组只读(-m 修改,-R 递归)
setfacl -R -m g:sales:rwx /srv/samba/project
setfacl -R -m g:finance:rx /srv/samba/project

# 设置默认 ACL,让该目录下新建的文件自动继承权限
setfacl -R -d -m g:sales:rwx /srv/samba/project

注意:ACL 生效要求文件系统挂载时启用了 acl 选项(ext4/xfs 默认启用)。另外,Samba 侧也要在共享里加 acl allow execute always = yes 之类的参数才能完全配合,具体可结合 vfs objects = acl_xattr 让 SMB 权限和 ACL 更好同步。

四、磁盘配额:别让一个人塞满整个盘

文件服务器最怕盘满——盘一满,所有人都存不进文件,还可能影响系统本身。配额(quota) 用来限制每个用户或每个组能用多少空间,从源头防止一个人把盘写满。

Linux 配额需要文件系统挂载时启用 usrquota 和 grpquota。修改 /etc/fstab:

# 在挂载选项里加上 usrquota,grpquota
/dev/vg0/samba  /srv/samba  ext4  defaults,usrquota,grpquota  0 0

风险提示:修改 fstab 有风险,写错会导致系统无法正常启动。改前先备份 /etc/fstab,改后先用 mount -o remount 或 mount -a 验证,确认无误再重启。远程操作时尤其要小心。

启用并设置配额:

# 重新挂载使配额生效
mount -o remount /srv/samba

# 初始化配额数据库并开启(不同发行版工具略有差异)
quotacheck -cugm /srv/samba
quotaon /srv/samba

# 交互式编辑用户配额(软限制、硬限制,单位 KB)
edquota -u zhangsan
# 或用命令行直接设:软限制 20GB,硬限制 25GB(经验值,按实际调整)
setquota -u zhangsan 20971520 26214400 0 0 /srv/samba

「软限制」是超了会报警但还能用一段时间,「硬限制」是绝对上限,一到就写不进去。经验上硬限制可以设为软限制的 1.1–1.2 倍,给用户一个缓冲。

五、备份:文件服务器最重要的保险

文件服务器集中了全公司的资料,一旦丢失后果严重。备份要解决三个问题:误删恢复、硬件故障、勒索加密。

快照(Snapshot)。 如果存储用 LVM 或支持快照的文件系统(如 Btrfs、ZFS),可以做快照。快照是瞬时、低成本的"时间点副本",适合应对误删——用户删了文件,直接从几小时前的快照里恢复。用 LVM 快照做个示例:

# 创建 LVM 快照(快照空间按预估变更量分配,例如 20G)
lvcreate -L 20G -s -n samba_snap /dev/vg0/samba
# 挂载快照只读查看
mkdir -p /mnt/snap && mount -o ro /dev/vg0/samba_snap /mnt/snap
# 用完卸载并删除快照
umount /mnt/snap && lvremove /dev/vg0/samba_snap

同步/异地备份。 用 rsync 定期把数据同步到另一台机器或异地存储:

# 增量同步到备份服务器(--delete 让目标与源保持一致,使用前务必确认路径正确)
# --delete 会删除目标端多余文件,误用可能造成数据丢失,建议先加 -n 试运行
rsync -av --delete -n /srv/samba/ backup@10.0.0.20:/backup/samba/
# 确认无误后去掉 -n 正式执行
rsync -av --delete /srv/samba/ backup@10.0.0.20:/backup/samba/

遵循 3-2-1 原则:3 份数据、2 种介质、1 份离线/异地。特别强调离线和异地——勒索软件会加密所有它能访问到的设备,包括连着网络的备份服务器,只有物理隔离或异地的备份才救得回来。

六、安全加固:防勒索与审计

企业文件服务器是勒索软件的重点目标,因为里面数据集中、价值高。加固要点:

权限最小化。 能做到"只读"的就不给"读写";能限定到具体用户组的就不对所有人开放;删除权限要慎重,很多时候只给写不给删(Samba 可用 delete readonly = no、veto files 等参数控制)。共享目录不轻易给 777。

关闭旧协议。 SMB1 有严重漏洞,务必禁用(server min protocol = SMB2)。同时限制 Samba 只监听内网地址,不要让共享端口暴露到公网。

# 只监听内网网卡,避免暴露(写入 [global])
interfaces = lo eth0
bind interfaces only = yes

审计日志。 Samba 可以开启详细审计,记录谁访问了哪个文件:

# [global] 中开启审计
vfs objects = full_audit
full_audit:prefix = %u|%I|%m|%S
full_audit:success = connect disconnect openat unlinkat
full_audit:failure = connect openat
full_audit:facility = LOCAL7
full_audit:priority = NOTICE

日志通过 syslog 收集到集中日志服务器,便于事后追溯"谁在什么时候删了哪个文件"。

其他加固: 定期打补丁;限制管理账号;对备份文件加密;对重要目录做写入频率监控(短时间内大量文件被改写是勒索的典型特征);配合防病毒软件扫描上传的文件。

七、客户端挂载

服务端配好后,客户端接入很简单。

Windows: 直接在"此电脑"里"映射网络驱动器",地址填 \\服务器IP\finance,输入 SMB 账号密码即可。也可以用命令行:

net use Z: \\10.0.0.10\finance /user:10.0.0.10\zhangsan *

Linux 挂载 SMB:

# 安装 cifs 工具
dnf install -y cifs-utils
apt-get install -y cifs-utils

# 挂载(凭据文件更安全,避免密码出现在命令历史里)
mount -t cifs //10.0.0.10/finance /mnt/finance \
  -o username=zhangsan,uid=1000,gid=1000,iocharset=utf8,vers=3.0

持久化可以写进 /etc/fstab,用凭据文件存密码(权限设为 600)。

Linux 挂载 NFS(如果用了 NFS):

dnf install -y nfs-utils
apt-get install -y nfs-common
mount -t nfs 10.0.0.10:/srv/nfs/data /mnt/data -o vers=4,_netdev

常见问题

Q:Windows 客户端连不上 Samba,报"网络路径不存在"怎么办?
按顺序排查:防火墙是否放行 SMB 端口(TCP 445,旧协议还涉及 139);smb 服务是否运行;smb.conf 里是否限制了访问网段;SMB 协议版本是否兼容(新 Windows 可能默认拒绝 SMB1,而服务端如果只开 SMB1 就连不上)。用 testparm 先验证配置。

Q:用户能进目录但写不了文件,是权限问题吗?
大概率是。先看 Samba 层有没有写权限(read only = no、write list),再看底层目录属组和权限是否正确(force group 后的组是否有写权限),最后看 ACL。可以 sudo -u 用户名 touch /srv/samba/xxx/test 直接用该用户身份测试底层是否可写。

Q:配额设了但没生效?
检查三点:文件系统挂载是否带了 usrquota,grpquota 选项;配额数据库是否初始化(quotacheck)并开启(quotaon);是否真的用 setquota 设了值。用 repquota /srv/samba 查看当前配额使用情况。

Q:能不能直接用 Windows 域账号登录 Samba,不用单独建 SMB 密码?
可以,把 Samba 加进 AD 域(security = ads),用户就用域账号登录,这在大中型企业很常见。配置涉及 Kerberos、winbind 等,比本地认证复杂,但能统一账号体系,值得在有域环境的企业里做。

Q:快照能替代备份吗?
不能。快照和源数据在同一存储上,硬件损坏或勒索加密可能同时影响两者;且快照空间有限、保留时间短。快照适合应对误删快速恢复,异地/离线备份才是真正的最后防线,两者要配合。

总结

  • 混合办公环境优先选 Samba/SMB,纯 Linux 环境选 NFS;本文以 Samba 为主线给出了完整配置。
  • 权限用组管理,Samba 权限(valid users、read only)和底层 POSIX/ACL 权限两层叠加,取更严格者生效;细粒度需求用 ACL。
  • 配额(quota)防止单用户塞满磁盘,硬限制略高于软限制作缓冲;修改 fstab 有风险,务必先备份并验证。
  • 备份遵循 3-2-1 原则,快照应对误删、rsync/异地应对故障和勒索,离线/异地那份最不能省。
  • 安全加固是底线:禁用 SMB1、限制监听网段、权限最小化、开启 full_audit 审计、监控异常写入。