玩 NAS 的人都知道,飞牛 fnOS 虽然把 Web 界面做得非常易用,但总有一些操作绕不开 SSH 命令行:改配置、跑 Docker、写定时任务、看系统日志……只要敲到 sudo,系统就会让你输一遍管理员密码。单次操作还好,可要是写自动化脚本、批量执行命令,密码交互会直接卡住脚本,别提多难受了。
这篇文章就手把手教你给 fnOS 配置 sudo 免密,提供三种方法:新手友好的 visudo 直改法、可维护性最好的 /etc/sudoers.d 独立文件法,以及兼顾安全性的指定命令免密法。按需选择,一步到位。
写在前面:免密 sudo 的安全边界
先泼一盆冷水:sudo 免密等于把你的管理员账户变成了半个 root——任何拿到你 SSH 会话的人,都能不输密码执行任意特权命令。因此:
- 只建议在家用单机 NAS、测试虚拟机上使用;
- 多人共用、对外开放 SSH 的生产环境,不建议做全局免密;
- 如果只是嫌 SSH 输密码麻烦,更推荐先配SSH 密钥登录(免的是登录密码,而不是 sudo 密码),安全得多。
方法三会给出兼顾便利与安全的折中方案,建议往下看完再动手。
准备工作:确认用户名与 SSH
fnOS 基于 Debian 深度定制,安装时创建的第一个管理员账号(默认形如 fnos)就是超级管理员,自带 SSH 权限,后面配置也以这个账号为例。
- 开启 SSH:fnOS 桌面 → 设置 → SSH,确认已开启并记住端口(默认 22)。
- 用终端软件(如 Windows Terminal、FinalShell、Termius)连上 NAS,执行
whoami确认当前用户名。 - 验证 sudo 可用:输入
echo "你的密码" | sudo -S whoami,能输出root说明管理员权限正常(下面两步不需要,直接跳到对应方法)。
方法一:visudo 直接修改(新手友好)
先备份,再编辑:
sudo cp /etc/sudoers /etc/sudoers.bak
sudo visudo
fnOS 默认用 nano 打开(习惯 vim 可执行 sudo EDITOR=vim visudo)。在文件里找到这一行:
%Administrators ALL=(ALL:ALL) ALL
在它下方新增一行(把 fnos 换成你的用户名):
fnos ALL=(ALL) NOPASSWD:ALL
保存退出(nano:Ctrl+O 回车保存、Ctrl+X 退出)。visudo 退出前会自动做语法检查,有错误会提示你,不会让你保存坏配置。
为什么必须加在 %Administrators 那一行的后面?
sudo 的规则匹配是「最后一条匹配生效」:你的账号同时命中管理员组规则(要求密码)和免密规则时,后面的会覆盖前面的。把免密行加在组规则之后才会生效,加在它前面依旧会提示输密码——这是新手最容易踩的坑。
方法二:sudoers.d 独立文件(推荐)
更规范的做法是把规则写进 /etc/sudoers.d/ 下的独立文件,不碰主配置:
echo 'fnos ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/90-nopasswd-fnos
sudo chmod 440 /etc/sudoers.d/90-nopasswd-fnos
相比方法一,它有三个明显优势:
- 系统升级不覆盖:fnOS 更新不会动 /etc/sudoers.d 下你自己加的文件;
- 撤销一键搞定:
sudo rm /etc/sudoers.d/90-nopasswd-fnos即恢复原状; - 隔离清晰:主配置文件始终保持干净,排查问题时一目了然。
文件名前的 90- 是排序号,数字越大越后加载;记住规则文件必须以数字开头且不能带点号后缀,否则会被忽略。
方法三:只对指定命令免密(最推荐)
全局免密风险大,如果你只是想让自己常用的几条命令不再问密码,可以精确到命令:
sudo tee /etc/sudoers.d/90-fnos-cmds <<'EOF'
fnos ALL=(ALL) NOPASSWD: /usr/bin/systemctl, /sbin/reboot, /sbin/poweroff
EOF
sudo chmod 440 /etc/sudoers.d/90-fnos-cmds
上面例子只对 systemctl(启停服务)、reboot、poweroff 三条命令免密,其它 sudo 命令照常要密码。需要哪条就补哪条,用 which 命令名 查绝对路径后写进去即可(比如 Docker 用户常加 /usr/bin/docker)。
验证是否生效
配置完后重新开一个 SSH 会话,执行:
sudo -l
输出里能看到 (root) NOPASSWD: ALL(方法一/二)或对应的命令白名单(方法三),说明规则已生效。再直接敲 sudo whoami,不再要密码、直接输出 root,就大功告成了。
想撤销怎么办
- 方法一:再次
sudo visudo,删掉你加的那行即可(或恢复备份sudo cp /etc/sudoers.bak /etc/sudoers); - 方法二/三:直接删除对应规则文件:
sudo rm /etc/sudoers.d/90-nopasswd-fnos。
常见问题排查
1. 加了 NOPASSWD 还是要密码
九成是规则顺序问题:免密行必须位于 %Administrators ALL=(ALL:ALL) ALL 之后。其次检查用户名是否写错、是否登录的就是那个账号。
2. 提示 “xxx is not in the sudoers file”
说明当前账号不在管理员组,也没有对应 sudoers 规则。fnOS 的普通用户默认没有 sudo 权限,请用安装时创建的首位管理员账号操作,或在系统设置里把该用户提为管理员。
3. 手滑把 sudoers 改坏了怎么办
visudo 自带语法校验,正常保存不会出错;真遇到 sudo 完全无法使用的情况,先别慌:
- 如果还能执行 sudo(部分场景),用
sudo visudo -c检查语法、定位出错行; - 整个 sudo 都废了,可用
pkexec visudo以图形授权方式修复(前提是桌面环境可用); - 最后的兜底:用 fnOS 安装 U 盘进入救援/单用户模式,挂载系统盘手动改回
/etc/sudoers。平时养成改前备份的习惯,就基本不会走到这一步。
小结
飞牛 fnOS 的 sudo 免密配置并不复杂,核心就一句话:在管理员组规则之后,为你的用户名追加一条 NOPASSWD 规则。个人强烈推荐方法三(指定命令免密)或方法二(sudoers.d 独立文件),兼顾顺手与安全。
如果你还在折腾飞牛的路上,这几篇应该也用得上:老硬件能跑多丝滑?D525 折腾飞牛NAS 的避坑记录、白嫖也能爽飞!不花一分钱,飞牛NAS 远程访问也能满速秒开。觉得有用的话,欢迎收藏转发,也欢迎在评论区交流你的折腾经验。
相关阅读:
原创文章,作者:Tech.laowang,如若转载,请注明出处:https://techlaowang.com/fnos-sudo-ssh/