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