出于系统安全考虑,需要把Luci登录和SSH登录的账户做隔离。
其实就是在系统原有基础上,增加一个只能访问Luci的非root账户。
(一)首先需要增加一个root权限的admin用户,我是用手动修改文件的方式添加,还可以使用useradd命令添加。
1、创建用户 package\base-files\files\etc\passwd (系统中路径 \etc\passwd )
root:x:0:0:root:/root:/bin/ash
+ admin:x:0:0:admin:/root:/bin/false
daemon:*:1:1:daemon:/var:/bin/false
ftp:*:55:55:ftp:/home/ftp:/bin/false
network:*:101:101:network:/var:/bin/false
注意:需要将登录Shell改为false,这样就不可以用admin用户登录SSH和串口。
2、设置密码 package\base-files\files\etc\shadow (系统中路径 \etc\shadow )
root:$1$zQwaOOzF$h8DoCAuWFGJB1uCd6l11x1:18096:0:99999:7:::
+ admin:$1$Fm5h2QN9$jq.LJZWpFtt/bFaEKqKoh.:18096:0:99999:7:::
daemon:*:0:0:99999:7:::
ftp:*:0:0:99999:7:::
network:*:0:0:99999:7:::
这一步其实是先编辑 /etc/shadow 文件,方法是复制 root 的那行信息出来,然后改名为 admin,接着再 passwd admin 命令修改密码。
(二)修改Luci页面文件
1、feeds/luci/modules/luci-base/luasrc/controller/admin/index.lua (系统中路径 /usr/lib/lua/luci/controller/admin/index.lua )
- page.sysauth = "root"
+ page.sysauth = "admin"
2、feeds/luci/modules/luci-mod-system/luasrc/controller/admin/system.lua
(系统中路径 /usr/lib/lua/luci/controller/admin/system.lua )
- luci.http.write_json({ code = luci.sys.user.setpasswd("root", password) })
+ luci.http.write_json({ code = luci.sys.user.setpasswd("admin", password) })
这一步很重要,否则 LUCI 会允许你用这个新建的用户修改了 root 的密码(在 system->administration 这里操作)。
3、/usr/lib/lua/luci/controller/admin/servicectl.lua 有些版本可能需要修改这个文件
entry({"servicectl"}, alias("servicectl", "status")).sysauth = "root"
改为:
entry({"servicectl"}, alias("servicectl", "status")).sysauth = {"admin"}
这么做则允许 LUCI 可以保存并且激活所做的设置。
(三)rpcd
package\system\rpcd\files\rpcd.config (系统中路径 /etc/config/rpcd)
+ config login
+ option username 'admin'
+ option password '$p$admin'
+ list read '*'
+ list write '*'
rpcd和Luci的关系:rpcd被uhttpd(luci页面的web服务器)调用,网页修改配置后 ,由rpcd通知procd调用相应的服务。
所以这里要给新增加的用户,增加权限吧。
本文参考以下文章:
http://www.groad.net/bbs/forum.php?mod=viewthread&tid=8847
https://forum.openwrt.org/t/solved-luci-add-support-user-in-addition-to-root/17402
https://blog.csdn.net/wdsfup/article/details/70786602