글 / MQTT 메시징

Mosquitto 비밀번호와 ACL 설정

Mosquitto 2.0은 설정이 없으면 로컬 접속만 허용하므로 listener, 비밀번호 파일, ACL 파일을 함께 설정한다.

작성일 · 읽는 시간 2분 · Mosquitto 2.0 기준

Mosquitto 2.0의 기본 동작 변경

Mosquitto 2.0은 listener를 하나도 지정하지 않으면 루프백 주소에만 바인드한다. 같은 서버 내부에서만 접속할 수 있고, 이때에만 익명 접속을 허용한다.

다른 장비에서 접속할 수 있게 하려면 listener를 지정해야 한다. 이 경우 allow_anonymous의 기본값이 false이므로, 인증 설정이 없으면 어떤 클라이언트도 접속하지 못한다.

text/etc/mosquitto/mosquitto.conf
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/acl

listener 지정 여부와 인증 설정에 따른 접속 허용 범위

비밀번호 파일

bash
# 파일을 새로 만들며 사용자를 넣는다 (-c는 있던 파일을 덮어쓴다)
sudo mosquitto_passwd -c /etc/mosquitto/passwd robot3
# 두 번째 사용자부터는 -c 없이 더한다
sudo mosquitto_passwd /etc/mosquitto/passwd monitor
# 사용자를 지운다
sudo mosquitto_passwd -D /etc/mosquitto/passwd olduser

ACL 파일

acl_file을 설정하면 파일에 명시한 토픽에만 접근할 수 있다.

text/etc/mosquitto/acl
# robot3은 자기 토픽에 쓰기만 한다
user robot3
topic write plant/line1/robot3/#

# monitor는 전체를 읽기만 한다
user monitor
topic read plant/#

# 사용자마다 자기 이름이 든 명령 토픽만 읽는다
pattern read cmd/%u/#
  • user <이름>: 이후에 오는 topic 줄을 그 사용자에게 적용한다. 이름은 비밀번호 파일의 사용자 이름이며 client id가 아니다.
  • topic [read|write|readwrite|deny] <토픽>: 접근 종류를 생략하면 읽기와 쓰기를 모두 허용한다.
  • pattern: user 줄 뒤에 있어도 모든 사용자에게 적용된다. %u는 사용자 이름, %c는 client id로 치환된다.

ACL 파일이 사용자마다 허용하는 토픽과 접근 종류

설정 반영

listener 설정은 SIGHUP(설정을 다시 읽게 하는 신호)을 전송해도 반영되지 않으므로 처음에는 브로커를 재시작한다. 이후 비밀번호 파일과 ACL 파일만 수정한 경우에는 SIGHUP을 전송하면 브로커가 파일을 다시 읽는다.

설정 종류별 반영 방법(재시작과 SIGHUP)