编译
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| sudo apt install libssl-dev libwebsockets-dev uuid-dev libcjson-dev libc-ares-dev xsltproc docbook-xsl docbook-xml
git clone https://github.com/DaveGamble/cJSON.git cd cjson make && sudo make install
git clone https://github.com/eclipse/mosquitto.git cd mosquitto mkdir build && cd build cmake -DWITH_SRV=yes -DWITH_CJSON=yes -DWITH_WEBSOCKETS=yes -DWITH_TLS=yes -DWITH_BUNDLED_DEPS=yes -DWITH_DOCS=yes .. make && sudo make install sudo cp ../service/systemd/mosquitto.service.simple /etc/systemd/system/mosquitto.service sudo useradd -r -m -s /bin/bash mosquitto sudo mv /usr/local/etc/mosquitto /etc/mosquitto sudo ln -s /usr/local/sbin/mosquitto /usr/sbin/mosquitto
|
配置
1
| sudo mosquitto_passwd -c /etc/mosquitto/pwfile admin
|
基本ALC配置
创建好了认证之后,我们可能还需要对每个账户的权限进行控制,毕竟有的时候为了数据安全,不能允许所有的设备能完全订阅整个broker上的所有topic。
创建一个新的文件,比如起名叫aclfile,上述两个账户的权限举例如下:
1 2 3 4 5 6 7
| user admin topic readwrite
user user topic /iot/user/+
|
这样就给admin赋予了所有topic的订阅及发布权限,而user只能在/iot/user/+这个通配符权限下面进行订阅及发布。
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
allow_anonymous false
password_file /etc/mosquitto/pwfile
log_dest file /var/logs/mosquitto.log
user mosquitto
listener 1883 0.0.0.0 protocol mqtt
listener 8083 0.0.0.0 protocol websockets
max_connections -1
|
创建服务文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| sudo vim /etc/systemd/system/mosquitto.service
[Unit] Description=Mosquitto MQTT Broker Documentation=man:mosquitto.conf(5) man:mosquitto(8) After=network.target Wants=network.target
[Service] Type=simple NotifyAccess=main ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto ExecStartPre=/bin/chown mosquitto:mosquitto /var/log/mosquitto ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto ExecStartPre=/bin/chown mosquitto:mosquitto /run/mosquitto
[Install] WantedBy=multi-user.target
|