IT기초

처음 μ„œλ²„ λ°›μ•˜μ„ λ•Œ κ°€μž₯ λ¨Όμ € ν•΄μ•Ό ν•  μ„€μ • 5κ°€μ§€

πŸ₯„ν…Œν¬ ν•œ μŠ€ν‘Ό 2026. 5. 25. 16:45

λͺ©μ°¨

  1. μ„œλ²„λ₯Ό λ°›μ•˜λŠ”λ° 뭐뢀터 ν•΄μ•Ό ν• κΉŒ?
  2. μ„€μ • 1 – νŒ¨ν‚€μ§€ μ—…λ°μ΄νŠΈ
  3. μ„€μ • 2 – μƒˆλ‘œμš΄ μ‚¬μš©μž 계정 생성 (root 직접 μ‚¬μš© κΈˆμ§€)
  4. μ„€μ • 3 – SSH λ³΄μ•ˆ κ°•ν™”
  5. μ„€μ • 4 – λ°©ν™”λ²½(UFW) μ„€μ •
  6. μ„€μ • 5 – νƒ€μž„μ‘΄ μ„€μ •
  7. μ„€μ • μ™„λ£Œ ν›„ 체크리슀트
  8. 정리

1. μ„œλ²„λ₯Ό λ°›μ•˜λŠ”λ° 뭐뢀터 ν•΄μ•Ό ν• κΉŒ?

AWS, GCP, 카페24 λ“±μ—μ„œ μ„œλ²„λ₯Ό 처음 μƒμ„±ν•˜λ©΄, κ·Έμ•Όλ§λ‘œ 아무것도 μ—†λŠ” 빈 컴퓨터가 ν•˜λ‚˜ μƒκΉλ‹ˆλ‹€. 운영체제(주둜 Ubuntu)만 μ„€μΉ˜λ˜μ–΄ 있고, μ•„λ¬΄λŸ° μ„œλΉ„μŠ€λ„ μ„€μΉ˜λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 μƒνƒœλ‘œ λ°”λ‘œ μ„œλΉ„μŠ€λ₯Ό 올리면 λ³΄μ•ˆμ— 맀우 μ·¨μ•½ν•©λ‹ˆλ‹€. 인터넷에 μ—°κ²°λœ μ„œλ²„λŠ” μƒμ„±λ˜λŠ” μˆœκ°„λΆ€ν„° μ „ μ„Έκ³„μ˜ ν•΄ν‚Ή μ‹œλ„μ— λ…ΈμΆœλ©λ‹ˆλ‹€. μ‹€μ œλ‘œ 아무 섀정도 ν•˜μ§€ μ•Šμ€ 채 μ„œλ²„λ₯Ό λ°©μΉ˜ν•˜λ©΄ 수 λΆ„ μ•ˆμ— λ‘œκ·Έμ— ν•΄ν‚Ή μ‹œλ„ 흔적이 남기 μ‹œμž‘ν•©λ‹ˆλ‹€.

이 κΈ€μ—μ„œλŠ” μ„œλ²„λ₯Ό 처음 λ°›μ•˜μ„ λ•Œ κ°€μž₯ λ¨Όμ € ν•΄μ•Ό ν•  κΈ°λ³Έ μ„€μ • 5κ°€μ§€λ₯Ό μˆœμ„œλŒ€λ‘œ μ„€λͺ…λ“œλ¦½λ‹ˆλ‹€. 이 κΈ€μ˜ μ˜ˆμ‹œλŠ” Ubuntu μ„œλ²„λ₯Ό κΈ°μ€€μœΌλ‘œ ν•©λ‹ˆλ‹€.

2. μ„€μ • 1 – νŒ¨ν‚€μ§€ μ—…λ°μ΄νŠΈ

μ„œλ²„λ₯Ό λ°›μœΌλ©΄ κ°€μž₯ λ¨Όμ € ν•΄μ•Ό ν•  일은 μ‹œμŠ€ν…œ νŒ¨ν‚€μ§€λ₯Ό μ΅œμ‹  μƒνƒœλ‘œ μ—…λ°μ΄νŠΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ„œλ²„ 이미지가 λ§Œλ“€μ–΄μ§„ μ‹œμ κ³Ό μ§€κΈˆ 사이에 λ³΄μ•ˆ 취약점이 발견되고 νŒ¨μΉ˜κ°€ 배포됐을 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

νŒ¨ν‚€μ§€ λͺ©λ‘μ„ μƒˆλ‘œκ³ μΉ¨ν•©λ‹ˆλ‹€.

sudo apt update

μ΄μ–΄μ„œ λͺ¨λ“  νŒ¨ν‚€μ§€λ₯Ό μ΅œμ‹  λ²„μ „μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•©λ‹ˆλ‹€.

sudo apt upgrade -y

apt updateλŠ” "μ–΄λ–€ μ—…λ°μ΄νŠΈκ°€ μžˆλŠ”μ§€ 확인"ν•˜λŠ” λͺ…령이고, apt upgradeλŠ” "μ‹€μ œλ‘œ μ—…λ°μ΄νŠΈλ₯Ό 적용"ν•˜λŠ” λͺ…λ Ήμž…λ‹ˆλ‹€. 이 두 λͺ…λ Ήμ–΄λŠ” 항상 μ„ΈνŠΈλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈκ°€ μ™„λ£Œλ˜λ©΄ μž¬λΆ€νŒ…μ„ ꢌμž₯ν•©λ‹ˆλ‹€.

sudo reboot

μž¬λΆ€νŒ… ν›„ SSH둜 λ‹€μ‹œ μ ‘μ†ν•˜λ©΄ λ©λ‹ˆλ‹€.

3. μ„€μ • 2 – μƒˆλ‘œμš΄ μ‚¬μš©μž 계정 생성 (root 직접 μ‚¬μš© κΈˆμ§€)

처음 μ„œλ²„μ— μ ‘μ†ν•˜λ©΄ root κ³„μ •μœΌλ‘œ λ‘œκ·ΈμΈν•˜κ²Œ λ˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. rootλŠ” μ„œλ²„μ˜ λͺ¨λ“  κΆŒν•œμ„ κ°€μ§„ 졜고 κ΄€λ¦¬μž κ³„μ •μž…λ‹ˆλ‹€.

그런데 root 계정을 직접 μ‚¬μš©ν•˜λŠ” 것은 μœ„ν—˜ν•©λ‹ˆλ‹€. μ‹€μˆ˜λ‘œ μ€‘μš”ν•œ νŒŒμΌμ„ μ‚­μ œν•˜κ±°λ‚˜, 해컀가 root 계정을 νƒˆμ·¨ν•  경우 μ„œλ²„ 전체가 μž₯악될 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

λ”°λΌμ„œ 일반 μ‚¬μš©μž 계정을 λ§Œλ“€κ³ , ν•„μš”ν•  λ•Œλ§Œ sudo λͺ…령을 톡해 κ΄€λ¦¬μž κΆŒν•œμ„ μ‚¬μš©ν•˜λŠ” 것이 μ•ˆμ „ν•©λ‹ˆλ‹€.

μƒˆ μ‚¬μš©μžλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. (myuser μžλ¦¬μ— μ›ν•˜λŠ” 이름 μž…λ ₯)

adduser myuser

μƒμ„±ν•œ 계정에 sudo κΆŒν•œμ„ λΆ€μ—¬ν•©λ‹ˆλ‹€.

usermod -aG sudo myuser

μƒˆ κ³„μ •μœΌλ‘œ μ „ν™˜ν•΄μ„œ sudoκ°€ 정상 λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

su - myuser sudo apt update

이후 SSH 접속도 root λŒ€μ‹  μƒˆλ‘œ λ§Œλ“  κ³„μ •μœΌλ‘œ μ ‘μ†ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

4. μ„€μ • 3 – SSH λ³΄μ•ˆ κ°•ν™”

SSHλŠ” μ„œλ²„ μ ‘μ†μ˜ 관문이기 λ•Œλ¬Έμ— 해컀듀이 κ°€μž₯ 많이 κ³΅κ²©ν•˜λŠ” 지점이기도 ν•©λ‹ˆλ‹€. λͺ‡ κ°€μ§€ μ„€μ •λ§ŒμœΌλ‘œλ„ λ³΄μ•ˆμ„ 크게 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

SSH μ„€μ • νŒŒμΌμ„ μ—΄μ–΄μ€λ‹ˆλ‹€.

sudo nano /etc/ssh/sshd_config

파일이 열리면 μ•„λž˜ μ„Έ κ°€μ§€ ν•­λͺ©μ„ μ°Ύμ•„μ„œ μˆ˜μ •ν•©λ‹ˆλ‹€. root둜 직접 SSH 접속을 μ°¨λ‹¨ν•˜λ €λ©΄ PermitRootLogin 값을 no둜 λ³€κ²½ν•©λ‹ˆλ‹€. λΉ„λ°€λ²ˆν˜Έ 인증을 λΉ„ν™œμ„±ν™”ν•˜κ³  ν‚€ 인증만 ν—ˆμš©ν•˜λ €λ©΄ PasswordAuthentication 값을 no둜 λ³€κ²½ν•©λ‹ˆλ‹€. SSH 포트λ₯Ό 22 λŒ€μ‹  λ‹€λ₯Έ 번호(예: 2222)둜 λ°”κΎΈλ €λ©΄ Port ν•­λͺ©μ„ μˆ˜μ •ν•©λ‹ˆλ‹€.

섀정을 μ €μž₯ν•œ ν›„ SSH μ„œλΉ„μŠ€λ₯Ό μž¬μ‹œμž‘ν•©λ‹ˆλ‹€.

sudo systemctl restart sshd

주의: 포트λ₯Ό λ³€κ²½ν•œ 경우, λ°©ν™”λ²½μ—μ„œλ„ μƒˆ 포트λ₯Ό μ—΄μ–΄μ€˜μ•Ό ν•©λ‹ˆλ‹€. 그리고 ν˜„μž¬ μ„Έμ…˜μ„ 끊기 전에 μƒˆ 포트둜 접속이 λ˜λŠ”μ§€ λ¨Όμ € 확인해야 ν•©λ‹ˆλ‹€. 확인 없이 μ„Έμ…˜μ„ 끊으면 μ„œλ²„μ— 접속할 수 μ—†κ²Œ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

5. μ„€μ • 4 – λ°©ν™”λ²½(UFW) μ„€μ •

**UFW(Uncomplicated Firewall)**λŠ” Ubuntuμ—μ„œ μ‰½κ²Œ 방화벽을 μ„€μ •ν•  수 있게 ν•΄μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€. 방화벽은 λΆˆν•„μš”ν•œ 포트둜의 접근을 차단해 μ„œλ²„λ₯Ό λ³΄ν˜Έν•©λ‹ˆλ‹€.

λ¨Όμ € ν˜„μž¬ UFW μƒνƒœλ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

sudo ufw status

SSH 포트λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€. κΈ°λ³Έ 22λ²ˆμ„ μ‚¬μš©ν•˜λŠ” κ²½μš°μž…λ‹ˆλ‹€.

sudo ufw allow 22

포트λ₯Ό λ³€κ²½ν–ˆλ‹€λ©΄ ν•΄λ‹Ή 번호둜 ν—ˆμš©ν•©λ‹ˆλ‹€.

sudo ufw allow 2222

μ›Ή μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•  경우 HTTP와 HTTPS ν¬νŠΈλ„ ν—ˆμš©ν•©λ‹ˆλ‹€.

sudo ufw allow 80 sudo ufw allow 443

UFWλ₯Ό ν™œμ„±ν™”ν•©λ‹ˆλ‹€.

sudo ufw enable

UFWλ₯Ό ν™œμ„±ν™”ν•˜λ©΄ ν—ˆμš©ν•œ 포트 μ™Έμ˜ λͺ¨λ“  접속이 μ°¨λ‹¨λ©λ‹ˆλ‹€. ν™œμ„±ν™” 전에 λ°˜λ“œμ‹œ SSH 포트λ₯Ό ν—ˆμš©ν•΄μ•Ό ν˜„μž¬ 접속이 λŠκΈ°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ°©ν™”λ²½ μ„€μ • 원칙은 κ°„λ‹¨ν•©λ‹ˆλ‹€. ν•„μš”ν•œ 포트만 μ—΄κ³ , λ‚˜λ¨Έμ§€λŠ” λͺ¨λ‘ μ°¨λ‹¨ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

6. μ„€μ • 5 – νƒ€μž„μ‘΄ μ„€μ •

μ„œλ²„μ˜ κΈ°λ³Έ νƒ€μž„μ‘΄μ€ λŒ€λΆ€λΆ„ UTC(ν˜‘μ • μ„Έκ³„μ‹œ)둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. κ΅­λ‚΄ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•œλ‹€λ©΄ **ν•œκ΅­ μ‹œκ°„(KST, Asia/Seoul)**으둜 λ³€κ²½ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 둜그 파일의 μ‹œκ°„, λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜λŠ” μ‹œκ°„ 등이 λͺ¨λ‘ μ„œλ²„ νƒ€μž„μ‘΄μ„ κΈ°μ€€μœΌλ‘œ 기둝되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

ν˜„μž¬ νƒ€μž„μ‘΄μ„ ν™•μΈν•©λ‹ˆλ‹€.

timedatectl

νƒ€μž„μ‘΄μ„ μ„œμšΈλ‘œ λ³€κ²½ν•©λ‹ˆλ‹€.

sudo timedatectl set-timezone Asia/Seoul

λ³€κ²½ ν›„ λ‹€μ‹œ ν™•μΈν•©λ‹ˆλ‹€.

timedatectl

Time zone: Asia/Seoul (KST, +0900)처럼 ν‘œμ‹œλ˜λ©΄ μ •μƒμž…λ‹ˆλ‹€.

7. μ„€μ • μ™„λ£Œ ν›„ 체크리슀트

5κ°€μ§€ 섀정을 λͺ¨λ‘ λ§ˆμ³€λ‹€λ©΄ μ•„λž˜ ν•­λͺ©μ„ ν•œ λ²ˆμ”© 확인해 λ³΄μ„Έμš”.

ν•­λͺ©ν™•인 λ°©λ²•κΈ°λŒ€ κ²°κ³Ό
νŒ¨ν‚€μ§€ μ—…λ°μ΄νŠΈ apt list --upgradable μ—…κ·Έλ ˆμ΄λ“œ λŒ€μƒ μ—†μŒ
μ‚¬μš©μž 계정 id myuser uid, gid 정보 좜λ ₯
SSH μ„€μ • sudo sshd -T | grep permitrootlogin permitrootlogin no
λ°©ν™”λ²½ sudo ufw status ν•„μš”ν•œ 포트만 ALLOW
νƒ€μž„μ‘΄ timedatectl Asia/Seoul (KST)

8. 정리

처음 μ„œλ²„λ₯Ό λ°›μ•˜μ„ λ•Œ κΌ­ ν•΄μ•Ό ν•  5κ°€μ§€ 섀정을 μ •λ¦¬ν•©λ‹ˆλ‹€.

  • νŒ¨ν‚€μ§€ μ—…λ°μ΄νŠΈ: λ³΄μ•ˆ 취약점 패치 적용
  • μ‚¬μš©μž 계정 생성: root 직접 μ‚¬μš© κΈˆμ§€, 일반 계정 + sudo λ°©μ‹μœΌλ‘œ 운영
  • SSH λ³΄μ•ˆ κ°•ν™”: root 둜그인 차단, λΉ„λ°€λ²ˆν˜Έ 인증 λΉ„ν™œμ„±ν™”, 포트 λ³€κ²½
  • λ°©ν™”λ²½ μ„€μ •: ν•„μš”ν•œ 포트만 μ—΄κ³  λ‚˜λ¨Έμ§€λŠ” 차단
  • νƒ€μž„μ‘΄ μ„€μ •: ν•œκ΅­ μ„œλΉ„μŠ€λΌλ©΄ Asia/Seoul둜 λ³€κ²½

이 5κ°€μ§€λ§Œ 해도 μ„œλ²„μ˜ 기본적인 λ³΄μ•ˆ μˆ˜μ€€μ΄ 크게 λ†’μ•„μ§‘λ‹ˆλ‹€.