Mosquitto 비밀번호와 ACL 설정
Mosquitto 2.0은 설정이 없으면 로컬 접속만 허용하므로 listener, 비밀번호 파일, ACL 파일을 함께 설정한다.
Mosquitto 2.0의 기본 동작 변경
Mosquitto 2.0은 listener를 하나도 지정하지 않으면 루프백 주소에만 바인드한다. 같은 서버 내부에서만 접속할 수 있고, 이때에만 익명 접속을 허용한다.
다른 장비에서 접속할 수 있게 하려면 listener를 지정해야 한다. 이 경우 allow_anonymous의 기본값이 false이므로, 인증 설정이 없으면 어떤 클라이언트도 접속하지 못한다.
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/acl
비밀번호 파일
# 파일을 새로 만들며 사용자를 넣는다 (-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을 설정하면 파일에 명시한 토픽에만 접근할 수 있다.
# 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로 치환된다.
설정 반영
listener 설정은 SIGHUP(설정을 다시 읽게 하는 신호)을 전송해도 반영되지 않으므로 처음에는 브로커를 재시작한다. 이후 비밀번호 파일과 ACL 파일만 수정한 경우에는 SIGHUP을 전송하면 브로커가 파일을 다시 읽는다.