以编程方式设置mosquitto中的访问控制限制

时间:2013-08-26 15:21:10

标签: python mq mqtt mosquitto

我正在开发一个将使用mqtt的应用程序。我将使用python库。我一直倾向于使用mosquitto,但却无法以编程方式为其设置访问控制限制。我正在编写的应用程序需要能够区分用户,并且只允许他们订阅某些主题。当前的解决方案看起来像是从配置文件中完成的。在mosquitto中是否有可扩展的访问控制限制解决方案?如果没有,你知道一个存在它的mqtt经纪人吗?

3 个答案:

答案 0 :(得分:8)

即使这可能不再与您有关,其他人也会发现它很有用。我在这里关注mosquitto' man page

有两个配置文件,一般是一个,比如说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想要订阅,以便她可以在此处阅读私信。她将她的凭据与nonce N1一起发送到in。此外,她还使用out/N1作为用户名订阅了主题N1。模式read out/%u允许这样做。

作为adminWithSecretName连接并订阅主题in的第三方服务器应用程序接收Alice'信息。它验证其真实性,然后生成新的nonce N2并将其发布到Alice订阅的out/N1

从现在开始 - 至少对于此会话 - out/N2是常规主题,其中Alice分别在此处设备将接收消息。因此,Alice取消订阅并断开表单out/N1并订阅out/N2。第三方服务器应用程序将属于Alice的所有新消息发布到主题out/N2

进一步注意事项:您可能还想反思安全性的其他方面,例如TLS和/或每封邮件加密。根据目标安全/隐私的等级,此处讨论的配置可能还需要TLS。 另一方面,如果消息是单独加密的,这可能会过时。如果她有权访问有线/ WiFi流,可以拦截(甚至订阅!)消息,因为她会将秘密用户名称视为纯文本。但是:当一个人已经可以访问数据流时,无论如何他/她都可以拦截这些字节。它们使用TLS或按消息加密以任一方式加密。此外,traffic analysis可能适用于这两种方法。

我建议使用TLS或按消息加密。两者都应该,正确实施和应用,导致可比较的安全性。

答案 1 :(得分:3)

您可以编写一个插件来为您处理此问题。有关示例,请参阅http://mosquitto.org/2013/07/authentication-plugins/

如果您在mosquitto邮件列表上询问,可以找到更多答案。

答案 2 :(得分:1)

如果您熟悉Java,则应尝试使用HiveMQ MQTT代理:http://www.hivemq.com

有一个开放的PluginSDK,它允许您向代理编写任何类型的扩展。

您可以实现最适合您的用例的身份验证或授权方法,例如从数据库,文件...

基于主题的授权是一个常见用例,HiveMQ插件指南中有一个示例。

作为HiveMQ插件开发的切入点,请参阅插件入门页面:http://www.hivemq.com/documentations/getting-started-plugins/

披露:我是HiveMQ的开发者之一。