OpenWRT 实用技巧:如何安全创建子账户并登录 LuCI 管理后台

玩软路由或者折腾 OpenWRT 的小伙伴们,平时大家是不是习惯了直接用 root 账号登录 LuCI 后台进行所有操作?虽然这样方便,但如果有一天你想要把路由器的部分管理权限(比如仅仅是查看状态、重启某个服务)分享给别人,或者仅仅是为了安全性考虑,不想所有操作都由超级用户执行,那么创建一个“子账户”就显得非常必要了。

今天我们就来聊聊如何在不影响系统稳定性的前提下,在 OpenWRT 中创建一个普通用户账户,并配置权限让其能登录 LuCI 界面。

为什么要创建子账户?

在深入教程之前,我们先明确一下场景。很多朋友可能觉得:“我自己用,搞那么复杂干嘛?” 但实际上,子账户有几个很实在的用处:

  1. 安全隔离:日常查看流量图、修改简单的 WiFi 密码,完全不需要 root 权限。万一你不小心点了不该点的按钮(比如恢复出厂设置),有了子账户就能有效降低“误操作”带来的灾难性后果。
  2. 多人协作:家庭网络或者小型办公环境,你可能想让其他人也能管理一些基础设置,但又不想让他们动到核心网络配置(如防火墙规则、VLAN 划分)。
  3. 服务守护:如果你运行了一些脚本,需要通过 Web 界面触发,但不想暴露管理员密码,可以使用权限受限的账户进行 API 调用(当然这需要配合其他组件)。

准备工作

OpenWRT LuCI 登录界面

OpenWRT 的 LuCI 管理后台登录界面

本教程适用于绝大多数现代 OpenWRT 版本(无论是官方源还是各类第三方固件如 Lean、LiuLi 等编译的版本)。前提是你已经能够通过 SSH 或者 Web 界面熟练操作 OpenWRT。

你需要准备:

  • 一台已刷好 OpenWRT 的路由器
  • 能够登录路由器的 SSH 权限(也就是拥有 root 权限)

实战操作:命令行创建用户

OpenWRT 基于 Linux,但它的用户管理机制与标准的桌面 Linux 发行版(如 Ubuntu/CentOS)略有不同,因为它不是用的 systemd,而是自己的一套配置管理逻辑。不过,基本的 Linux 用户管理命令大部分依然适用。

第一步:添加系统用户

首先,我们需要通过 SSH 连接到路由器。登录后,使用 opkg 确保系统中有必要的 Shadow 工具(通常默认都有)。然后输入以下命令创建一个新用户,这里假设我们创建的用户名为 helper

adduser helper

执行后,系统会提示你设置该用户的密码。请输入并确认一个强密码。此时,系统通常会在 /home 目录下为该用户创建一个主目录(OpenWRT 中通常是 /home/helper 或根目录下的某些路径,视具体固件而定)。

Linux 终端 SSH 连接命令行

通过 SSH 连接到 OpenWRT 路由器进行命令行操作

第二步:配置登录权限

光创建了用户还不够,我们需要让这个用户具备登录 Shell 的能力。OpenWRT 默认可能将用户的 Shell 设置为 /bin/false 以防止登录。我们需要修改 /etc/passwd 文件,或者直接使用 usermod 命令。

可以使用以下命令修改 helper 用户的 Shell 为 /bin/ash(OpenWRT 默认的 Shell):

usermod -s /bin/ash helper

现在,该用户已经可以通过 SSH 登录了,但还登录不了 LuCI 界面,因为 LuCI 的认证系统不仅仅依赖系统用户,还需要额外配置权限组和文件。

第三步:设置用户组与权限

OpenWRT 的 LuCI 访问控制主要依赖于 /etc/config/rpcd 配置文件。我们需要将新用户加入到特定的访问控制列表(ACL)中。

默认情况下,LuCI 的登录验证是走的 rpcd 服务。我们可以复制一份默认的配置给新用户,或者新建一个登录条目。

最简单的方法是编辑 /etc/config/rpcd 文件:

vi /etc/config/rpcd
``

在文件中,你会看到类似 `config login` 的区块。我们可以添加一个新的区块给 `helper` 用户。下面是一个示例配置,我们赋予它读取权限(只读),这样它只能看不能改(最安全):

config login option username 'helper' option password '$p$helper' # 注意:这里通常对应系统密码,具体看加密方式,或者可以直接读取/etc/shadow list read '.*' list write 'unauthenticated'


*注意:实际配置中,`rpcd` 的密码验证方式比较复杂,如果你的 OpenWRT 版本较新,通常只需要确保用户存在,并在 ACL 中正确映射即可。更通用的一种做法是使用 `uci` 命令直接修改系统权限配置,或者是利用 LuCI 界面中的“系统”->“管理权”选项(如果固件集成了相关插件)。

### 第四步:解决权限问题的“终极方案”

很多朋友在这一步容易卡住,发现登录失败或者登录后提示 403 Forbidden。这是因为 `ucibus` 权限没打通。这里提供一个相对通行的解决思路:

1.  **安装必要组件**(如果尚未安装):
    ```bash
    opkg update
    opkg install rpcd-mod-file rpcd-mod-iwinfo rpcd-mod-uci
    ```

2.  **修改 UCI 访问权限**:确保新用户对 UCI 配置有读权限。如果你希望它不仅能看,还能改某些部分(比如改 WiFi 密码),你需要精细设置 ACL。为了演示,我们赋予它全部 `uci` 的读写权限(慎用):

编辑 `/etc/config/uhttpd`(如果你用的是 uhttpd)或 `/etc/config/nginx`(如果你用的是 nginx),确保认证模块指向了 rpcd。

3.  **简单粗暴法(适合新手)**:
    很多第三方固件其实已经在 Web 界面集成了这个功能。如果你不想敲命令,可以检查一下你的 **系统 -> 管理员权限** 菜单。在那里,你可以直接添加新用户,并勾选他们能访问的模块(如 网络、系统、服务 等)。

如果你必须用命令行,且不想深究复杂的 ACL 语法,可以直接修改 `/etc/config/rpcd`,将默认的 `root` 配置复制一份给 `helper`,然后修改 `username` 字段即可。但这会给予 `helper` 和 `root` 一样的权限,虽然不安全,但能最快解决问题。

## 常见问题与解决方案

**Q: 输入用户名密码后一直转圈或提示认证失败?**
A: 请检查 `/etc/shadow` 文件中该用户的密码哈希是否正确生成。另外,确保 `/etc/config/rpcd` 中配置的用户名与系统用户名完全一致。有时候重启 `rpcd` 服务能解决问题:
```bash
/etc/init.d/rpcd restart

Q: 登录进去后全是空白或者只有部分菜单? A: 这是因为该用户没有对应模块的读取权限。请回到 /etc/config/rpcd 或 ACL 配置中,检查 list read 字段是否包含了该模块的 JSON-RPC 路径。

Q: 忘记了子账户密码怎么办? A: 用 root 登录 SSH,直接运行 passwd helper 重置即可。

总结

通过给 OpenWRT 创建子账户,我们不仅提升了系统的安全性,也让网络设备的日常维护变得更加灵活。虽然命令行操作略显繁琐,但一旦配置完成,后续的使用体验会非常顺畅。如果你对 Linux 权限管理感兴趣,深入研究 rpcd 的 ACL 规则会是一件非常有意思的事情,它能让你精确控制每一个参数谁能看、谁能改。

希望这篇教程能帮到正在折腾 OpenWRT 的你!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭