Mosquitto ACL 설정
Mosquitto에서의 ACL(Access Control List) 설정은 사용자 별로 퍼블리시/서브스크라이브 가능한 토픽을 제한할 수 있도록 해주는 강력한 기능
🧾 Mosquitto ACL 설정 개요
- Mosquitto 인증 및 접근 제어 구성 파일
- Password File (
password_file
) : Mosquitto 사용자 계정과 암호가 저장됨.mosquitto_passwd
도구로 생성 가능. - ACL File (
acl_file
) : 사용자의 퍼블리시/서브스크라이브 권한을 설정하는 텍스트 파일.
- Password File (
- Mosquitto 설정 파일 (
mosquitto.conf
) 예시allow_anonymous false password_file /etc/mosquitto/passwords acl_file /etc/mosquitto/acl
🛠️ Password 생성방법
mosquitto_passwd
명령어 사용- 새 파일 생성 및 사용자 등록
mosquitto_passwd -c /etc/mosquitto/passwords username mosquitto_passwd -b -c /etc/mosquitto/passwords username User!Pas1234
- 기존 파일에 사용자 추가
mosquitto_passwd /etc/mosquitto/passwords another_user mosquitto_passwd -b /etc/mosquitto/passwords another_user AnUserP@ss
- 사용자 삭제
mosquitto_passwd -D /etc/mosquitto/passwords username
-c
옵션은 새 파일 생성 시 사용 (⛔ 기존 파일 덮어씀 주의)- 비밀번호는 프롬프트에서 입력하거나
-b
옵션으로 입력 가능
- 새 파일 생성 및 사용자 등록
파일 형식 예시
user1:$2y$05$zAxTn8uDWDxg/PRBxO3eBO6e0IPGuB6syZoeR3rgO3nshReZYYK6W
user2:$2y$05$JwoZLAp9dvUOX6oVa1KAI.QNxuqAzP6LTeox4Ew5kgNC1D5bOmYOG
- 각 줄은
username:password_hash
형식 - 비밀번호는
bcrypt
로 안전하게 해시되어 저장됨
권장 보안 설정
chmod 600 /etc/mosquitto/passwords
chown mosquitto: /etc/mosquitto/passwords
📜 ACL 파일 문법
파일 : /etc/mosquitto/acl
user <username>
topic read <topic>
topic write <topic>
topic readwrite <topic>
예시
# deny
topic deny $SYS/#
# user
user user_a
topic read command/user_a/#
topic write measure/user_a/#
# pattern
pattern read command/%u/#
pattern write measure/%u/#
user master_user
topic read measure/#
topic write command/#
- Mosquitto 내부 시스템 토픽 (
topic deny $SYS/#
)- 모든 사용자에게 접근 차단
- 사용자별 접근 제어 구성
user user_a
: 특정 사용자 지정topic read command/user_a/#
: 본인 ID에 해당하는 토픽만 구독 가능topic write measure/user_a/#
: 본인 ID에 해당하는 토픽으로만 퍼블리시 가능- 예:
measure/user_a/temp
✅
- 예:
- 패턴 접근 제어 구성
%u
: 현재 로그인한 사용자 이름pattern read command/%u/#
: 본인 ID(%u) 가 포함된 토픽만 구독 가능pattern write measure/%u/#
: 본인 ID(%u) 에 해당하는 토픽으로만 퍼블리시 가능
서버 설정 내용
mosquitto.conf
# TCP MQTT
#listener
listener 1883 0.0.0.0
protocol mqtt
# WEBSOCKET MQTT
# listener 9001
listener 9001 0.0.0.0
protocol websockets
allow_anonymous false
password_file /etc/mosquitto/passwords
acl_file /etc/mosquitto/acl
passwords
user_a:$7$101$XgIko7a1yeXbI0KY$m6il ...
master_user:$7$101$XgIko7a1yeXbI0KY$m6 ...
another_user:$7$101$oH0gufSlZ6 ...
...
aclfile
# 디폴트 패턴 (사용자들 기본 규칙)
pattern read command/%u/#
pattern write measure/%u/#
# master_user 별도 허용
user master_user
topic read measure/#
topic write command/#
728x90
'망각의 개발자' 카테고리의 다른 글
ROS2의 핵심 개념, 노드부터 파라메터까지 완벽 이해하기 (0) | 2025.05.05 |
---|---|
ROS2 빠른 설치 및 기본 노드 실행 가이드 (Ubuntu 24.04 기준) (1) | 2025.05.05 |
ROS2, 왜 지금 주목받고 있을까? 로봇 개발 혁신의 새로운 표준 (5) | 2025.05.03 |
[Python] FastAPI, Flask, Django 간단 비교 (2) | 2025.05.02 |
mediaMTX: 강력하고 유연한 오픈소스 실시간 미디어 서버 완벽 분석 (0) | 2025.04.05 |