[英]Programmatically setting access control limits in mosquitto
我正在開發一個將使用mqtt的應用程序。 我將使用python庫。 我一直傾向於使用mosquitto,但卻無法以編程方式為其設置訪問控制限制。 我正在編寫的應用程序需要能夠區分用戶,並且只允許他們訂閱某些主題。 當前的解決方案看起來像是從配置文件中完成的。 在mosquitto中是否有可擴展的訪問控制限制解決方案? 如果沒有,你知道一個mqtt經紀人存在嗎?
即使這可能不再涉及到你,其他人也會發現它很有用。 我在這里關注mosquitto的手冊頁 。
有兩個配置文件,一般是一個,比如說是mosquitto.conf
,另一個是ACL(訪問控制列表),比如acl.conf
。
mosquitto.conf
啟用acl.conf
文件進行訪問控制:
acl_file acl.conf
acl.conf
定義訪問控制行為:
# users can anonymously publish to the topic 'in'
topic write in
# users can subscribe topics named 'out/%u', where %u is the user's name
pattern read out/%u
# an admin may subscribe to 'in'
# and publish to all subtopics of 'out/' (note the +)
user adminWithSecretName
topic read in
topic write out/+
我們用配置文件執行mosquitto -c mosquitto.conf
來運行mosquitto。
在這種情況下,可以通過使用隨機生成的用戶名來建立動態認證機制。
示例: Alice想要訂閱,以便她可以在此處閱讀私人消息。 她向她的憑據,結合隨機數N1
來in
。 此外,她還使用N1
作為用戶名將主題out/N1
訂閱。 read out/%u
的模式read out/%u
允許這樣做。
第三方服務器應用程序,以adminWithSecretName
連接並訂閱主題in
接收Alice的消息。 它驗證其真實性,然后生成新的nonce N2
並將其發布到Alice已訂閱的out/N1
。
從現在開始 - 至少對於此會話 - out/N2
是常規主題,其中Alice分別在此處設備將接收消息。 因此,Alice取消訂閱並斷開form out/N1
並訂閱out/N2
。 第三方服務器應用程序將屬於Alice的所有新消息發布到主題out/N2
。
進一步的考慮因素:人們可能還想反思安全性的其他方面,如TLS和/或按消息加密。 根據目標安全/隱私的等級,此處討論的配置可能還需要TLS。 另一方面,如果消息是單獨加密的,這可能會過時。 如果她有權訪問有線/ WiFi流,可以攔截(甚至訂閱!)消息,因為她會將秘密用戶名稱視為純文本。 但是:當一個人已經可以訪問數據流時,無論如何他/她都可以攔截這些字節。 它們使用TLS或按消息加密以任一方式加密。 此外, 流量分析可以應用於兩種方法。
我建議使用TLS或按消息加密。 兩者都應該,正確實施和應用,導致可比較的安全性。
您可以編寫一個插件來為您處理此問題。 有關示例,請參見http://mosquitto.org/2013/07/authentication-plugins/ 。
如果你在mosquitto郵件列表上詢問,你可能會找到更多的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.