MQ7 5以後的許可權問題解決

2021-07-03 20:22:09 字數 2949 閱讀 1741

mq7.5以後許可權是個問題,目前我也沒有什麼特別好的解決辦法,把認證通道關閉就可以正常使用。

下面是ibm 官方的解釋,可惜我沒調通,望高人指點!

您使用mq 7.1或者7.5建立了乙個新的佇列管理器。然後,您嘗試使用管理員賬戶從客戶端訪問該佇列管理器。您得到返回值為「2035 mqrc_not_authorized」的錯誤。

為什麼在mq 6.x或者7.0.x中,mq管理員可以遠端訪問佇列管理器,而不會產生任何錯誤?

當您使用mq 7.1或者mq 7.5建立乙個新的佇列管理器的時候,mq 7.1新引入的通道認證記錄功能就預設被啟用。您可以使用下列命令來檢視該設定。

$ runmqsc qmgrnamedisplay qmgr chlauthamq8408: display queue manager details.qmname(test01) chlauth(enabled)

在預設情況下,建立佇列管理器會產生下列三條通道認證記錄:$ runmqsc qmgrname

display chlauth(*)amq8878: display channel authentication record details.chlauth(system.admin.svrconn) type(addressmap)address(*) usersrc(channel)amq8878: display channel authentication record details.chlauth(system.*) type(addressmap)address(*) usersrc(noaccess)amq8878: display channel authentication record details.chlauth(*) type(blockuser)userlist(*mqadmin)

其中,最後一條記錄攔截所有以mq管理員身份的遠端通道訪問。非管理員使用者在賦予一定許可權的情況下仍然可以遠端連線佇列管理器,而管理員使用者和匿名使用者被禁止連線。這意味著在新版本mq中,佇列管理器更加安全。當然,這就需要顯式定義管理許可權。另外,需要注意以下幾點:

a)如果公升級乙個佇列管理器到mq 7.1,那麼這個新功能預設是關閉的。

$ runmqsc qmgrnamedisplay qmgr chlauthamq8408: display queue manager details.qmname(test01) chlauth(disabled)

當然,您可以使用如下命令開啟該功能。

alter qmgr chlauth(enabled)

b) 如果您使用mq資源管理器遠端訪問新建立的mq 7.1佇列管理器,會得到如下錯誤:

關閉該對話方塊後,彈出另外乙個對話方塊:

該錯誤表明mq資源管理器不能遠端連線到佇列管理器。

c) 從錯誤日誌中,可以看到錯誤amq9776或者9777,然後還有amq9999。

c.1) amq9776: channel was blocked by userid

c.2) amq9777: channel was blocked

c.3) amq9999: channel 'system.admin.svrconn' to host 'x (9.49.x.x)' ended abnormally.

以上錯誤表明遠端連線符合某條通道認證記錄,從而被攔截。

1) 如果在生產環境中,建議使用非管理員賬戶訪問佇列管理器,而不是管理員賬戶。

2) 如果您一定要使用mq管理員賬戶遠端訪問佇列管理器,您可以採取以下措施。

2.a) 您可以參考下面的資料,新增兩條通道認證記錄。

第10頁: 使用者id攔截

第一條記錄攔截所有的管理員使用者及「nobody」使用者。

$ runmqsc qmgrname

set chlauth(*) type(blockuser) userlist('nobody','*mqadmin')

第二條記錄對管理員賬戶開放了system.admin通道的訪問,只攔截「nobody」使用者。這裡,mq假設其它的通道認證記錄或者使用者安全出口可以完成對管理員賬戶的認證。

set chlauth(system.admin.*) type(blockuser) userlist('nobody')同樣,上面的記錄適用於system.admin.svrconn通道,可以被mq資源管理器使用。

如果您使用其它的自定義的通道,例如my.admin.svrconn。您需要定義如下記錄:

set chlauth(my.admin.svrconn) type(addressmap) address(*) usersrc(channel)set chlauth(my.admin.svrconn) type(blockuser) userlist('nobody')

注意:我們不建議使用者連線system.def.*通道。這些系統定義的通道是定義其它使用者通道的模板。不建議使用者使用system.def.*和system.auto.*通道。

2.b)該方法是2.a)的乙個演變,但是只允許管理員賬戶從特定主機連線。

第一條規則攔截「nobody」使用者。

set chlauth(system.admin.svrconn) type(blockuser) userlist('nobody')

第二條規則刪除所有對system.admin.svrconn通道的訪問。

set chlauth(system.admin.svrconn) type(addressmap) address(*) action(remove)

第三條規則新增乙個訪問入口。

set chlauth(system.admin.svrconn) type(addressmap) address(9.27.4x.7y) usersrc(channel)

2.c) 停止通道認證功能。

alter qmgr chlauth(disabled)

警告:對於生產環境,停止該功能是不推薦的。因為停止該功能,將導致佇列管理器接受所有的管理許可權的連線,這就需要使用者付出更大的努力去管理這些連線。因此,出於安全考慮,請保持通道認證記錄功能啟用。同時,使用mq 7.1的其它功能完成連線認證。

nodejs 許可權不足的問題解決

續前章,npm 許可權不足問題及 windows terminal 安裝使用。之前一直沒搞清楚為什麼node以及npm許可權不足,需要使用管理員身份執行才有效,今天發現很有可能是 nvm 的問題。解除安裝 nvm 找到 nvm 對應的資料夾,裡面有個類似於 uninstall 的可執行檔案,點選即可...

npm安裝vue的許可權問題解決

前端小白,如何執行vue專案請參考 如何執行乙個vue專案 本人在安裝完node.js後使用npm安裝vue時遇到許可權問題 error eacces permission denied,symlink lib node modules vue cli bin vue init usr local ...

php 呼叫linux命令許可權問題解決

centos系統 因為安裝了 截圖軟體,但php在呼叫其命令的時候無法執行,php是用的www使用者,無法呼叫root下的許可權,找到解決方法 1 設定 sudo 配置檔案為可寫許可權 chmod u w etc sudoers 2 增加 www 使用者的 nginx 指令碼管理許可權 www al...