飞牛fnOS SSH登录后如何切换root用户与配置安全密钥认证 1. 为什么飞牛 fnOS 默认不让你用 root 登录我第一次装好飞牛 fnOSSSH 连上去的时候输入账号密码顺利登录。结果想在系统盘里敲个ls /看看分区挂载情况直接提示权限不足连/etc下的部分配置文件都看不了。当时第一反应这系统怎么这么别扭我明明是管理员啊。后来冷静下来想了想这是 Linux 类系统的常规设计飞牛虽然做了不少界面化的工作但底层依然是一套完整的 Debian/Linux 环境。默认情况下SSH 服务OpenSSH的配置里就写着PermitRootLogin prohibit-password或者直接禁止 root 远程登录同时普通用户默认也不在 root 组里。这么做的目的很直接降低被暴力破解的风险。你想啊root 是系统里权限最高的账号如果开着密码登录黑客只要拿到一个密码字典无限尝试 root 账号真被撞库撞出来整台机器就彻底沦陷了。所以 Debian 系和大多数 Linux 发行版都会默认关掉 root 的远程登录能力。飞牛作为一个面向普通用户的 NAS 系统肯定不会把 root 直接亮出来这也是对用户的一种保护。但问题来了日常运维的时候改 Docker 配置、手动挂载存储、调整网络参数这些操作没有 root 权限根本做不了。所以我们必须通过自己的普通账号在 SSH 会话里临时切换到 root完成管理操作。这就是标题里说的ssh 登录后切换 root 用户这件事的来源。理解了这个设计逻辑你就不会觉得别扭了。飞牛不是不让你用 root而是不让你裸奔式地直接用 root。系统给你留了一条合规的路子只是需要你在登录之后手动翻一下权限的开关。2. 登录后最常用的切换方式sudo su -2.1 一条命令完成切换常规的切换流程是这样先用你自己的普通账号通过 SSH 登录飞牛比如用户名叫admin登录成功后执行sudo su -系统会让你输入当前用户也就是 admin的密码确认之后你就变成了 root。注意看命令行提示符的变化会从类似adminfnos:~$变成rootfnos:~#结尾的符号从$变成#这意味着你现在拥有系统中的最高权限。这里解释一下sudo su -这条命令的原理很多人只知道用不知道为什么要这么写。sudo以超级用户权限执行后面跟着的命令。它需要用当前用户的密码来验证身份前提是当前用户在 sudoers 配置里有授权飞牛默认是给管理员账号开了这个权限的。su切换用户switch user命令不带参数时默认切换到 root。-横杠表示同时切换到目标用户的环境变量相当于重新登录了一次 root 用户。如果不加这个横杠你会发现虽然身份变成了 root但 PATH 环境变量还是之前的执行某些命令时会提示command not found比较坑。所以完整的sudo su -意思是用我的管理员权限切换成 root并且加载 root 的完整环境。这是最标准、最省事的切法。2.2 为什么推荐用 sudo su - 而不是直接 su -有人会问那我直接执行su -然后输入 root 密码不也一样吗从结果上说确实都能到 root 身份。但区别在于sudo 需要的是你自己的密码su 需要的是 root 账号的密码。飞牛系统在安装的时候虽然设置了一个管理员账号但默认情况下不仅没有启用 root 密码甚至可能把 root 密码锁住了。如果你直接执行su -它会提示输入密码你输管理员密码大概率是过不去的因为 root 账号的密码根本还没设置或者被锁定。如果你确实想给 root 设置一个密码可以手动执行sudo passwd root之后再执行su -就能用自己的 root 密码登录了。但我个人不建议你这么做原因后面会详细讲尤其是当你开启了 SSH 密钥登录之后密码验证本身就是一个潜在风险点。2.3 日常使用中的小习惯临时执行单条命令其实很多场景下你不需要完整地切换成 root只需要用 sudo 执行某一条命令就行。比如查看系统日志sudo tail -f /var/log/syslog或者重启某个服务sudo systemctl restart nginx这样做的好处是你不是一直以 root 身份待在系统里就算命令敲错了造成的影响范围也小。切换成 root 之后整个人容易飘手一抖把/etc下的文件改了救都救不回来。我自己的习惯是能用 sudo 单条执行的就用 sudo必须连续多条命令操作时才sudo su -。3. sudo 执行报错怎么办排查 sudoers 配置3.1 常见报错信息不是所有人的飞牛都能顺利执行sudo su -。有些用户遇到的报错很典型admin is not in the sudoers file. This incident will be reported.翻译过来就是当前用户不在 sudoers 文件里没有使用 sudo 的资格。这个报错说明你的管理员账号虽然在飞牛的 Web 界面上看着是管理员但底层系统里它的用户组配置缺少了sudo组的归属。还有一种情况是 SSH 登录的用户根本不是管理员而是你后来自己创建的一个普通用户。飞牛在 Web 界面创建用户时默认不会给 sudo 权限所以你登录进去之后自然没法执行任何特权命令。3.2 排查思路确认用户所属组遇到这种问题不要慌。先确认当前登录的用户名whoami再看看它属于哪些用户组groups正常情况下管理员账号的输出里应该包含sudo这个组。如果没有说明你的账号没被正确加入 sudo 组或者你登录的根本不是管理员账号。补充一个背景知识Debian 系统的 sudo 组名就是sudo而 CentOS/RHEL 是wheel。飞牛基于 Debian所以我们需要把用户加到sudo组而不是 wheel。3.3 解决方案通过单用户模式或者 Web 端修复如果你在 SSH 里发现用户没有 sudo 权限但你还有飞牛 Web 管理页面的访问权限那最简单的办法是去设置 - 用户管理看看有没有把当前账号的角色改成管理员。飞牛的 Web 界面里管理员角色对应的就是系统 sudo 权限改一下就能生效。但如果你连 Web 端都进不去了那就得用物理接触的方式修复。飞牛主机一般是插着显示器的或者至少接了一个键盘。把机器重启在引导界面GRUB出现时选择高级选项进入恢复模式recovery mode然后选择 root 用户进入一个无需密码的 root Shell飞牛底层是 Debian恢复模式默认有这个入口。进去之后执行usermod -aG sudo admin把 admin 替换成你自己的用户名然后重启再用 SSH 登录sudo 就能用了。这个操作有一定门槛但遇到问题的时候知道有这条路可走比干着急强。我的建议是装完飞牛的第一时间就去确认一下自己的账号能不能 sudo别等到要部署服务时才发现了那时往往时间紧任务重很容易慌。4. 直接允许 root 账号 SSH 登录改配置也要改风险4.1 如何修改 sshd_config有些人就是不想每次登录都切一次 root希望 SSH 连接上去直接就是 root这也不是不可以但需要动 OpenSSH 的配置文件。先进 rootsudo su -然后用编辑器打开 SSH 服务的主配置文件vim /etc/ssh/sshd_config找到这一行#PermitRootLogin prohibit-password注意不同系统的默认值不太一样有些是#PermitRootLogin yes有些是#PermitRootLogin no。在 Debian 系的较新版本里默认通常是有prohibit-password这个选项的它的意思是允许 root 通过密钥方式登录但不允许 root 用密码登录。如果你想彻底放开改成PermitRootLogin yes保存退出。然后重启 SSH 服务让配置生效systemctl restart sshd或者systemctl restart ssh两边的服务名在飞牛上应该都兼容建议用sshd实在不行再看看ssh。4.2 配置了还得有 root 密码即使PermitRootLogin yes了root 没有密码还是登录不了。这个时候你需要按前面说的那样设置一个 root 密码sudo passwd root设置完毕之后再用 SSH 客户端连接用户名输入 root密码输入刚才设置的就能直接以 root 身份登入。4.3 为什么我不建议你长期开着密码登录这里说点掏心窝的话。如果你只是在自己家里内网玩飞牛不开端口映射、不搞公网访问那开 root 密码登录影响不大毕竟外网没人能摸到你的 SSH 端口。但如果你做了 DDNS、端口映射、IPv6 直连公网那开着 root 密码 SSH 就是给自己埋雷。原因很直白公网上的扫描机器人是无差别攻击的专门盯着 22 端口撞库。root 账号是它们的首要目标如果 root 还开了密码登录密码又不够复杂被突破是迟早的事。所以我的建议是即使要开 root 登录也最好配合密钥验证同时把PermitRootLogin设置成prohibit-password也就是root 只能通过密钥登录密码登录路径直接堵死。具体配置方法下一节详细讲。5. 密钥登录的完整配置跳过密码直接以 root 身份进系统5.1 先在客户端生成密钥对SSH 密钥登录的原理简单说就是你自己电脑上存一把私钥飞牛上存一把公钥登录时用私钥证明我是我不需要输入密码。以 Windows 为例现在 Win10/11 自带 OpenSSH 客户端可以直接在 PowerShell 或 CMD 里执行ssh-keygen -t ed25519 -C fnos-root当然用 RSA 也可以ssh-keygen -t rsa -b 4096。我比较推荐 ed25519密钥短、安全性高、生成也快。执行后一路回车到底它会默认把私钥存在C:\Users\你的用户名\.ssh\id_ed25519公钥是id_ed25519.pub。如果你已经有一个正在使用的密钥对那就不用重新生成直接把公钥丢到飞牛上就行。5.2 上传公钥到 root 的家目录注意这里有个容易踩的坑root 用户的家目录是/root不是/home/xxx。很多人习惯性地把公钥放到/home/admin/.ssh/authorized_keys然后发现 root 登录不了大概率就是这个原因。先把当前用户的公钥放好确保能正常登录。然后切到 rootsudo su -创建 root 的 SSH 目录并设置权限mkdir -p /root/.ssh chmod 700 /root/.ssh再把你的公钥内容追加进去。如果你身边有 U 盘或者直接能复制公钥内容可以这样echo ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAxxxxxxx 你的备注 /root/.ssh/authorized_keys注意这里用的是两个是追加而不是覆盖。如果你之前已经配置过公钥千万别用一个否则会把之前的公钥全部清空。只有确保原来没有内容时才可以用单个。设置文件权限chmod 600 /root/.ssh/authorized_keys这个权限很关键OpenSSH 对authorized_keys文件的权限非常敏感如果权限是 644它会认为文件不够安全直接拒绝密钥登录。5.3 修改 PermitRootLogin 为密钥专用在/etc/ssh/sshd_config里把配置改成PermitRootLogin prohibit-password这个配置的含义是root 登录时只能使用密钥验证密码验证一律拒绝。这样就算有人知道 root 密码他也进不来因为 SSH 服务压根不给他用密码的机会。重启 SSH 服务systemctl restart sshd然后用你的 SSH 客户端用户填 root指定私钥文件进行连接。Windows 下用 PowerShell 的话ssh -i C:\Users\你的用户名\.ssh\id_ed25519 root你的飞牛IP如果一切正常直接就能登进去不用输密码。5.4 密钥登录排错常见问题定位密钥登录偶尔会抽风最常见的就是提示Permission denied (publickey,password).遇到这个报错按下面的顺序排查确认公钥确实追加到了/root/.ssh/authorized_keys不是/home/xxx/.ssh/authorized_keys。确认/root/.ssh目录权限是 700/root/.ssh/authorized_keys文件权限是 600。确认你 SSH 客户端里指定的用户名是root不是别的。确认客户端用的是私钥不是公钥。千万别把公钥内容粘贴到私钥文件输入框里。如果还是不行把 sshd 的日志打开看看。日志位置在/var/log/auth.log执行tail -f /var/log/auth.log再试着登录一次看日志里报什么错。这一步几乎能定位到所有问题。我遇到过最诡异的一次情况是/root目录权限被改成了 775导致 OpenSSH 拒绝公钥登录它要求家目录不能对组和其他用户可写最后用chmod 700 /root解决。这类隐藏条件很难第一时间想到排错时要注意。6. 切换 root 之后能做什么、建议做什么6.1 配合飞牛常用运维场景飞牛 NAS 作为家庭媒体中心最常折腾的几个方向几乎都需要 root 权限手动挂载存储空间。飞牛 Web 界面能处理常规的硬盘挂载但如果是 exFAT 分区、群晖旧硬盘或者做了 RAID 的阵列盘Web 界面识别不了时就得手动用mount命令挂载。挂载的前提就是 root。热搜词里提到飞牛nas 存储空间未挂载怎么回事很多查不到原因的场景用 root 直接看dmesg | tail就能看到内核拒绝挂载的具体原因是文件系统不识别、还是硬盘有坏道一目了然。部署 Docker 容器。飞牛内置了 Docker 管理界面但你要做端口映射、修改 bridge 网络配置、映射 USB 设备进容器时Web 界面不够用必须命令行操作。比如部署 IPTV 相关的服务经常需要把主机的某个网络接口直接映射给容器这种操作只能通过 docker 命令在 root 下执行。设置定时重启。飞牛自带的任务计划有限如果你想让 NAS 凌晨定时重启直接用 root 执行crontab -e加一行配置比 Web 界面灵活得多。比如0 4 * * * /sbin/reboot意思是每天凌晨四点重启。热搜词里有人问飞牛官nas 定时重启用crontab就是最直接的办法而且写进系统任务后不受 Web 界面重启影响。修改系统服务参数。比如调整 Samba 全局配置、给网卡设置静态路由这些虽然不一定要 root但没 root 你连配置文件都打不开更别提验证格式了。6.2 日常维护建议用 root 但不长时间留 root我的使用习惯是SSH 登录之后依然用普通用户身份操作偶尔需要执行特权命令时才 sudo。只有在需要连续操作一堆系统文件时才sudo su -切成 root操作完马上exit退回普通用户。这样做的原因很简单root 拥有对系统的完全控制权你一个不小心输错命令比如rm -rf /var /www这行命令如果以普通用户身份执行会提示权限不足救你一命。但如果是 root它真的会开始删除/var下的所有内容等你想起来要停的时候系统已经差不多凉了。权限是一把双刃剑用的时候要克制。另外root 的状态下 Shell 的提示符是#普通用户是$这个小细节多看一眼可以避免在错误的环境里执行危险命令。6.3 root 密码忘掉之后的急救办法用了 root 一段时间忘记密码的事情太常见了。飞牛毕竟是家里的 NAS一年到头才动一次控制台记不住很正常。如果 Web 界面还能登录其实你不一定需要找回 root 密码直接在 Web 界面的设置里通常有重置管理员密码或者用户管理的入口可以把当前管理员账号重新设密。而 root 本身的密码即使忘了只要你的管理员账号能 sudo重新执行一次sudo passwd root就能重置。如果连 Web 界面和 SSH 都进不去了那就只能物理接触飞牛主机进 GRUB 恢复模式跟前面讲的一样用那个临时 root Shell 重新设置密码。这个方案是我在实际操作里验证过的恢复模式下的 shell 不要求输入密码直接能用。6.4 给飞牛新用户的一张速查表为了方便使用我把 SSH 登录和 root 切换相关的常见命令整理了一个速查表目的命令普通用户登录后切 rootsudo su -直接执行一条特权命令sudo systemctl restart sshd设置/重置 root 密码sudo passwd root查看当前用户whoami查看用户所属组groups查看 SSH 服务状态sudo systemctl status sshd查看登录失败日志sudo tail -f /var/log/auth.log手动挂载硬盘sudo mount /dev/sdb1 /mnt/disk2查看系统日志sudo journalctl -xe这里多说一句飞牛系统毕竟是面向家庭用户的 NAS 系统Web 界面能解决 90% 的需求。SSH 进入 root 是给折腾党准备的补充手段不是为了甩开图形界面不用而是在图形界面搞不定的时候有一把兜底的钥匙。我自己用飞牛这段时间最大的体会是它把 Linux 系统的底层能力打包成了一个轻量 NAS 界面但当你 SSH 进去之后天地立刻就大了。理解了登录和切换 root 这套逻辑你后续做任何高权限操作都会顺手很多——部署媒体服务、挂载复杂文件系统、调试网络、甚至玩旁路由都有了入门的基础。希望这篇经验能帮你少走我踩过的弯路。如果你是按 SSH 密钥方式做的配置后续稳定性会高非常多如果还是用密码那就尽量保证密码强度足够别在其他设备上泄露。折腾 NAS 是个持续更新的过程以后遇到新问题再聊。