[Linux] Initial Server Setup Guide
Abstract
이 문서는 새로운 리눅스 원격 서버의 초기 설정을 위한 종합 가이드이다. SSH 연결, 호스트 이름 설정, 사용자 관리, 보안 설정 및 시스템 업데이트까지의 과정을 다룬다.
이 가이드는 새로운 리눅스 서버 인스턴스를 생성한 후, 안전하고 개인화된 환경을 보장하기 위한 필수적인 초기 단계들을 안내한다.
Outline
- 서버에 연결하기
- 초기 서버 설정
- 2.1. 호스트 이름 변경
- 2.2. /etc/hosts 파일 업데이트
- 2.3. 터미널 프롬프트 사용자화
- 사용자 및 보안 관리
- 3.1. 새 사용자 생성
- 3.2. SSH 인증 설정
- 3.3. 방화벽 설정 (UFW)
- 시스템 유지보수
- 4.1. 패키지 업데이트
- 4.2. 불필요한 패키지 정리
- 개발 환경 구성
- 시간대 설정
1. 서버에 연결하기
제공된 비공개 SSH 키를 사용하여 서버에 연결한다.
1
ssh -i /path/to/your-private-key.pem username@your_server_ip
명령어 설명
ssh -i: 인증에 사용할 ID 파일(비공개 키)을 지정한다./path/to/your-private-key.pem: 다운로드한 비공개 키의 경로이다.username@your_server_ip: 서버의 사용자 이름과 IP 주소이다.
2. 초기 서버 설정
2.1. 호스트 이름 변경
서버의 호스트 이름을 개인화한다.
- 현재 호스트 이름 확인:
1
hostnamectl
- 새 호스트 이름 설정:
1
sudo hostnamectl set-hostname my-dev-server이 변경 사항은
/etc/hostname파일을 수정하므로 재부팅 후에도 유지된다.
2.2. /etc/hosts 파일 업데이트
해결(resolution) 문제를 방지하기 위해 새 호스트 이름을 로컬 IP 주소에 매핑한다.
hosts파일 편집:1
sudo nano /etc/hosts호스트 이름 업데이트:
127.0.1.1또는127.0.0.1에 연결된 이전 호스트 이름을 새 이름으로 교체한다.- 적용하기
hostname명령어로 확인하고,exec bash로 즉시 반영한다.
2.3. 터미널 프롬프트 사용자화
전체 호스트 이름이 표시되도록 프롬프트를 수정한다.
현재 사용자의 경우
.bashrc편집:1
nano ~/.bashrc
PS1수정:PS1정의에서\h(짧은 호스트 이름)를\H(전체 호스트 이름)로 변경한다.- 변경 사항 적용:
1
source ~/.bashrc
모든 새 사용자를 위한 표준 방법
/etc/skel/.bashrc 파일을 수정하여 새로 생성되는 모든 사용자 계정에 기본 설정을 제공한다.
- 스켈레톤
.bashrc편집:1
sudo nano /etc/skel/.bashrc PS1수정: 이전과 같이\h를\H로 변경하고 파일을 저장한다.
참고: 이 변경은 이 수정 이후에 생성된 사용자에게만 영향을 미치며, 기존 사용자의 설정은 변경하지 않는다.
3. 사용자 및 보안 관리
3.1. 새 사용자 생성
보안을 강화하기 위해 일상적인 작업에는 기본 ubuntu 사용자 대신 새 사용자를 만든다.
- 새 사용자 추가:
1
sudo adduser newusername - 관리자 권한 부여:
1
sudo usermod -aG sudo newusername
3.2. SSH 인증 설정
새 사용자로 비밀번호를 통해 로그인하려면 SSH 서버 설정을 조정해야 할 수 있다.
sshd_config편집:1
sudo nano /etc/ssh/sshd_configPasswordAuthentication no를PasswordAuthentication yes로 변경한다.보안 경고
PasswordAuthentication yes설정은 무차별 대입 공격(brute-force attack)에 취약할 수 있어 권장되지 않는다. 이 옵션은 SSH 키 등록 전 임시로 사용하거나, 테스트 목적으로만 활성화하는 것이 좋다.- 덮어쓰기 설정 확인: 클라우드 이미지는 종종 덮어쓰기 설정을 가진다.
/etc/ssh/sshd_config.d/안의 파일들을 확인한다.1 2 3 4 5
# 디렉토리 내 설정 파일 확인 ls -l /etc/ssh/sshd_config.d/ # 예: 클라우드 초기화 설정 파일 내용 확인 cat /etc/ssh/sshd_config.d/50-cloud-init.conf
이 파일들 중 하나에서
PasswordAuthentication no를 발견하면 주석 처리하거나yes로 변경한다. - SSH 서비스 재시작:
1
sudo systemctl restart sshd - 연결 확인: 새 터미널을 열고 새 사용자와 비밀번호로 로그인한다.
1
ssh newusername@your_server_ip
3.3. 방화벽 설정 (UFW)
Uncomplicated Firewall (UFW)을 활성화하여 원치 않는 접근을 차단한다.
필수 포트 허용: 방화벽을 활성화하기 전에 반드시 SSH 연결 포트를 먼저 허용해야 원격 접속이 끊어지지 않는다.
1 2 3 4 5 6
# SSH 연결 허용 (필수) sudo ufw allow OpenSSH # 웹 서버 운영 시 HTTP, HTTPS 허용 (선택) sudo ufw allow http sudo ufw allow https
- 방화벽 활성화:
1
sudo ufw enable
확인 메시지가 나오면
y를 누른다. - 상태 확인:
1
sudo ufw status상태가
active이고, 허용한 규칙들이 목록에 나오면 성공이다.
4. 시스템 유지보수
4.1. 패키지 업데이트
보안과 안정성을 위해 서버의 패키지를 정기적으로 업데이트한다.
1
sudo apt update && sudo apt upgrade -y
4.2. 불필요한 패키지 정리
업데이트 과정에서 더 이상 필요 없게 된 패키지들이 남아있을 수 있다. 아래 명령어로 시스템을 깔끔하게 정리한다.
1
sudo apt autoremove -y
5. 개발 환경 구성
이제 실제 개발 및 실습에 필요한 도구를 설치한다. build-essential 패키지는 C, C++ 등의 코드를 컴파일하는 데 필요한 기본적인 도구(gcc, g++, make 등)를 한 번에 설치해 준다.
1
sudo apt install build-essential -y
6. 시간대 설정 (Timezone)
서버의 시간이 정확해야 로그 확인이나 예약 작업(cron) 실행 시 혼란이 없다. 한국 시간(Asia/Seoul)으로 설정한다.
시간대 변경
1
sudo timedatectl set-timezone Asia/Seoul
설정 확인
1
timedatectl
Time zone: 항목이 Asia/Seoul (KST, +0900)으로 나오면 올바르게 설정된 것이다.