权限管理:用户、组与共享目录

为什么权限要从第一天就规划

共享配好了,家里每个人都能看到所有文件——听起来其乐融融,直到孩子在你的工作目录里拖走一个文件夹,或者某位家庭成员把相册里的视频批量「整理」进回收站。权限管理的意义不是防贼,是给每个人一个边界清楚的抽屉。NAS 上常见的尴尬是:所有人共用一个账号,出问题时分不清是谁干的;或者给每个家人开了账号却全给管理员权限,等于没分。

权限体系的核心是三句话:用户是「谁」,组是「哪一类人」,共享目录是「能碰到什么东西」。把这三个概念在脑子里摆正,后面所有配置都是填空题。无论你用 OMV、TrueNAS、飞牛还是纯命令行,模型都一样,只是界面不同。

用户与组:先画好组织结构图

动手之前先在纸上画出你家的「组织结构」。典型家用场景下,组比用户更重要,因为家人会变(比如多了个室友),而角色是稳定的。建议至少建三个组:admins(管理员,只有你自己)、family(家人,日常读写自己的文件、只读公共区)、guest(访客,只读指定目录)。每个家人一个独立账号,归入 family 组;逢年过节有客人借网盘传照片,新建一个 guest 账号而不是把家人密码给出去——密码一旦转发就脱离了你的管理范围,而新建一个只读账号只需要一分钟。账号命名也值得定个规矩,用姓名拼音加角色后缀(如 alice-family、bob-guest),半年后看用户列表时你不会对着一堆 test、user1 发呆。

OMV 的图形界面里整个过程是:左侧「用户」→「用户管理」新建用户,再在「组管理」里建组、把用户加进去。TrueNAS SCALE 在「Credentials → Local Users」和「Groups」里完成,飞牛在系统设置的用户中心。命令行下对应的是 useradd、groupadd 和 usermod -aG 组名 用户名 三板斧,想脚本化批量管理多台机器时,见 ssh 里的远程执行章节。建用户时有一个开关要留意:家用人用的账号应该禁止 SSH 登录(shell 设为 /usr/sbin/nologin),只留管理员能远程登录。

共享目录的权限模型:三层套娃

权限检查发生在三个层面,任何一层卡住都访问不了,理解这一点能解决八成疑难杂症。第一层是共享层(SMB/NFS 的导出规则),决定这个共享存不存在、谁能挂载;第二层是文件系统层(属主、属组、rwx),决定能不能读写具体文件;第三层是上层应用层(比如相册应用自己的账号体系),这类应用往往不认系统账号,只认它自己的数据库,做到这一层才算真正闭环。家用最常见的坑是:共享层允许了写,文件系统层不允许,结果用户能在共享里建文件夹却存不进文件。

权限的三层套娃

层级 控制什么 OMV 位置 排查命令
共享层 共享是否存在、谁能访问 共享文件夹→SMB 设置 testparm -s
文件系统层 读、写、执行 共享文件夹权限标签 ls -l、namei -l
应用层 应用内账号与目录 各应用自身设置 看应用日志

规划目录结构时,建议按「公共区 + 私有区 + 服务区」三分。公共区(Public)所有家人读写;私有区(每个用户一个目录,如 /srv/dev-disk-.../home/alice)只有本人能进;服务区(Docker 应用的数据目录)只有应用和管理员能碰。这三类目录的权限模板固定下来,以后加人加应用照着套,不用每次从头想。

chmod 之外的坑:ACL 与默认权限

普通 rwx 有一个场景カバー不到:你想让 family 组对某个目录读写,但目录里已有文件属主是别人。传统做法是递归执行 chmod -R,一轮下去整个目录权限被洗平,粗暴且容易误伤已经设好的细粒度规则。解决方案是 ACL(访问控制列表),setfacl -R -m g:family:rwX 目录 可以给组单独授权而不动原有属主。更重要的是默认 ACL:setfacl -d -m g:family:rwX 目录 之后,这个目录里新建的文件自动继承 family 组的读写权限,避免「新文件又只有 root 能写」的死循环。

OMV 的权限标签背后其实就是在帮你设置这些,但理解底层原理后你会发现图形界面的选项不够细。命令行下另外注意一点:UMASK 决定新文件的默认权限,家用人多的机器把 umask 从默认的 022 调成 002(组内可写)能少很多麻烦。这个设置放在 /etc/profile 或者 Samba 的 create mask 参数里。

NAS 系统里的实操路径

OMV 的共享文件夹权限有三个开关:Owner(属主)、Group(属组)、Others(其他人),分别对读、写、执行打钩。推荐做法:共享目录属主 root、属组 family、Others 关掉所有权限,family 组给读写。这样一个账号登录后只看到自己该看的共享。TrueNAS 的套路略有不同:建议在数据集(dataset)层面规划权限,每个数据集给一个组,用 aclmode=passthrough 保留 ACL 细粒度,SMB 共享时勾选「Use Apple-style ACLs」以兼容 macOS。

飞牛 OS 在文件管理里可以图形化设置目录权限,对家庭用户友好;unRAID 的每个 share 有 Security 选项,Private 模式需要账号、Public 模式谁都能进,家用建议全部设 Private。各家入口不同但同构,死记一个系统的界面不如记住底层模型。

权限规划五步

验证权限:别等出事才发现

配完权限必须验证,验证方法是以普通用户身份实际去试。命令行下用 su - 用户名 切换到家人账号,试着在被拒绝的目录里建文件(应该失败)、在自己的目录里建文件(应该成功)。Windows 端可以用另一个账号映射网络驱动器测试,比命令行更接近家人的真实使用路径。更系统化的是用 namei -l /path/to/file 逐级打印路径上每个目录的权限,一眼看出是哪一级卡住的。

最容易翻车的细节是 SMB 缓存:Windows 会缓存登录凭据,切换账号测试时要用 net use * /delete 清掉旧的会话,否则你测了半天其实是旧账号的权限。配置变更后也在 Windows 上执行 klist purge 或重新登录。这些小工具比一次次重启 NAS 管用得多,重启既解决不了缓存问题,还会打断家里正在进行的备份任务。

家庭实战:一份可直接照抄的模板

道理讲完,给一份三口之家(夫妻加一个老人账号)的最小可用方案,懒得规划的话照抄即可。先建三个组:admins(你自己)、family(配偶与老人)、guest(预留)。再建四个顶层目录,各自配好属主属组与权限,之后加应用、加家人都在这个框架内扩展,不必推倒重来。

目录 属主:属组 权限 用途
/Public root:family 770 全家共享、互相传文件
/Photos root:admins 750 相册应用数据,家人只读
/Media root:family 770 影视库,家人读写
/home/alice alice:family 700 私有空间,仅本人

这套模板的精髓在于:家人之间既能协作(Public、Media 可写),又互不越界(私有目录 700 把其他人挡在门外),应用数据隔离在家人够不到的地方。权限不是越多越好,而是「每个人刚好够用」。把它写进自己的装机笔记,下次给朋友装 NAS 时也能直接套用。

安全习惯与常见错误

常见错误清单排前三的是:第一,所有人共用 admin 账号(出事分不清责任);第二,图省事给 777(全家都能改等于没人能改);第三,服务目录给 family 组可读,结果应用配置文件里密码被人翻到。对策很简单:一个账号一个人、权限给到「刚好够用」、应用的配置目录单独隔离。另外建议每半年过一眼用户列表:离职的室友、换掉的手机测试账号,该删就删,常年不管的用户列表是出事时第一批甩锅对象。定期清理和当初认真规划一样重要,都是把麻烦消灭在萌芽阶段。

管理权限必然远程操作,SSH 安全基线见 ssh;想系统补一遍账号、端口、网段这些基础,jsjwlmst 的相关章节值得重读一遍,很多权限问题其实是网络隔离没做造成的。

延伸阅读

  • 下一章《UPS 与电压保护:断电应急预案》:权限配好了,硬件层面的断电保护同样不能少
  • ssh:远程管理账号与禁用登录的实操
  • jsjwlmst:网段隔离与基础网络知识