Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Espressif
- 배당
- 애플
- raspberry pi
- homebridge
- Apple
- 티스토리챌린지
- 공모주
- 매터
- MQTT
- Python
- esp32
- RS-485
- 나스닥
- 미국주식
- 홈네트워크
- 오블완
- matter
- 월패드
- ConnectedHomeIP
- 퀄컴
- Home Assistant
- 해외주식
- 파이썬
- 힐스테이트 광교산
- Bestin
- 국내주식
- 엔비디아
- 코스피
- 현대통신
Archives
- Today
- Total
YOGYUI
Mosquitto authentication (사용자 인증) 설정 본문
반응형
MQTT broker 서비스 mosquitto에 사용자 인증 기능을 추가해 최소한의 보안을 확보하자
참고: www.steves-internet-guide.com/mqtt-username-password-example/
1. 패스워드 파일(텍스트) 생성
터미널에서 다음 명령 수행 (최초 파일 생성) 후 비밀번호를 두 차례 입력해주면 파일이 생성된다
mosquitto_passwd -c [파일이름] [사용자이름(id)]
실행결과 >>
pi@raspberrypi:~ $ mosquitto_passwd -c pl.txt yogyui
Password:
Reenter password:
pi@raspberrypi:~ $ cat pl.txt
yogyui:$6$xP5SA187Rwgqdoix$0LEE1yR0kQ7pqT4calekhqN3dj3hJ0eTk6DlgzL4G3cniZH9xc7Mc5QstBNTp+B9og+9D8npI/nux1ONL5IqkQ==
내가 입력한 암호가 암호화되어 텍스트로 저장된 것을 알 수 있다
동일한 파일에 사용자 추가는 다음 명령으로 수행
mosquitto_passwd -b [파일이름] [사용자이름(id)] [비밀번호]
실행 결과 >>
pi@raspberrypi:~ $ mosquitto_passwd -b pl.txt yogyui2 12345678
pi@raspberrypi:~ $ cat pl.txt
yogyui:$6$xP5SA187Rwgqdoix$0LEE1yR0kQ7pqT4calekhqN3dj3hJ0eTk6DlgzL4G3cniZH9xc7Mc5QstBNTp+B9og+9D8npI/nux1ONL5IqkQ==
yogyui2:$6$zeRgkUOW0+oXUaE6$ZGQMFBoWUanu0Im3U/u/15j78nLVh5uK/687voiCV0JpRRvMHWCW+wsqTweJ9YEqRxJeUAbBK58n8zad3PGp/g==
사용자 삭제는 다음 명령으로 수행
mosquitto_passwd -D [파일이름] [사용자이름(id)]
실행 결과 >>
pi@raspberrypi:~ $ mosquitto_passwd -D pl.txt yogyui2
pi@raspberrypi:~ $ cat pl.txt
yogyui:$6$xP5SA187Rwgqdoix$0LEE1yR0kQ7pqT4calekhqN3dj3hJ0eTk6DlgzL4G3cniZH9xc7Mc5QstBNTp+B9og+9D8npI/nux1ONL5IqkQ==
mosquitto 설치 경로로 생성된 파일 이동
pi@raspberrypi:~ $ sudo mv pl.txt /etc/mosquitto/pl.txt
pi@raspberrypi:~ $ ls /etc/mosquitto
ca_certificates certs conf.d mosquitto.conf pl.txt
2. Config 파일 수정
mosquitto.conf 파일에서 필요한 부분을 수정
(allow_anonymous, password_file, log_dest 속성만 추가, 설정할 수 있는 속성들에 대한 문서는 mosquitto.org/man/mosquitto-conf-5.html 참고)
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
per_listener_settings false
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
allow_anonymous false
password_file /etc/mosquitto/pl.txt
log_dest stdout
3. Mosquitto 실행 및 동작 확인
mosquitto 실행 (파라미터 -c 에 config 파일 경로 지정)
sudo mosquitto -c /etc/mosquitto/mosquitto.conf
Python으로 간단하게 접속 시도하는 테스트 코드를 만들어보자
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print(">> Connected flags ", str(flags), "result code ", str(rc))
def on_disconnect(client, userdata, flags, rc=0):
print(">> Disconnected flags ", str(flags), "result code ", str(rc))
client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
print('wrong password')
client.username_pw_set(username="yogyui", password="12345677") # wrong password
client.connect('localhost', 1883)
client.loop_start()
client.loop_stop()
client.disconnect()
print('correct password')
client.username_pw_set(username="yogyui", password="12345678") # correct password
client.connect('localhost', 1883)
client.loop_start()
client.loop_stop()
client.disconnect()
python console log
wrong password
>> Connected flags {'session present': 0} result code 5
>> Disconnected flags 5 result code 0
correct password
>> Connected flags {'session present': 0} result code 0
>> Disconnected flags 0 result code 0
Result code 0 =connection success, 5 = connection failed
Mosquitto console log를 보면 잘못된 인증 정보는 socket error를 발생시킨 후 자동으로 접속 종료된다
이로써 최소한의 MQTT 보안은 확보된듯하다
(사실 맘먹고 달려들면 왠만하면 뚫릴만한 수준)
반응형
'Hardware > Raspberry Pi' 카테고리의 다른 글
Raspberry Pi - Failed to execute child process "xterm" (No such file or directory) 해결하기 (0) | 2021.08.02 |
---|---|
Raspberry Pi - Real VNC "Cannot currently show the desktop" 문제해결 (0) | 2021.07.30 |
Raspberry Pi - ffmpeg + ffserver 동작환경 설정하기 (0) | 2021.07.30 |
Raspberry Pi - 부팅 시 터미널(LXTerminal)로 파이썬 스크립트 자동실행 (0) | 2021.07.10 |
Raspberry Pi - Zigbee2mqtt 설치 및 실행 (0) | 2021.01.13 |