Post

[Linux] Initial Server Setup Guide

[Linux] Initial Server Setup Guide

Abstract

이 문서는 새로운 리눅스 원격 서버의 초기 설정을 위한 종합 가이드이다. SSH 연결, 호스트 이름 설정, 사용자 관리, 보안 설정 및 시스템 업데이트까지의 과정을 다룬다.

이 가이드는 새로운 리눅스 서버 인스턴스를 생성한 후, 안전하고 개인화된 환경을 보장하기 위한 필수적인 초기 단계들을 안내한다.

Outline

  1. 서버에 연결하기
  2. 초기 서버 설정
    • 2.1. 호스트 이름 변경
    • 2.2. /etc/hosts 파일 업데이트
    • 2.3. 터미널 프롬프트 사용자화
  3. 사용자 및 보안 관리
    • 3.1. 새 사용자 생성
    • 3.2. SSH 인증 설정
    • 3.3. 방화벽 설정 (UFW)
  4. 시스템 유지보수
    • 4.1. 패키지 업데이트
    • 4.2. 불필요한 패키지 정리
  5. 개발 환경 구성
  6. 시간대 설정

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 주소이다.

Initial SSH Connection


2. 초기 서버 설정

2.1. 호스트 이름 변경

서버의 호스트 이름을 개인화한다.

  1. 현재 호스트 이름 확인:
    1
    
    hostnamectl
    
  2. 새 호스트 이름 설정:
    1
    
    sudo hostnamectl set-hostname my-dev-server
    

    이 변경 사항은 /etc/hostname 파일을 수정하므로 재부팅 후에도 유지된다.

2.2. /etc/hosts 파일 업데이트

해결(resolution) 문제를 방지하기 위해 새 호스트 이름을 로컬 IP 주소에 매핑한다.

  1. hosts 파일 편집:
    1
    
    sudo nano /etc/hosts
    
  2. 호스트 이름 업데이트: 127.0.1.1 또는 127.0.0.1에 연결된 이전 호스트 이름을 새 이름으로 교체한다.

    Editingetc/hosts

  3. 적용하기 hostname 명령어로 확인하고, exec bash로 즉시 반영한다.

2.3. 터미널 프롬프트 사용자화

전체 호스트 이름이 표시되도록 프롬프트를 수정한다.

현재 사용자의 경우

  1. .bashrc 편집:
    1
    
    nano ~/.bashrc
    
  2. PS1 수정: PS1 정의에서 \h(짧은 호스트 이름)를 \H(전체 호스트 이름)로 변경한다.
  3. 변경 사항 적용:
    1
    
    source ~/.bashrc
    

모든 새 사용자를 위한 표준 방법

/etc/skel/.bashrc 파일을 수정하여 새로 생성되는 모든 사용자 계정에 기본 설정을 제공한다.

  1. 스켈레톤 .bashrc 편집:
    1
    
    sudo nano /etc/skel/.bashrc
    
  2. PS1 수정: 이전과 같이 \h\H로 변경하고 파일을 저장한다.

참고: 이 변경은 이 수정 이후에 생성된 사용자에게만 영향을 미치며, 기존 사용자의 설정은 변경하지 않는다.


3. 사용자 및 보안 관리

3.1. 새 사용자 생성

보안을 강화하기 위해 일상적인 작업에는 기본 ubuntu 사용자 대신 새 사용자를 만든다.

  1. 새 사용자 추가:
    1
    
    sudo adduser newusername
    
  2. 관리자 권한 부여:
    1
    
    sudo usermod -aG sudo newusername
    

3.2. SSH 인증 설정

새 사용자로 비밀번호를 통해 로그인하려면 SSH 서버 설정을 조정해야 할 수 있다.

  1. sshd_config 편집:
    1
    
    sudo nano /etc/ssh/sshd_config
    

    PasswordAuthentication noPasswordAuthentication yes로 변경한다.

    보안 경고 PasswordAuthentication yes 설정은 무차별 대입 공격(brute-force attack)에 취약할 수 있어 권장되지 않는다. 이 옵션은 SSH 키 등록 전 임시로 사용하거나, 테스트 목적으로만 활성화하는 것이 좋다.

  2. 덮어쓰기 설정 확인: 클라우드 이미지는 종종 덮어쓰기 설정을 가진다. /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로 변경한다.

  3. SSH 서비스 재시작:
    1
    
    sudo systemctl restart sshd
    
  4. 연결 확인: 새 터미널을 열고 새 사용자와 비밀번호로 로그인한다.
    1
    
    ssh newusername@your_server_ip
    

3.3. 방화벽 설정 (UFW)

Uncomplicated Firewall (UFW)을 활성화하여 원치 않는 접근을 차단한다.

  1. 필수 포트 허용: 방화벽을 활성화하기 전에 반드시 SSH 연결 포트를 먼저 허용해야 원격 접속이 끊어지지 않는다.

    1
    2
    3
    4
    5
    6
    
    # SSH 연결 허용 (필수)
    sudo ufw allow OpenSSH
    
    # 웹 서버 운영 시 HTTP, HTTPS 허용 (선택)
    sudo ufw allow http
    sudo ufw allow https
    
  2. 방화벽 활성화:
    1
    
    sudo ufw enable
    

    확인 메시지가 나오면 y를 누른다.

  3. 상태 확인:
    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)으로 나오면 올바르게 설정된 것이다.

This post is licensed under CC BY 4.0 by the author.