You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2022/12/13 04:44:05 UTC

[dubbo-website] branch master updated: update(qos): anonymous access permission check doc. (#1716)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/master by this push:
     new ea2ac57db5b update(qos): anonymous access permission check doc. (#1716)
ea2ac57db5b is described below

commit ea2ac57db5bc0adb361ce40ff437cfcc99e4b524
Author: Koy Zhuang <ko...@ko8e24.top>
AuthorDate: Tue Dec 13 12:43:58 2022 +0800

    update(qos): anonymous access permission check doc. (#1716)
---
 .../java-sdk/reference-manual/qos/overview.md      | 55 ++++++++++++++++---
 .../spi/description/qos-permission.md              | 62 ++++++++++++++++++++++
 2 files changed, 111 insertions(+), 6 deletions(-)

diff --git a/content/zh/docs3-v2/java-sdk/reference-manual/qos/overview.md b/content/zh/docs3-v2/java-sdk/reference-manual/qos/overview.md
index 6846ed64f7b..997529ca399 100644
--- a/content/zh/docs3-v2/java-sdk/reference-manual/qos/overview.md
+++ b/content/zh/docs3-v2/java-sdk/reference-manual/qos/overview.md
@@ -9,12 +9,13 @@ description: dubbo 2.5.8 新版本增加了 QOS 模块,提供了新的 telnet
 ## 相关参数说明
 QoS 提供了一些启动参数,来对启动进行配置,他们主要包括:
 
-| 参数                              | 说明             | 默认值   |
-|---------------------------------|----------------|-------|
-| qos-enable                      | 是否启动QoS        | true  |
-| qos-port                        | 启动QoS绑定的端口     | 22222 |
-| qos-accept-foreign-ip           | 是否允许远程访问       | false |
-| qos-accept-foreign-ip-whitelist | 支持的远端主机ip地址(段) | (无)   |
+| 参数                              | 说明             | 默认值       |
+|---------------------------------|----------------|-----------|
+| qos-enable                      | 是否启动QoS        | true      |
+| qos-port                        | 启动QoS绑定的端口     | 22222     |
+| qos-accept-foreign-ip           | 是否允许远程访问       | false     |
+| qos-accept-foreign-ip-whitelist | 支持的远端主机ip地址(段) | (无)       |
+| qos-anonymous-access-permission-level | 支持的匿名访问的权限级别   | PUBLIC(1) |
 
 > 注意,从2.6.4/2.7.0开始,qos-accept-foreign-ip默认配置改为false,如果qos-accept-foreign-ip设置为true,有可能带来安全风险,请仔细评估后再打开。
 
@@ -66,6 +67,44 @@ dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
 -Ddubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13,132.12.10.13/24
 ```
 
+## 权限
+为了对生命周期探针的默认支持,QoS 提供了匿名访问的能力以及对权限级别的设置,目前支持的权限级别有:
+- PUBLIC(1)   
+  默认支持匿名访问的命令权限级别,目前只支持生命周期探针相关的命令
+- PROTECTED(2)  
+  命令默认的权限级别
+- PRIVATE(3)  
+  保留的最高权限级别,目前未支持
+- NONE  
+  最低权限级别,即不支持匿名访问
+
+> 权限级别 `PRIVATE`> `PROTECTED`> `PUBLIC`> `NONE`, 高级别权限可访问同级别和低级别权限命令。
+当前以下命令权限为`PUBLIC`, 其它命令默认权限别为`PROTECTED`。
+
+| 命令                                    | 权限等级      |
+|---------------------------------------|-------------------|
+| Live                                  | PUBLIC (1)    |
+| Startup                               | PUBLIC (1)     |
+| Ready                                 | PUBLIC (1)     |
+| Quit                                  | PUBLIC (1)|
+
+默认情况下,dubbo 允许匿名主机发起匿名访问,只有`PUBLIC`权限级别的命令可以执行,其他更高权限的命令会被拒绝。
+
+**关闭匿名访问**  
+可以通过设置`qos-anonymous-access-permission-level=NONE`来关闭匿名访问。
+
+**设置权限级别**  
+可以通过配置文件`dubbo.properties` 修改:
+```
+dubbo.application.qos-anonymous-access-permission-level=PROTECTED
+```
+或者  
+可以通过设置 JVM 参数:
+```
+-Ddubbo.application.qos-anonymous-access-permission-level=PROTECTED
+```
+来允许匿名访问更高级别的权限的命令。
+
 ## 协议
 ### telnet 与 http 协议
 
@@ -124,6 +163,7 @@ As Consumer side:
 -Ddubbo.application.qos-port=33333
 -Ddubbo.application.qos-accept-foreign-ip=false
 -Ddubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13,132.12.10.13/24
+-Ddubbo.application.qos-anonymous-access-permission-level=PUBLIC
 ```
 
 ### 使用 dubbo.properties 文件配置
@@ -133,6 +173,7 @@ dubbo.application.qos-enable=true
 dubbo.application.qos-port=33333
 dubbo.application.qos-accept-foreign-ip=false
 dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
+dubbo.application.qos-anonymous-access-permission-level=PUBLIC
 ```
 
 ### 使用XML方法配置
@@ -149,6 +190,7 @@ dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
     <dubbo:parameter key="qos-enable" value="true"/>
     <dubbo:parameter key="qos-accept-foreign-ip" value="false"/>
     <dubbo:parameter key="qos-accept-foreign-ip-whitelist" value="123.12.10.13,132.12.10.13/24"/>
+    <dubbo:parameter key="qos-anonymous-access-permission-level" value="NONE"/>
     <dubbo:parameter key="qos-port" value="33333"/>
   </dubbo:application>
   <dubbo:registry address="multicast://224.5.6.7:1234"/>
@@ -166,4 +208,5 @@ dubbo.application.qos-enable=true
 dubbo.application.qos-port=33333
 dubbo.application.qos-accept-foreign-ip=false
 dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
+dubbo.application.qos-anonymous-access-permission-level=NONE
 ```
diff --git a/content/zh/docs3-v2/java-sdk/reference-manual/spi/description/qos-permission.md b/content/zh/docs3-v2/java-sdk/reference-manual/spi/description/qos-permission.md
new file mode 100644
index 00000000000..02bb73e0950
--- /dev/null
+++ b/content/zh/docs3-v2/java-sdk/reference-manual/spi/description/qos-permission.md
@@ -0,0 +1,62 @@
+---
+type: docs
+title: "QoS匿名访问权限验证扩展"
+linkTitle: "QoS匿名访问权限验证扩展"
+weight: 27
+---
+
+## 扩展说明
+
+QoS匿名访问权限验证扩展点。
+
+## 扩展接口
+
+`org.apache.dubbo.qos.permission.PermissionChecker`
+
+## 扩展配置
+
+
+Dubbo QoS `dubbo.application.qos-anonymous-access-permission-level` 匿名访问权限校验。
+
+## 默认实现
+
+`org.apache.dubbo.qos.permission.DefaultAnonymousAccessPermissionChecker`
+
+## 扩展示例
+
+Maven 项目结构:
+
+```
+src
+ |-main
+    |-java
+        |-com
+            |-xxx
+                |-XxxPermissionChecker.java (实现PermissionChecker接口)
+    |-resources
+        |-META-INF
+            |-dubbo
+                |-org.apache.dubbo.qos.permission.PermissionChecker` (纯文本文件,内容为:qosPermissionChecker=com.xxx.XxxPermissionChecker)
+```
+
+XxxPermissionChecker.java:
+
+```java
+package com.xxx.qos.permission;
+
+import org.apache.dubbo.qos.permission.PermissionChecker;
+
+public class XxxAnonymousAccessPermissionChecker implements PermissionChecker {
+
+    @Override
+    public boolean access(CommandContext commandContext, PermissionLevel defaultCmdRequiredPermissionLevel) {
+      // ...
+    }
+}
+```
+
+META-INF/dubbo/org.apache.dubbo.qos.permission.PermissionChecker:
+
+```properties
+qosPermissionChecker=com.xxx.XxxPermissionChecker
+```