在openwrt中,LuCI和LuCI2都是通过rpcd的acl来完成权限管理的。
- 在“/usr/share/rpcd/acl.d/”目录中会存在”*.json”文件定义不同的访问权限级别
- 在“/etc/config/rpcd”文件中定义了不同用户对应的访问权限级别;
例如:
config login option username 'root' option password '$p$root' list read '*' list write '*'
config login option username 'blaer' option password '$p$blaer' list read lesssuperuser list write lesssuperuser
|
在上面的“/etc/config/rpcd”文件中定义了两个用户的访问权限:
- “root”用户可以读写一切
- “blaer”用户对应lesssuperuser权限级别。而lesssuperuser权限级别在“/usr/share/rpcd/acl.d/”目录中的某个”*.json”文件中定义;
例如lesssuperuser权限级别定义如下:
{ "lesssuperuser": { "description": "not quite as super user", "read": { "ubus": { "file": [ "*" ], "log": [ "*" ], "service": [ "*" ], }, }, "write": { "ubus": { "file": [ "*" ], "log": [ "*" ], "service": [ "*" ], }, } } }
|
而一个超级用户可能的权限定义如下:
{ "superuser": { "description": "Super user access role", "read": { "ubus": { "*": [ "*" ] }, "uci": [ "*" ] }, "write": { "ubus": { "*": [ "*" ] }, "uci": [ "*" ] } } }
|
虽然ubus有一个uci方法,但是使用ubus作用域时,只能指定某个“uci set”是允许还是不允许,但不能指定它是否允许修改某个文件,例如,允许修改/etc/config/system,而不允许/etc/ config/network;
而使用("uci": [ "*" ])可以让你来指定”/etc/config/”目录中某个文件的读写权限;
我们看一个luci2中定义的更复杂的权限
在/usr/share/rpcd/acl.d/luci2.json中根据功能划分定义了一组不同的访问权限规则,内容比较多只摘抄一部分; { "unauthenticated": { "description": "Functions allowed for unauthenticated requests", "read": { "ubus": { "luci2.ui": [ "themes" ]
|