이전에 글로 샤오미 로봇청소기에 관한 홈킷 등록방법을 다루긴 했었지만 HA에 등록하는 방법은 생략을 했었습니다.
오늘은 샤오미 1세대 로봇청소기를 Home Assistant(HA)에 등록해 보도록 하겠습니다.

HA에 등록을 위해서는 샤오기 기기의 토큰(Token)을 알아야 합니다.
해당 내용은 HA 공식 홈페이지의 자료를 참고하였습니다.
여러가지 방법들이 존재하는데 제가 사용할 방법은 아이폰을 이용한 방법입니다.
제가 안드로이드 스마트폰이 없어서 안드로이드 폰을 이용한 방법을 사용할 수가 없어요.
그리고 휴대폰(아이폰이든 안드로이드든)을 사용하지 않고 라즈베리파이에서 바로 찾아내는 방법도 존재합니다만 생략했습니다.
이전 글에서 설명했다시피 최대한 라즈베리파이에는 접속을 안하려고 노력 중입니다. (콘솔화면 어려워요!)
그리고 라즈베리파이에서 바로 찾는 방법은 실패하는 경우도 있더라고요. (전 실패했어요. 못찾더라고요.)

이제 본격적으로 시작을 해봅시다.


아이폰(iOS)과 맥(혹은 윈도우)를 이용한 방법

시작하기 앞서 저는 컴퓨터로 맥을 이용하기 때문에 맥 화면을 캡쳐해서 보여드리지만, 윈도우용 프로그램도 똑같기 때문에 
문제가 생기지는 않을겁니다. 


1. 우선은 아이폰에 샤오미 앱(Mi Home)을 설치하고 가이드에 따라서 설정을 완료합니다.

(아마 이 글을 보는 분들은 이미 설정을 완료했을겁니다.)

2. 아이튠즈를 이용하여 컴퓨터에 아이폰 백업을 합니다.

아이튠즈에서 폰 설정에 들어간다음 수동으로 백업을 하면 됩니다. 
(굳이 앞에 자동뱁업 부분을 건드릴 필요없이 오른쪽 부분의 ‘지금 백업’을 누르면 됩니다. )

<iTunes 휴대폰 설정 화면 - 백업>


3. iBackup Viewer 를 다운 받아서 설치합니다.


4. iBackup Viewer 를 실행하고 백업 파일을 불러옵니다.

4-1. 맥
맥에서는 파일 접근권한 문제로 백업파일을 불러올 수가 없습니다.
시스템 환경설정 - 보안 및 개인 정보 보호 - 개인 정보 보호 탭으로 이동하 여
전체 디스크 접근 권한 에 iBackup Viewer 앱을 등록합니다.
그리고 iBackup Viewer 를 실행하면 백업파일을 자동으로 불러오게 됩니다.
4-2. 윈도우
윈도우는 별다른 문제없이 자동으로 백업파일을 불러올겁니다. 
<iBackup Viewer 실행화면 초기>

폰의 배경화면으로 백업이 되어 있군요. (엄한 사진은 지웠습니다.)
배경화면을 클릭하면 백업파일을 불러옵니다.
<iBackup Viewer - 백업파일을 불러온 화면>

5. 맨 마지막 아이콘인 Raw Data를 선택하고 파일을 선택합니다.

아래 캡쳐의 번호에 맞춰 123456789_mihome.sqlite 파일을 저장합니다. 
<iBackup Viewer - Raw Data 화면>

①-②-③ 순으로 파일을 찾고 ④의 Export를 클릭하여 Selected 를 클릭하면 저장이 됩니다.
(파일앞에 숫자는 계정마다 다르니 숫자 뒤에 mihome.sqlite 이 붙었는지 확인하세요.)


6. DB Browser for SQLite 를 다운받아 설치하고 따라하세요.


<DB Browser for SQLite 실행 화면>

①을 누르고 iBackup Viewer에서 저장한 파일을 선택합니다.
②를 누르고 ③ 에 다음을 적습니다.
SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%vacuum%"
④를 누르면 ⑤의 목록이 뜹니다. 그 내용을 마우스 오른쪽을 눌러서 복사합니다.

7. 다음 사이트에서 디크립션을 해줍니다.



①에 위에서 복사한 내용을 붙혀넣습니다.
②(Hex)를 선택합니다.
③에 0을 32개 넣어줍니다.
④(Decrypt)를 누릅니다.
⑤에 나오는 글자를 차례대로 적습니다. 두줄로 나오는데요. 각각 16개씩 총 32개입니다.

그걸 주욱 붙힌게 토큰입니다. (우리가 HA 설정에 적을 내용입니다.)

이렇게 해서 토큰을 얻게 되었습니다. 이제 이 토큰으로 HA에 등록을 하면 됩니다.


HA에 로봇청소기 등록하기

Filezilla와 Atom을 이용하여 configuration.yaml 설정 파일을 불러옵니다.

적당한 위치에 다음을 추가합니다.
#
vacuum:
- platform: xiaomi_miio
host: rockrobo
token: []
들여쓰기는 꼭 신경써서 적도록 합니다.
host 에는 ip를 적게 되어 있는데 보통 로봇청소기에 인터넷을 등록될 때 rockrobo라는 이름으로 공유기에 등록을 하기 때문에 
아이피가 아니라 rockrobo 라고 적어도 됩니다. 
토큰에는 위에서 얻은 32글자를 적어줍니다.

그리고 재시작을 하면 로봇청소기가 등록이 됩니다. 
끝!

토큰얻기만 어렵지 등록은 참 쉽네요. ㅎㅎ


오늘은 Home Assitant 설정 파일에 대해서 얘기를 해보려고 합니다.
이전에 다룬 방법을 이용하여 FileZilla로 hassbian에 접속하여 HA 설정 폴더로 이동을 합니다.

거기에서 configuration.yaml 파일이 기본 설정 파일입니다. 편집을 해서 Atom으로 열어보세요.
homeassistant:
# Name of the location where Home Assistant is running
name: Home
# Location required to calculate the time the sun rises and sets
latitude: []
longitude: []
# Impacts weather/sunrise data (altitude above sea level in meters)
elevation: 0
# metric for Metric, imperial for Imperial
unit_system: metric
# Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
time_zone: Asia/Seoul
# Customization file
customize: !include customize.yaml
http:
api_password: []
base_url: []
...
# Sensors and Switches
sensor: !include_dir_merge_list sensors/
binary_sensor: !include_dir_merge_list binary_sensors/
switch: !include_dir_merge_list switches/
automation: !include_dir_merge_list automations/
group: !include groups.yaml
script: !include scripts.yaml
...
다음과 같은 형식으로 되어 있는데요. ([삭제]는 제 개인 설정이라 지운겁니다.)
저기에 자신의 설정을 입력해주면 됩니다.
# 으로 시작하는 줄은 주석입니다. 실행은 되지 않는 설명을 적는 줄이라고 생각하시면 되요.
여러분들이 원하는 글로 바꾸워도 상관은 없습니다. 물론 지워도 되고요.
그리고 들여쓰기를 지켜주어야 합니다. 들여쓰기로 설정간의 구분을 하기 때문인데요.
예를 들어서 homeassistant: 다음에 들여쓰기가 된 name: 이나 latitude: 는 homeassistant: 설정 내에 존재하는 세부설정입니다.
아래에 위치한 http:는 homeassistant: 와는 별개의 설정을 뜻하죠.
http: 설정에는 api_password:와 base_url:이라는 세부설정이 존재하는 거고요.
이렇게 들여쓰기를 지켜줘야 합니다. 꼭 잊지 마세요.
제일 처음 적히는 애들을 보통 컴포넌트라고 부릅니다. 

이제 차근차근 하나씩 알아보죠.
homeassistant 컴포넌트는 HA의 가장 기본이 되는 설정입니다.
세부설정 name 은 Home Assistant를 설치하고 사용하는 집의 이름을 적는 겁니다. 원하는 이름을 적어주세요.
latitude와 longitude는 현재 집의 위치(위도와 경도)를 나타냅니다.
구글 지도(https://www.google.com/maps)로 이동해서 자신의 집 위치에 마우스를 클릭하면 아래에 그 위치의 정보가 뜹니다.


<경복궁 근처 - 구글맵>


이때 주소 및에 적힌 숫자가 위도와 경도입니다.
latitude에 왼쪽 숫자(여기서는 37.576080), longitude에 오른쪽 숫자(여기서는 126.976011)를 입력해줍니다.

elevation은 높이를 나타냅니다. 아파트라면 높이를 따로 지정을 해줄 수 있는데요. 저는 딱히 지정해두진 않았습니다.
unit_system과 time_zone은 각각 단위와 시간 설정인데요. metric과 Asia/Seoul 로 해주면 됩니다.. 딱히 건드릴 필요가 없어요. 
customize는 차후에 다룰 예정입니다. 그냥 두세요.

아래에 있는 http 컴포넌트는 HA 홈페이지 접속을 위한 설정입니다. 
api_password는 로그인을 하지 않고 암호만을 입력하여 쉽게 접속할 수 있게 해주는 설정입니다. 
원하는 암호를 설정해두면 앞으로는 그냥 암호만으로 로그인이 가능합니다. 물론 아이디,패스워드를 이용한 로그인도 됩니다.
base_url은 홈페이지의 기본 접속 주소를 나타냅니다. duckdns를 이용하여 만들어준 주소를 적어주면 됩니다.
test라는 이름으로 8080포트에 만들었다면 
http://test.duckdns.org:8080 
이러한 식으로 입력해두면 됩니다.

그다음 …으로 표시를 한 곳에 설정들이 있는데 지금은 딱히 건들지 않아도 되어서 그냥 패스하도록 하겠습니다.
좀더 설정을 만지는데 익숙해 지면 그때 다뤄볼까 합니다.

그다음에 sensor,binary_sensor,switch 컴포넌트가 있는데요.
각각 센서와 바이너리센서(켜짐센서), 스위치를 뜻합니다.
센서 컴포넌트는 다양한 상태에 대해서 알려줄수 있는 컴포넌트입니다.
바이너리센서 컴포넌트는 켜짐,꺼짐 두가지 상태만 얘기할 수 있어요. 센서 컴포넌트의 축소형이라고 할 수 있지요.
스위치 컴포넌트는 말그대로 스위치를 뜻합니다. 스위치와 바이너리센서의 차이점은 스위치는 직접 켜고 끌 수 있고 
바이너리센서는 어떠한 상황(센서등을 생각해보면 쉬워요)에 따라 켜지고 꺼지고가 됩니다.

여기서 우리가 눈여겨 볼 명령은 !include 와 !include_dir_merge_list 입니다.
각각의 의미가 다릅니다.

우선 !include는 파일을 불러오는 명령입니다. 뒤에 파일이름을 적으면 됩니다.
!include scripts.yaml 이러한 방식으로요.

하지만 센서나 스위치는 한개만 존재하지 않고 여러 개가 존재하는 경우가 많습니다.
HA 설정 파일에 모든 센서와 스위치를 적으면 보기가 불편할 수도 있고 헷깔리는 경우가 생길 수 있습니다.
이럴 경우에 따로 파일을 만들어서 거기에 센서만 따로 입력해 두고 그 파일을 설정 파일에서 !include 명령을 통해 불러들이는 거죠.
다만 센서와 스위치의 갯수가 더 많이 존재한다면 따로 만들어준 파일도 복잡하게 많은 설정들이 적히게 될겁니다.

예를 들어보죠. 방3개의 보통의 아파트의 스위치를 한번 생각해 보겠습니다. 
그러면 안방,방1,방2 의 등 스위치가 존재하겠죠 베란다가 있다면 베란다 스위치도 있을거예요. 
거실과 부엌, 현관 스위치도 필요할 겁니다. 거기에 화장실도 있을거예요. 
이걸 전부다 파일 하나에 입력하면 어떤거가 무엇을 의미하는지 알기가 상당히 어려워집니다.
아직 설명을 하지 하지 않았지만 스위치 하나당 각각 하나씩 설정을 해줘야 되거든요.

그럴 때 헷깔리지 않게 파일을 여러개 쪼개는 방법을 사용합니다.
안방에 해당하는 스위치 파일을 하나 만들어서 안방등, 안방베란다, 화장실, 화장대 이러한 식으로 묶어서 적습니다.
방1에 해당하는거도 파일을 만들고, 거실과 부엌, 현관등은 같이 묶어서 파일을 만들고..
이렇게 파일을 쪼개서 설정을 해둔다면 나중에 보기도 편하고 관리하기도 편할 겁니다.
그럴 때 쓰는 명령이 !include_dir_merge_list 입니다. 이 명령은 해당 폴더에 있는 모든 파일을 불러오라는 명령입니다.
!include_dir_merge_list sensors/
는 sensors 폴더에 있는 모든 파일을 불러오는 명령입니다.

처음 시작할 때는 구매한 기기가 얼마 없어서 include 만으로도 충분히 사용이 가능하지만 갯수가 늘어나면서 점점 설정이 늘어나면 
관리가 어려워 질겁니다. 그걸 미리 대비하기 위해서 자주 사용할만한 컴포넌트는 !include_dir_merge_list 를 이용하여 
폴더를 미리 지정해 두는게 좋습니다. 물론 서버에도 폴더를 만들어주면 되겠죠?
<HA 설정 폴더>


다음 시간에는 샤오미 로봇청소기 등록방법과 예전에 적어놨던 홈킷 등록방법에 대해서 얘기해보도록 할게요.


지금까지 Home Assistant 설치와 접속을 위한 설정을 했는데요.

오늘은 설정 파일 수정을 위하여 필요한 프로그램에 관한 이야기를 해보려고 합니다. 

  • sftp 접속을 위한 프로그램 소개
  • 설정 파일 수정을 위한 프로그램 소개

1. sftp 접속을 위한 프로그램 소개

우선 ftp 라는 말을 먼저 설명해야되는데요.
File Transfer Protocol, 즉 파일 전송에 관련한 놈입니다. 
이걸 이용해서 서버(Hassbian)와의 파일을 주고 받을 수 있죠.
우리는 여기서 secured가 붙은 sftp를 이용할 겁니다.
ftp보다 보다 안전하고 무엇보다 ssh를 이용하여 파일을 전송하는 방법이기 때문에 따로 프로그램을 설치할 필요가 없어요.
(ftp만 쓰려면 또 프로그램을 설치해야되요…)

저번 시간에 sftp 설정을 대충(?) 마쳐놨기 때문에 이제 sftp 접속을 위한 프로그램을 소개할까 합니다.
무료면서 많은 사람들이 쓰는 FileZilla 입니다.
해당 사이트에 가서 filezilla client 를 받으면 됩니다. 영어라서 무서울 수도 있지만..
한글을 지원합니다!!

<FileZilla 실행화면>


설치를 끝내고 다음을 입력해서 빠른 연결을 해주면 됩니다.
  • 호스트: hassbian.local  (혹은 OpenWRT에서 고정시킨 IP 주소)
  • 사용자명: pi
  • 비밀번호: (비밀번호)
  • 포트: 22

이렇게 접속을 하면 hassbian 접속이 완료가 되죠. 
이전에 만들어준 링크로 HA 설정 폴더로 바로 이동이 가능합니다.

화면 왼쪽은 컴퓨터 목록이고, 오른쪽은 hassbian의 목록입니다.
파일을 끌어서 넣거나 더블클릭을 하면 서로 파일을 교환할 수 있습니다.

2. 설정 파일 수정을 위한 프로그램 소개

이번엔 Home Assistant 설정 파일 수정을 위한 프로그램을 소개해 보겠습니다.
Atom 이라는 프로그램입니다.
Atom은 yaml 확장자(HA 설정파일)를 인식해서 자동 들여쓰기와 문구 등을 보다 쉽게 쓰고 볼 수 있게 해줍니다.
다운받아서 설치를 합니다.
<Atom 실행 화면>

오른쪽 상단에 뭐가 하나 뜨는데요. 하고 싶은거 하면 됩니다. 보통 yes 하면 됩니다.
그리고 아래에 있는 ‘Install a Package’ 를 클릭하고 korean 을 검색하세요.
<Package 검색화면>

한글 메뉴를 설치하면 메뉴를 한글로 볼 수 있습니다.


이제 준비는 모두 끝났습니다. 
파일질라(FileZilla)에서 컴퓨터로 파일을 옮기고 아톰(Atom)으로 수정한 다음에 다시 서버(hassbian)으로 옮기는 작업을 하면 됩니다.

파일을 옮겨서 수정하는 방법 보다 좀 더 쉽게 할 수 있기도 합니다.
서버에서 수정할 파일을 마우스 오른쪽 클릭으로 편집을 하면 파일을 컴퓨터에 다운 받을 필요없이 바로 아톰이 떠서 수정이 가능합니다.
파일을 저장하면 파일질라가 알아서 파일을 업로드 해줘요.

다음에는 본격적으로 설정 파일들을 건드려 보겠습니다.


VPN은 Virtual Private Network의 약자로 해석해보자면 가상 사설망 이라고 하죠.
보통은 IP를 우회하거나 집밖의 컴퓨터와 같은 네트워크로 구성하려고 할 때 많이 사용합니다.

오늘은 우분투 18.04에 VPN 구축을 하려고 합니다.
제가 맥을 사용하고 있다보니 pptp 구성을 사용할 수가 없어서
Strongswan이라는 프로그램을 이용하여 IKEv2 구성을 항 예정입니다.

Home Assistant 설명과는 다르게 기본적인 사용법은 알고 있다라는 가정하에 적도록 하겠습니다.
(무작정 따라해도 되긴하겠지만… 아무것도 모르고 이걸 설명하기는 많이 어려워요.)

오늘 내용의 순서입니다.

  1. StrongSwan 설치
  2. 인증서 만들기 및 ipsec 설정하기
  3. 방화벽 설정하기
  4. 클라이언트 인증서 파일 생성
  5. (옵션) 맥에 직접 적용해 보기


1.  StrongSwan 설치

우선 strongswan을 설치해줍니다. 18.04 부터는 pki가 따로 분리 되었다고 하네요. strongswan-pki 도 같이 설치를 해줍니다.
$ sudo apt install strongswan strongswan-pki

2. 인증서 만들기

우선 인증서를 만들기 위해 디렉토리 생성부터 하고 퍼미션 설정을 합니다.
$ mkdir -p ~/pki/{cacerts,certs,private}
$ chmod 700 ~/pki
이제 인증서를 생성하고 정보를 입력하는 작업을 해줍시다.
2번째 줄의 [이름]에 인증서 이름을, 4번째 줄의 [서버주소또는IP]에는 주소나 IP를 입력해줍니다.
$ ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
$ ipsec pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem --type rsa --dn "CN=[]" --outform pem > ~/pki/cacerts/ca-cert.pem
$ ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
$ ipsec pki --pub --in ~/pki/private/server-key.pem --type rsa | ipsec pki --issue --lifetime 1825 --cacert ~/pki/cacerts/ca-cert.pem --cakey ~/pki/private/ca-key.pem --dn "CN=[IP]" --san "[IP]" --flag serverAuth --flag ikeIntermediate --outform pem > ~/pki/certs/server-cert.pem
이제 인증서를 ipsec 디렉토리에 복사해주고 ipsec의 이전 설정 conf 파일을 백업합니다. vi 나 nano 등을 이용하여 ipsec.conf 파일을 새로 만듭니다.
$ sudo cp -r ~/pki/* /etc/ipsec.d/
$ sudo mv /etc/ipsec.conf{,.original}
$ sudo vi /etc/ipsec.conf
아래 내용을 붙혀넣으세요.
leftid 항목의 @[서버주소또는IP]는 주소일 경우 @를 붙히고 ip일 경우 @를 빼줍니다.
ex) @www.daum.net , 127.0.0.1
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@[IP]
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
eap_identity=%identity
파일 저장을 하고 ipsec.secrets 파일을 수정합니다.
$ sudo vi /etc/ipsec.secrets
아래의 내용을 추가합니다. ID 에는 vpn 로그인시 사용할 아이디, PASSWORD에는 비밀번호를 적습니다.
: RSA "server-key.pem"
ID : EAP "PASSWORD"
StrongSwan의 설정이 완료되었습니다. 서비스를 재시작 해줍니다.
$ sudo systemctl restart strongswan

3. 방화벽 설정

ufw 를 이용하여 방화벽 설정을 합니다.
우선 ssh 등록부터 하세요. 실수를 많이 하는 부분인데 이걸 먼저 해주지 않으면 ssh 접속이 안됩니다.
$ sudo ufw allow OpenSSH
$ sudo ufw enable
이제 vpn에 사용할 포트를 열어줍니다.
$ sudo ufw allow 500,4500/udp
이제 세부설정을 할 겁니다. 
그전에 현재 네트워크 어댑터 이름을 먼저 확인을 해줍니다.
$ ip route | grep default
다음과 같은 형태로 출력이 되는데 dev 와 proto 사이의 어댑터 이름 기억하세요. eth0 가 아닐 수도 있습니다.
default via 203.0.113.7 dev eth0 proto static
이제 /etc/ufw/before.rules 파일을 수정해 줍니다.
$ sudo vi /etc/ufw/before.rules
*filter 바로 위에 다음을 추가합니다. 중간중간 나오는 eth0는 위에서 나온 어댑터 이름으로 바꾸세요.
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
*filter ...
*filter 내용이 끝나는 바로 뒤에 다음 추가합니다.
...
:ufw-not-local - [0:0]
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
저장을 하고 이제 /etc/ufw/sysctl.conf 수정합니다.
$ sudo vi /etc/ufw/sysctl.conf
다음 두개는 주석을 제거해줍니다.
net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
다음 두개는 추가해줍니다.
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
설정이 다 끝났습니다. 방화벽 재시작 합시다.
$ sudo ufw disable
$ sudo ufw enable

4. 클라이언트 인증서 파일 생성

다음 명령을 이용하여 클라인터 인증서 파일 ca-cert을 생성합니다.
$ cat /etc/ipsec.d/cacerts/ca-cert.pem >> ca-cert.pem
생성된 ca-cert.pem 파일을 원하는 클라이언트에 복사하여 사용하면 됩니다.

5. (옵션) 맥에 직접 적용해 보기

위에서 생성한 파일을 맥에 복사를 하고 더블클릭으로 인증서 등록을 합니다.
키 체인 접근 에서  들어가서 IP 보안(IPsec) 항상 신뢰 로 변경합니다.

<키 체인 접근 실행 화면>


네트워크 환경설정 들어가서 네트워크 추가를 합니다.
(인터페이스: VPN, VPN 유형: IKEv2)
연결설정에서 서버주소와 원격 ID 에 위에서 설정해준 vpn 서버 컴퓨터의 주소 또는 IP를 입력해줍니다.
(둘다 같아요.)
그리고 인증설정 들어가서 아이디 패스워드 입력하고 확인을 하면 설정이 완료됩니다.

연결을 눌러서 잘 되는지 확인해보세요.

16.04에서도 vpn 구성을 했었는데 이번 버전은 pki 가 따로 빠져나와서 그 부분만 조금 바꿔서 사용하면 됩니다.
이상 우분투 18.04 에서 vpn 서버 구성하는 방법이였습니다.


'리눅스' 카테고리의 다른 글

라즈베리파이2에 Retropie 설치  (0) 2015.08.31

Home Assistant의 권한 변경

오늘은 Home Assistant 설정 두번째 이야기입니다.
이전시간에 Hassbian 접속과 관리자 비밀번호 변경에 대해서 알아봤는데요.

우리는 ssh 를 이용하여 ftp 서비스를 사용할겁니다. 보통 sftp 라고 하는데요.
이 방법을 이용하여 Home Assistant의 설정을 수정하려고 합니다.
하지만 이 이야기를 하기 앞서 꼭 다루어야 할 사항이 있는데요. 

오늘은 그 이야기에 대하여 해보려고 합니다. 오늘 할 내용은 다음과 같습니다.

  1. 소유권과 권한 설명
  2. Home Assistant 의 소유권과 권한(퍼미션) 변경 방법
  3. 직접 적용하기
  4. (옵션)Home Assistant 설정 폴더 링크 만들기
(다  아는 설명이면 바로 3번으로 이동하면 됩니다.)


1. 소유권과 권한 설명

Hassbian은 운영체제입니다. 그리고 Home Assistant 는 운영체제 안에 깔려있는 프로그램이고요.
Hassbian은 데비안 운영체제를 기반으로 이루어져 있고 그 데비안은 리눅스 운영체제 중 하나이죠.

왜 이러한 얘기를 하느냐? 
리눅스 운영체제는 항상 소유권과 권한(퍼미션)이라는 걸 중요시 합니다.
이 파일은 누구꺼냐 누가 볼 수 있냐 누가 실행할 수 있냐 부터 시작해서
파일의 소유자와 소유자가 아닌 자가 가진 권한도 각각 다르게 설정이 가능합니다.
따라서 프로그램을 설치를 하면 그 프로그램의 소유자가 누구인가? 소유자 외에 누가 그 설정을 건드릴 수 있느냐 등을 알아야 되고 
필요에 따라서 따로 설정을 해 주어야 하죠.

권한(퍼미션)은 크게 3가지로 구분됩니다. 읽기(Read), 쓰기(Write), 실행(eXecute).. rwx 로 표현을 합니다.
이 rxw는 다시 각각 숫자로 표시하기도 하는데 r=4, w=2, x=1로 씁니다.
만약 파일에 읽기와 쓰기 권한이 있다면 rw 혹은 6(=4+2)으로 표현합니다. 
읽기,쓰기,실행 전부 권한이 있다면 rwx, 7로 표현하죠.

이러한 권한 부여는 총 3가지 종류로 부여가 가능합니다.
소유자/그룹/미소유자

소유자는 말그대로 그 파일(혹은 프로그램)의 소유자를 뜻합니다. 
그룹은 말그대로 한 집단을 뜻합니다. 그 그룹에 속하는 사용자 전원이 권한을 갖게 됩니다.
마지막 미소유자는 소유자나 그룹에 속하지 않은 사용자를 뜻합니다.

따라서 파일에는 총 3가지 형태의 권한이 부여가 되어 있죠.
아래를 캡쳐를 보면 권한 부여 형태가 나옵니다.

<ls -al 명령 (현재 폴더의 파일을 보는 명령 - 숨긴파일과 소유권,권한이 나온다)>


.bashrc 라는 파일은 rw-r—r—  이렇게 되어 잇죠. 세개씩 떼서 소유자/그룹/미소유자의 권한을 뜻합니다.
사용자는 읽기,쓰기가 가능하고 그룹은 읽기만 가능하며, 미소유자도 읽기만 가능하군요. 숫자로 644가 됩니다.
그리고 pi,homeassistant, root 사용자 들이 적혀있는데 왼쪽이 소유자를 뜻하고 오른쪽이 그룹명을 뜻합니다.
그룹과 소유자 이름이 같아서 헷깔릴 수 있는데 서로 다른 이름입니다. 
pi 라는 사용자, pi라는 그룹명 .. 각각 다른 의미를 갖죠.

groups 라는 명령을 이용하면 pi 사용자가 속해 있는 그룹목록들이 나옵니다.

<groups 명령>
pi 사용자는 pi 라는 그룹과 adm, dialout,cdrom,… 마지막으로 homeassistant 라는 그룹까지 속해 있다는 얘기예요.
homeassistant 사용자는 homeassistant 그룹과, dialout,… 해서 gpio 그룹까지 속해 있군요.


2. Home Assistant 의 소유권과 권한(퍼미션) 변경 방법

간략하게 소유권과 권한에 대해 알아봤는데요.
그렇다면 Home Assistant(이하 HA) 라는 프로그램은 누가 소유자인가? 그 설정을 누가 할 수 있는가? 이걸 알아야 될텐데요.
그 소유자는 homeassistant 라는 사용자(계정)입니다.
우리가 hassbian에 접속할 때 사용한 pi라는 사용자는 HA를 수정을 하지 못해요.
hassbian을 설치한 사람은 나인데 내가 따로 설정해 놓지도 않은 homeassistant 사용자가 소유권을 가지냐 의문이 들죠.

우선 homeassistant 계정은 가상의 사용자입니다. 보안 혹은 실수방지(파일을 지운다던지 등)를 위해서 ssh 접속을 하는 pi 사용자와 구분을 해둔거죠.
하지만 이 점 때문에 상당히 귀찮아지게 도는데요.
소유자가 본인(pi)가 아니기 때문에 HA의 설정을 수정할 수가 없기 때문이죠.

이 문제를 해결을 위해 세가지를 선택할 수 있습니다.
1) Hassbian 접속을 pi에서 homeassistant 계정으로 바꾸기
2) 관리자 계정으로 강제로 HA 권한 접근
3) pi 사용자에게 HA 수정 권한을 갖게 그룹 권한 변경하기 

1) Hassbian 접속을 pi에서 homeassistant 계정으로 바꾸기

homeassistant 계정은 외부 로그인이 금지된 계정입니다. 리눅스 운영체제에서는 이러한 로그인 금지 계정이 종종 나오는데요.
보안 상의 이유나 불필요 때문에 꺼두기 때문입니다. 
그래서 ssh로 접속할 때 pi 대신 homeassistant 로 로그인 자체를 할 수가 없죠. 
외부 접속이 금지되어 있기 때문에 어쩔 수 없이 내부에서 로그인해 들어가야합니다.
pi 로 먼저 로그인을 한 후에 계정을 바꿔주는 작업을 해주면 됩니다.
pi 사용자가 homeassistant 계정으로 접근하는건 hassbian에서 아주 쉽게 할 수가 있습니다.
hashell 명령을 이용하면 됩니다.


프롬프트를 통해서 homeassistant로 사용자가 변경된게 보이죠? 

~는 해당 사용자의 홈폴더를 의미하기 때문에 사용자가 변경되면서 /home/pi로 표시가 됩니다.
이제 이 상태로 HA 설정을 해주면 됩니다. (우리가 원하는 방식은 아니라서 자세한 설명은 생략합니다.)
다 완료가 되면 exit 명령으로 빠져나오면 되죠.

2) 관리자 계정으로 HA 권한 접근

관리자 계정(슈퍼유저라고도 함)은  root 라는 아이디를 갖습니다.
이 사용자는 모든 권한을 무시하고 데이터에 접근이 가능하죠.
하지만 권한 남용(?)이나 보안의 이유로 이러한 root 사용자의 사용은 기본적으로 금지가 되어 있습니다.
금지를 풀어서 관리자 계정을 사용해 보려면 2가지 방법이 있는데요.
하나는 root의 사용 금지 자체를 풀어주는 것과 나머지 하나는 관리자 실행명령만 따로 사용하는겁니다.
root의 사용 금지를 풀어버리면 보안 상 큰 문제가 발생할 우려가 많습니다.
우리는 후자인 관리자 실행명령을 사용해 보겠습니다.
관리자 실행명령이라는게 조금 헷깔릴 수도 있는데 쉽게 설명하면 '이 명령은 관리자가 실행하는 명령으로 인식해라’라는 명령을 쓰겠다는 겁니다.
sudo 라는 명령인데요. 모든 명령에 sudo 를 입력하면 관리자가 실행하는 걸로 인식을 합니다.
참 간단한 명령이죠? 하지만 이것도 너무 남발을 하면 좋지 않으니 필요할 때만 sudo 명령을 쓰기를 추천합니다.

하지만 이 방법의 치명적인 문제가 있습니다.
관리자가 실행하는 걸로 인식을 하기 때문에 파일을 생성하면 소유자를 관리자로 지정해 버리기 때문이죠. 

나중에 소유자 변경 작업이 필요하게 됩니다. 
(이방법도 우리가 원하는 방식은 아니라서 자세한 설명은 생략합니다.)

3) pi 사용자가 HA 권한 갖게 하기

HA의 소유권은 homeassistant가 가지고 있습니다. 그리고 homeassistant 그룹이 할당되어 있습니다.
설정 폴더의 권한을 775로 바꾼다면 그룹도 모든게 가능해집니다. 위에서 pi는 homeassistant 그룹에도 속해 있다고 했었죠.
따라서 pi 또한 쓰기가 가능해지죠. 다음 명령을 쓰면 됩니다.
pi@hassbian:~ $ sudo chmod -R 775 /home/homeassistant/.homeassistant/

<권한 변경후 목록 보기 명령 사용>

이렇게 사용하면 pi 라는 계정으로 파일을 수정할 수 있습니다.
(물론 여기서 무엇을 수정하고 이럴 생각은 없어요. 차후에 쉽게 수정하는 방법도 얘기해볼게요.)
파일을 수정하는데는 아무런 문제가 없지만 없는 파일을 만들어주는 경우 문제가 발생하게 됩니다.
pi가 만들면 소유자와 그룹이 각각 pi,pi 로 바뀌게 됩니다.
물론 pi 사용자가 수정하고 그러는데는 아무런 문제가 없지만 homeassistant 계정은 pi 그룹이 아니기 때문에 그 파일을 수정할 권한이 없습니다.
그래서 homeassistant 계정을 pi 그룹에 추가해서 이 문제를 해결할 겁니다.

3. 직접 적용하기

이제 위에 설명한 3)의 내용을 토대로 서버에 적용해 보도록 해요.

우선 pi 계정으로 hassbian에 로그인하고 다음 명령을 입력합니다.
$ sudo chmod -R 775 /home/homeassistant/.homeassistant/
$ sudo usermod -aG pi homeassistant
1줄 의미: HA 설정 폴더 권한 변경
2줄 의미: homeassistant 계정을 pi 그룹에 추가

나중에 sftp에서 파일을 올렸을때 자동으로 775 퍼미션이 되도록 /etc/ssh/sshd_config 파일을 수정합니다.
$ sudo nano /etc/ssh/sshd_config

<콘솔화면에서 nano 에디터 실행화면>

115번째(혹은 그 근처.. 거의 맨 밑에 위치해 있어요) 줄에 -u 0002 를 추가해 주세요. 

# override default of no subsystems
Subsystem       sftp    /usr/lib/openssh/sftp-server -u 0002

그리고 컨트롤+X를 누르고 저장(Y)를 누른 후 엔터를 눌러 종료하면 됩니다. 
그리고 다음 명령을 이용하여 ssh 서버를 재시작 해줍니다.
sudo service ssh restart
이러면 소유자와 권한 문제가 해결이 됩니다.


4. (옵션)Home Assistant 설정 폴더 링크 만들기

나중에 sftp 접속을 할 때 귀찮은 점이 하나 있는데요. 바로 HA 설정 폴더의 위치로 이동입니다.
/home/homeassistant/.homeassistant 라는 폴더로 이동하는게 클릭질이 좀 필요합니다. (한 세번..?)
이걸 한번에 처리할 수 있게 하려고 합니다. 링크를 만들어서요.
다음 명령을 치면 됩니다.
$ ln -s /home/homeassistant/.homeassitant homeassistant

<링크 생성후 파일 확인 장면>

이러면 나중에 sftp 접속시 간단하게 폴더 이동이 가능해집니다.


오늘은 참 많은 얘기를 했는데요. 리눅스 운영체제 자체가 윈도우와는 달라서 사용하기 불편해서 접속이 꺼려집니다.
오늘 이렇게 접속해서 설정을 마쳤으니 업데이트 할때를 제외하고 따로 접속할 일은 없을겁니다.

쉽게 설명한다고 적어봤는데 뭔가 상당히 어수선하고 정신이 없는거 같아요 ㅠㅠ
글솜씨가 영 꽝이라…. ㅠㅠ

다음시간에는 sftp 를 이용하여 파일을 업로드하고 바로 수정하는 방법에 대해서 해보겠습니다.


+ Recent posts