mosquitto 安裝mysql插件 進行權限驗證

第一步:下載mosquitto源碼並編譯安裝

https://github.com/eclipse/mosquitto 

第二步:下載mosquitto-auth-plug源碼

https://github.com/jpmens/mosquitto-auth-plug

第三步:準備編譯環境

yum install gcc-c++

yum install libuuid-devel

yum install mysql++-devel.x86_64 參考:https://blog.csdn.net/uniom/article/details/54134532

第四步:解壓編譯

unzip mosquitto的zip包

unzip mosquitto-auth-plug的zip包

進入 解壓後mosquitto的文件夾執行

make mosquitto

make install

第五步:進入mosquitto-auth-plug的解壓後的文件夾

複製 cp config.mk.in config.mk 

編輯config.mk:根據需要選擇合適的後臺。我這裏只使用mysql數據庫驗證用戶,BACKEND_MYSQL這一行是yes 注意可能BACKEND_MYSQL後面有一個問號 問號最好去掉其他的行有問號可以不用管,其餘行都是no。在MOSQUITTO_SRC一行輸入mosquitto的源碼路徑, 比如MOSQUITTO_SRC =/opt/mosquitto-1.5.5/
。在OPENSSLDIR一行輸入openssl的路徑,比如OPENSSLDIR = /usr/lib/openssl。

可以使用以下命令得到openssl的路徑:openssl version -a

第五步:進入mosquitto-auth-plug所在目錄,使用make命令生成auth-plug.so文件。

第六步:新建一個 /etc/mosquitto

第七步:把生成的auth-plug.so 複製到 /etc/mosquitto

第八步:修改配置文件

mosquitto-auth-plug的源碼裏已經有多種範例配置文件,可以使用這些文件。比如,我用mysql做驗證,可以使用 examples目錄下的mosquitto-mysql.conf。

cp examples 下的 mosquitto-mysql.conf 到/etc/mosquitto 並進行配置

根據實際情況,編輯文件裏的auth_plugin,backend,數據庫host,端口,數據庫名,用戶,密碼,sql語句等。

 

我的內容如下:

autosave_interval 1800
persistence true
persistence_file mosquitto.db
persistence_location /tmp/
connection_messages true
log_timestamp true
log_dest stderr

#log_type error
#log_type warning
#log_type notice
#log_type information
#log_type all
log_type debug

listener 1883 #端口


#
#   __  __       ____   ___  _     
#  |  \/  |_   _/ ___| / _ \| |    
#  | |\/| | | | \___ \| | | | |    
#  | |  | | |_| |___) | |_| | |___ 
#  |_|  |_|\__, |____/ \__\_\_____|
#          |___/                   
#  
#                     

#auth_plugin /home/jpm/mosquitto-auth-plug/auth-plug.so
auth_plugin /etc/mosquitto/auth-plug.so#插件路徑
auth_opt_backends mysql #選擇mysql
#auth_opt_cdbname pwdb.cdb
auth_opt_host 10.*.*.* #我的mysql地址 
auth_opt_port 3306 #端口mysql
auth_opt_dbname mqtt #數據庫名
auth_opt_user root#mysql用戶名
auth_opt_pass root#mysql的密碼
auth_opt_userquery SELECT pw FROM users WHERE username = '%s'
auth_opt_superquery SELECT IFNULL(COUNT(*), 0) FROM users WHERE username = '%s' AND super = 1
auth_opt_aclquery SELECT topic FROM acls WHERE username = '%s'


# Usernames with this fnmatch(3) (a.k.a glob(3))  pattern are exempt from the
# module's ACL checking
auth_opt_superusers S*
user root#這個比較重要 解決Invalid user 'mosquitto'. 這個問題

第九步:編譯完mosquitto之後,進入到lib目錄下,將編譯之後的libmosquitto.so.1 拷貝到目錄/usr/local/lib下,執行如下命令:
cp libmosquitto.so.1 /usr/local/lib

然後再執行:

執行命令:

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

ldconfig

第十步:

創建數據庫 把插件源碼中examples文件中的mysql.sql 文件內容複製出來到數據庫中執行,可能會以一個建立索引的地方報錯,直接刪除後再執行就行了。

注意:需要添加客戶端授權後執行 flush privileges;

第十一步:啓動

mosquitto -c /etc/mosquitto/mosquitto-mysql.conf  -v

 

可能出現的錯誤總結:參考https://blog.csdn.net/houjixin/article/details/46711547

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章