iwinv 서버 기본설정 (2) - sshd 설정

SIMPLISM·2021년 8월 15일
0

도쿠위키.wiki

목록 보기
3/7
post-thumbnail

시작하면서..

인터넷 상에 올라와 있는 서버니까 아무래도 해킹의 우려가 있다. 물론 호스팅 업체(AWS, iwinv 등)에서 운영하는 방화벽이 있으니까 어느정도는 보호가 되긴하지만... 나도 스스로 보안 상의 허점을 남겨둘 이유는 딱히 없으니... 그것부터 하자.

참고) 명령어 앞에 # 문자가 있는 경우에는 root로 실행한 것, $ 문자가 있는 경우에는 ubuntu 계정으로 실행한 경우이다.

설정파일 변경 전 백업

작업 전 설정파일을 백업해두는 것은 선택이 아닌 필수!😉

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config_20210815

보통 내 경우에는 원본 파일명_날짜 형태로 동일경로에 백업해둔다. 이렇게 백업해둔 설정파일은 설정 변경 후 문제가 생기면 원상복구 할 때 사용하기도 하고, 변경내용을 확인할 때 사용한다.

(취소) ssh 포트번호 변경

22번 포트는 ssh에서 기본포트(wellknown port)이므로 가능하면 다른 번호로 변경해주는 것이 좋다.

# vi /etc/ssh/sshd_config

설정파일 앞에 있는 주석표기인 # 문자를 지우고 22122로 변경한다.

# diff /etc/ssh/sshd_config_20210815 /etc/ssh/sshd_config
15c15
< #Port 22
---
Port 122
#

포트번호를 바꾸고 싶었지만... iwinv에서 제공하는 방화벽 설정을 찾을 수 없어서 포트번호는 원상복구를 했다.😨

세션 타임아웃 변경

# cat /etc/ssh/sshd_config | grep ClientAlive
#ClientAliveInterval 0
#ClientAliveCountMax 3

기본적으로 설정되어 있는 것을 보니 세션을 자동으로 종료하지 않도록 설정되어 있다. 참고한 문서에 나와있는대로 30분으로 설정한다.

# vi /etc/ssh/sshd_config
# cat /etc/ssh/sshd_config | grep ClientAlive
ClientAliveInterval 600
ClientAliveCountMax 3
# diff /etc/ssh/sshd_config_20210815 /etc/ssh/sshd_config
15c15
< #Port 22
---
Port 10022
100,101c100,101
< #ClientAliveInterval 0
< #ClientAliveCountMax 3
---
ClientAliveInterval 600
ClientAliveCountMax 3
#

자동으로 로그아웃되면 불편할 때도 있지만... 보통은 불편함이 늘어나는 만큼 보안이 강화되는 경향이 있다.

root 로그인 불가처리

사용자계정 확보

리눅스 시스템에서 가장 최상위 계정은 root 계정이다. 보통은 root 계정을 확보하면 해당 서버의 모든 작업을 수행할 수 있다.(간혹 커널레벨에 보안솔루션이 설치된 경우에는 root 권한을 제한할 수 있는 경우도 있긴하다.) 그래서 해커들은 주 목표 중에 하나가 root 계정을 확보(=탈취)하는 것이다.

서버의 원격접속에 사용하는 ssh에서 root 로그인을 불가하게 하려면, 일단은 root로 권한 상승이 가능한 일반 계정을 확보해야한다.

sudo 가능한 유저인지 확인

# cat /etc/passwd | grep ubuntu
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
# cat /etc/group | grep ubuntu
adm:x:4:syslog,ubuntu
dialout:x:20:ubuntu
cdrom:x:24:ubuntu
floppy:x:25:ubuntu
sudo:x:27:ubuntu
audio:x:29:ubuntu
dip:x:30:ubuntu
video:x:44:ubuntu
plugdev:x:46:ubuntu
netdev:x:117:ubuntu
lxd:x:118:ubuntu
ubuntu:x:1000:
#

아마도 호스팅 업체에서 가상서버용 OS 이미지를 생성할 때 ubuntu라는 계정을 관리자 권한으로 생성한 듯하다.(AWS도 배포판 이름으로 관리자계정을 만들더라)

# cat /etc/sudoers | grep %
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
#

/etc/sudoers 파일을 보니 admin, sudo 그룹에 포함되어 있는 사용자면 sudo 명령어를 이용해서 root 권한을 일시적으로 획득할 수 있다.

다행이... ubuntu라는 계정이 sudo 권한이 있는 것을 확인했다.

ubuntu 계정 비밀번호 변경

앞으로는 서버에 ubuntu 계정으로 로그인 할 예정이니 ubuntu 계정의 비밀번호를 바꿔야한다.

# passwd ubuntu
New password:
Retype new password:
passwd: password updated successfully
# su - ubuntu
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

$ sudo ls /
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var
$

비밀번호를 바꾸고 sudo 명령어를 실행해서 정상적으로 수행되나 확인한다.

로그인 테스트

ubuntu 계정으로 로그인을 해서 테스트한다. 정상적으로 로그인이 되었으면 다음 단계로 gogo!😎

sshd 설정변경

$ sudo vi /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin no
# the setting of "PermitRootLogin without-password".
$

비밀번호 없는 계정 로그인 불가처리

간혹가다가 특정 애플리케이션을 설치하기 위해서 계정을 생성하고 비밀번호는 id와 동일하게 만들거나 아예 지정을 안하는 경우가 있다. 이런 계정으로 ssh 로그인을 불가하도록 처리한다.

$ cat /etc/ssh/sshd_config | grep PermitEmpty
#PermitEmptyPasswords no
$

현재 설정은 그런 계정도 로그인을 허용하고 있으니 해당 설정의 # 주석문서를 지워서 비밀번호 없는 계정에 대해서 로그인 불가하도록 처리한다.

$ cat /etc/ssh/sshd_config | grep PermitEmpty
PermitEmptyPasswords no
$

설정파일 적용

이제 설정을 완료했으니 ssh 데몬을 재기동하여 설정을 적용한다.

$ sudo systemctl restart ssh

테스트

설정이 정상적으로 됬는지 확인을 위해서 root 계정으로 로그인을 시도해본다.

login as: root
root@iwinv-dokuwiki's password:
Access denied
root@iwinv-dokuwiki's password:

비밀번호를 정상적으로 입력했음에도 Access denied로 뜨는 것을 보니 정상적으로 설정이 적용되었음을 확인할 수 있다.

방화벽 이슈로 적용에 실패했지만.. 포트번호가 변경된 것을 확인하고 싶으면 아래의 명령어로 확인해본다.

$ sudo netstat -an | grep LIST | grep :22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
$

위의 :22 부분을 변경한 포트번호로 바꿔서 정상적으로 조회되면 잘 바뀐 것이다.

마치면서..

설정파일 변경작업은 금방 완료했는데.. iwinv의 방화벽에서 헤매서 한참 걸린거 같다. ssh 기본포트 변경작업은 나중에 방화벽 이슈를 확인해보고 다시 해볼 생각이다.

참고문서

  1. "SSH 보안 설정", web service hardening, https://www.lesstif.com/ws/ssh-43843905.html
profile
go to simple.

0개의 댓글