저는 새로운 환경에서 개인적인 프로젝트를 시작하거나 간단한 테스트를 돌려야 할 때, 주로 AWS 의 EC2 를 사용합니다.
AMI 를 활용하면 동일한 환경을 빠르게 구축할 수도 있고, 가볍고 단순한 작업 정도는 EC2 프리티어에서도 충분히 가능하기 때문입니다.
이 때 EC2 최초 접속 시에 가장 먼저 설정하는 세 가지가 있는데, 매번 찾아보는 것이 번거로워 정리해두려고 합니다.
1. Root 사용자 패스워드 설정
보안상의 이유로 Linux 에서는 root 사용자 계정이 초기에 활성화되어 있지 않습니다.
따라서 최고 사용자 권한이 필요한 명령의 경우, 일회성으로 sudo
를 사용해 각각의 명령을 수행해주어야 합니다.
하지만 매번 터미널 작업 시마다 sudo
와 함께 명령을 작성하는 것이 생각보다 번거로운 일이라,
보통 root 계정으로 로그인하여 터미널 작업을 수행하곤 합니다.
아래는 Ubuntu root 계정 로그인을 위한 초기 패스워드 설정 방법입니다.
$ sudo passwd root
위 명령으로 root 계정의 초기 패스워드를 설정하면, 앞으로는 비밀번호와 함께 root 계정으로 로그인할 수 있게 되고,
명령 단위가 아닌 세션 단위로 최고 사용자 권한을 사용할 수 있습니다.
$ su -
# 비밀번호 입력
위 명령으로 root 계정에 로그인할 수 있습니다.
2. 접속 포트 변경
EC2 에 SSH 방식으로 최초 접속할 때는 22번을 기본 포트로 사용하게 됩니다.
하지만 22번은 잘 알려진 SSH 기본 포트이기 때문에 보안 상 취약점이 되기도 합니다.
따라서 저는 EC2 최초 접속 시에 기본 포트를 변경하고, 이후 접속은 변경된 포트를 사용하여 접근하는 방법을 사용합니다.
아래는 Ubuntu 의 SSH 포트를 변경하는 방법입니다.
사전에 AWS EC2 보안그룹의 인바운드 규칙에 새로운 포트번호에 대한 규칙을 추가해주어야 합니다.
$ sudo vi /etc/ssh/sshd_config
sshd_config
파일을 편집기로 열어보면 아래와 같은 내용을 확인할 수 있습니다.
...
Include /etc/ssh/sshd_config.d/*.conf
#Port 22
#AddressFamily any
...
여기서 #Port 22
의 주석을 해제하고, 이후 사용할 새로운 포트 번호를 입력한 뒤 저장해줍니다.
...
Include /etc/ssh/sshd_config.d/*.conf
Port 9292
#AddressFamily any
...
새로운 변경사항을 적용하기 위해 ssh 서비스를 재시작해줍니다.
$ sudo service ssh restart
📌 ufw 설정
만약 Ubuntu Firewall(ufw) 이 활성화되어 있다면, 기존 SSH 22번 포트를 막고 새로운 포트를 열어주어야 합니다.
ufw 는 기본적으로 비활성화되어 있으며, 활성화 여부는 아래 명령을 통해 확인할 수 있습니다.
sudo ufw status verbose
Status: inactive
ufw 가 활성화되어 있다면 아래 명령을 통해 포트 방화벽 설정을 적용합니다.
sudo ufw deny 22
sudo ufw allow 9292
📌 ec2 접속
이제 앞으로는 변경된 포트 번호를 사용하여 EC2 에 접근하여야 합니다.
아래는 .pem
키 방식의 SSH 접근에서 포트 번호를 지정하여 접근하는 명령입니다.
ssh -i "test_20230513.cer" ubuntu@1.23.45.67 -p 9292
기존 포트 번호인 22번으로 접근할 경우, 정상적으로 접근이 거부되는지를 확인합니다.
ssh -i "test_20230513.cer" ubuntu@1.23.45.67
ssh: connect to host 1.23.45.67 port 22: Connection refused
3. needRestart 설정(Ubuntu 22.04 LTS)
📌 Kernal Hint 비활성화
아래는 Ubuntu 22.04 LTS 버전의 EC2 에서 apt
를 사용한 패키지 설치/업데이트/제거 시 발생하는 Kernal Hint 를 제거하는 설정입니다.
Ubuntu 22.04 LTS 버전에서는 apt
를 사용한 패키지 작업 이후, 재시작되어야 하는 daemon 프로그램을 자동으로 검사하여 로그를 출력합니다.
이러한 작업은 needRestart
라는 기본 패키지를 통해 수행되는데, 이 때 새로운 버전의 Kernal 을 사용하기 위해서는 시스템을 재시작하여야 한다는 Kernal Hint 를 함께 띄워주게 됩니다.
문제는 위 메시지가 apt
작업 시마다 매번 출력된다는 점입니다.
EC2 환경 구축 후 여러가지 패키지를 설치하여야 하는데, 위 메시지가 매번 출력되는 것이 굉장히 번거롭고 색상도 참 눈이 아픕니다.
아래 파일의 내용을 수정해줌으로서 Kernal Hint 를 비활성화할 수 있습니다.
$ sudo vi /etc/needrestart/needrestart.conf
아래 내용에서 kernelhints 옵션값을 0
으로 변경한 뒤 저장해줍니다.
...
# Enable/disable hints on pending kernel upgrades:
# 1: requires the user to acknowledge pending kernels
# 0: disable kernel checks completely
# -1: print kernel hints to stderr only
$nrconf{kernelhints} = 0;
📌 restart 설정
사실 needRestart
패키지에서 출력하는 메시지는 Kernal Hint 만이 아닙니다.
apt
를 사용한 패키지 작업 이후, 관련 패키지를 사용하는 서비스들 중 자동으로 재시작할 서비스를 선택하는 메시지도 매번 함께 출력됩니다.
따라서 같은 파일에서 아래 내용을 수정해주어야 합니다.
$ sudo vi /etc/needrestart/needrestart.conf
# Restart mode: (l)ist only, (i)nteractive or (a)utomatically.
#
# ATTENTION: If needrestart is configured to run in interactive mode but is run
# non-interactive (i.e. unattended-upgrades) it will fallback to list only mode.
#
$nrconf{restart} = 'l';
restart 옵션값을 l
로 변경하게 되면,
재시작이 필요한 서비스들을 목록 (l)ist only
로만 확인한 뒤, 이후 사용자에 의해 수동으로 재시작함을 의미합니다.
제공하고 있는 다른 restart mode 옵션은 아래와 같습니다.
늘 잘 읽고 있습니다. 공부하는 흐름이 좋다고 생각했었는데 일 하면서도 흐름을 잘 잡으시네요 👍