2016-12-12 14 views
0

私は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が接続しようとしたときに常に呼ばれるように見えますが、コネクトをmos​​quitto_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

+0

私はあなたが第二段落 – hardillb

+0

私bad..yesでmosquitto_sub'ない 'mosquitto_pub''を意味すると仮定し、私たちは、あなたがACLを実装してきたかを確認することができますので、あなたにもPythonコードを含めることができます –

+0

mosquitto_sub意味 – hardillb

答えて

0

がブローカーにログオン資格なしであなたのmosquitto.confに

... 
allow_anonymous false 
... 

これを停止するユーザーを次のように追加します。

anonymousユーザにaclルールを追加することもできます。このルールでは、認証されていないクライアントに表示させることができるトピックがある場合です。

+0

こんにちは、ユーザーは匿名ではありません。彼は認証されたユーザーです。彼は許可されていないものを購読する権限を与えられてはなりません。私は、サブコマンドとpubコマンドで質問を更新しました。 –

+0

また:私は既にallow_annonymousがfalseであることを追加しました。 –

関連する問題