私はtls-certificateでmosquittoバージョン1.4.10を使用しています。私はこのプラグインhttps://github.com/mbachry/mosquitto_pyauthを使用してuser.Andを認証しています。これはmosquitto_pubのためにうまくいきます(誰かが公開しようとすると、まずモジュールによって承認されます)。mosquitto - 許可なく購読を無効にする
しかし、mosquitto_subは認証なしで何かを購読できるようです。誰かが読み取り専用モードでトピックにアクセスしようとしているときに、セキュリティを強制するにはどうすればよいですか?
私はmosquitto.confファイルを調べて、これに関連するものは何も見つからないようです。
例えば、私はこのようにサブスクライブすることができています:
mosquitto_sub --cafile /etc/mosquitto/ca.crt --cert /etc/mosquitto/client.crt --key /etc/mosquitto/client.key -h ubuntu -p 1883 -t c/# -d
と、このようないくつかの出版社からのメッセージを参照することができ:私が何をしようとしています何
mosquitto_pub --cafile /etc/mosquitto/ca.crt --cert /etc/mosquitto/client.crt --key /etc/mosquitto/client.key -h ubuntu -p 1883 -t c/2/b/3/p/3/rt/13/r/123 -m 32 -q 1
は防ぐことですmosquitto_sub承認なしでルートレベルですべてのメッセージを読む。
承認は、次のようになりますし、Pythonコード:mosquitto_pubが接続しようとしたときに常に呼ばれるように見えますが、コネクトをmosquitto_sub時に呼び出されることはありません(認証データはカサンドラDBに保存されている)
import sys
import mosquitto_auth
from cassandra.cluster import Cluster
from cassandra import ConsistencyLevel
## program entry point from mosquitto...
def plugin_init(opts):
global cluster, session, select_device_query
conf = dict(opts)
cluster = Cluster(['192.168.56.102'])
session = cluster.connect('hub')
select_device_query = session.prepare('SELECT * from devices where uid=?')
select_device_query.consistency_level = ConsistencyLevel.QUORUM
print 'Cassandra cluster initialized'
def acl_check(clientid, username, topic, access):
device_data = session.execute(select_device_query, [username])
if device_data.current_rows.__len__() > 0:
device_data = device_data[0]
# sample device data looks like this :
# Row(uid=u'08:00:27:aa:8f:91', brand=3, company=2, device=15617, property=3, room=490, room_number=u'3511', room_type=13, stamp=datetime.datetime(2016, 12, 12, 6, 29, 54, 723000))
subscribable_topic = 'c/' + str(device_data.company) \
+ '/b/' + str(device_data.brand) \
+ '/p/' + str(device_data.property) \
+ '/rt/' + str(device_data.room_type) \
+ '/r/' + str(device_data.room) \
+ '/#'
matches = mosquitto_auth.topic_matches_sub(subscribable_topic, topic)
print 'ACL: user=%s topic=%s, matches = %s' % (username, topic, matches)
return matches
return False
機能acl_check
。このPythonモジュールの背後に Cコードはここにある:https://github.com/mbachry/mosquitto_pyauth/blob/master/auth_plugin_pyauth.c
私はあなたが第二段落 – hardillb
私bad..yesでmosquitto_sub'ない 'mosquitto_pub''を意味すると仮定し、私たちは、あなたがACLを実装してきたかを確認することができますので、あなたにもPythonコードを含めることができます –
mosquitto_sub意味 – hardillb