Openwrt : 일반 계정 설정, openssh 연결.

이 글에선 root 가 아닌 일반 계정을 설정한 뒤, 기본 ssh 서버인 Dropbear 를 해제시키고, openssh 서버를 설치하는 방법까지 알아본다.

이 글에서 사용한 대부분의 방법은 Openwrt 문서에서 가져왔다.

일반 계정 설정

우분투와 비슷하게 sudo 를 사용하게끔 일반 사용자 계정을 설정하기로 한다.

Openwrt : Secure your router’s access 를 참고했다.

위 글에선 몇가지 방법을 제시하고 있는데, 여기선 user-add 를 설치하지 않고 진행하는 방법을 택했다.

사용자 계정 생성

이걸 하기 전에, 가능한한 /home 디렉토리는 Flash 메모리가 아닌 USB 를 사용하게끔 한다. 아예 기기에 USB 포트가 없다면 어쩔 수 없지만, 있다면 사용하는 편이 더 나아 보인다. USB 드라이브를 마운트하는 방법은 또 다른 글 참고.

여기선 /home/dev/sda1 등에 마운트되어 있다고 가정하고, 새롭게 만들려는 사용자명은 usera, 그룹명도 동일하게 usera 로 한다. (데비안/우분투와 같은 형식)

먼저 /home/usera 를 만들고, UID/GID 를 설정한다.

mkdir -p /home/usera
chown 1000:1000 /home/usera

아직 사용자명이 없기에, 할당하려고 하는 UID/GID(모두 1000)로 설정한다.

이제, 사용자를 ‘제대로’ 생성한다.
앞이 파일명이고, : 뒤에 있는 내용을 그 파일에 추가한다.
/etc/shadow 가 혹시 없다면 만들어야 한다.

/etc/passwd: usera:x:1000:1000:계정 설명:/home/usera:/bin/ash
/etc/group: usera:x:1000:
/etc/shadow: usera:RANDOMSTUFWillBeUpdatedWithPasswd:16666:0:99999:7:::

/etc/shadow 에서, ‘RANDOMSTUFWillBeUpdatedWithPasswd’ 항목은 그냥 저대로 넣어도 되고, 아무 문자열이나 넣어도 된다. 어차피 passwd 명령으로 저 내용은 지워지고 새롭게 생성된다. 다만, /etc/shadows 가 있어야 passwd 가 shadow 파일에 내용을 저장하기에, 위 내용을 미리 입력해야 한다.
위 작업을 끝내고, 이제 사용자 패스워드를 생성한다.

passwd usera

사용자는 만들어졌다. 이제 ssh 로그인도 가능하다. 시험삼아 해보는 것도 좋겠지?

sudo 설정

우분투, OpenSuse, macOS 처럼 sudo 명령을 사용하게끔 설정한다. 나중에 다시 설명하겠지만, root 를 가능한한 봉쇄하기 위해서는 openssh 서버에서 root 로그인이 불가능하게끔 설정해야 한다.

sudo 를 사용하려면, 먼저 sudo 꾸러미 설치가 필수.

opkg install sudo

그리고, 여기서 sudo 를 어떻게 사용하는지 몇갈래로 나뉜다. 우분투등과 같이 사용자 자신의 비밀번호를 넣어서 root 권한을 행사하는 방법을 쓸 수도 있고, root 의 비밀번호를 넣고 sudo 권한획득을 할 수도 있다.

여기선, 보안에도 더 좋고, 설정도 간단한, ‘root 비밀번호를 사용하는 법‘을 택했다.
visudo 를 실행하고, 딱 두 줄, 주석을 지워준다.

## Uncomment to allow any user to run sudo if they know the password         
## of the user they are running the command as (root by default).            
Defaults targetpw  # Ask for the password of the target user                 
ALL ALL=(ALL:ALL) ALL  # WARNING: only use this together with 'Defaults targetpw'

이 방식을 쓴다면, 해커는 3가지를 알아내야 한다. 첫째 사용자 ID, 둘째 사용자 Password, 마지막으로 root 의 Password. 이걸 다 털리면.. 뭐 그냥 끝.

다만, ssh 접속을 할 때는 역시나 ID/PW 보다는 공개키를 사용하는 게 좋다.

** 다만, Luci 에서는 여전히 root 로만 접속이 된다. 이 부분도 바꿀 수는 있을 듯 한데, 아직 공부 전.

openssh server 설정, Dropbear 정지.

그냥 Dropbear 를 사용해도 문제는 없는데, Dropbear 는 EdDSA(ED25519) 를 아직 지원하지 않는다. (2022.02 현재 지원된다. 아마도 Openwrt 21 부터 되는 듯?) 되게끔 하는 방법도 있는 모양인데, 그냥 openssh 를 설치하기로 했다.

참고한 문서는 ‘Replacing Dropbear by openssh-server‘ 이다.

이 작업을 하기 위해선 반드시 root 에 password 가 할당이 되어 있어야 한다. 없다면 passwd 명령으로 만들 수 있다.
다만, 현재는 ed25519 가 지원되므로, PasswordAuth/RootPasswordAuth 를 off 로 하고, 공개키로만 접속하게끔 해주는게 더 좋다.

Dropbear 포트 변경 및 재실행

아래처럼 포트를 22가 아닌 다른 포트로 바꾼다. Openssh 도 기본값이 22 이므로, 충돌을 방지하기 위해 조치한다.

/etc/config/dropbear :

config dropbear
        option PasswordAuth 'on'
        option RootPasswordAuth 'on'
        option Port         '2233'
#       option BannerFile   '/etc/banner'

이후, dropbear 를 재실행한다.

/etc/init.d/dropbear restart

이 포트로 ssh 접속이 가능한지 확인한다.

ssh -p 2233 root@192.168.1.1

Openssh Server 설치

opkg update && opkg install openssh-server

설치가 끝난 후 /etc/ssh/sshd_config 파일을 수정해야 한다.

Port xxxx
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no

기본 포트는 22 이지만, 다른 포트로 바꾼다.
Root 로그인을 금지하고, 공개키로만 로그인 가능하게 만든다.

이를 위해서는, 위에서 만든 일반 ID 가 있어야만 한다.

설정이 끝나면, enable 과 (re)start. (했음에도 접속이 안된다면, 재부팅이 속편하다.)

/etc/init.d/sshd enable
/etc/init.d/sshd start 또는 restart

Openssh 접속이 확인되면, Dropbear 는 더 이상 필요가 없으므로 중지한다. (삭제는 불가.)

/etc/init.d/dropbear disable
/etc/init.d/dropbear stop

** 한가지 문제: Openssh 문제 발생시 Dropbear 재 실행

위에서 일반 사용자를 만들 때 USB 를 마운트하여 홈디렉토리를 설정했다. 그런데, 만약 이 디렉토리에 문제가 생긴 경우, ssh 접속이 아예 불가능할 수도 있다. (아직 시험은 안해봤다.)

이럴 경우엔 다시 Dropbear 를 켜야한다.
역시 아직 해보지는 않았지만, Luci 가 가능하다는 전제하에, Luci 의 System – Startup – Initscripts 메뉴에서 Dropbear 를 다시 켜줄 수 있다.

또는, 아예 Dropbear 설정도 초기화 시켜줄 수도 있다. System – Startup – Local Setup 에서 다음 명령을 넣어주면 된다.

# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

echo > /etc/config/dropbear

uci add dropbear dropbear
uci set dropbear.@dropbear[0].RootPasswordAuth='on'
uci set dropbear.@dropbear[0].PasswordAuth='on'
uci set dropbear.@dropbear[0].Port='22'
uci commit dropbear
service dropbear restart
exit 0

Dropbear 가 제대로 시작했다면 위 내용은 지워줘야 다음 부팅 때 다시 실행되지 않는다.

공개키 설치

공개키는 Openwrt 공유기의 /home/usera/.ssh/authorized_keys 에 넣어준다.
Openssh 이므로 RSA, EdDSA 모두 잘 작동한다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.