# 리눅스 서버 생성 및 기본 설정
## 목적
Spring으로 만든 어플리케이션을 웹으로 배포하려고 한다. 이를 위해 리눅스 서버를 생성해야 하며, 기본 환경설정을 잡아줘야 한다. 아래는 이에 대한 내용이다. (이하 내용은 빠른 글쓰기를 위해 음슴체로 작성하기로 한다)
## 목차
+ 서버 구입
+ 서버 원격 접속
+ 사용자 계정 생성
+ 루트 권한 부여
+ 방화벽 설정
+ SSH 보안 설정
+ apt-get 업데이트
## 개발환경
+ DigitalOcean VPS
+ Ubuntu 14.04 x86
+ RAM: 1G
+ CPU: 1core
+ SSD: 30G
## 서버 구입하기
어디서 서버를 구입하면 좋을까 고민하던 중, 페이스북 광고로 접하게 된 [DigitalOcean](https://m.do.co/c/fe29dccc0207) 서버 호스팅을 사용하기로 했음.(가격이 매우 저렴해서 맘에듬)

회원을 가입하고 이메일로 인증을 받은 뒤, 카드번호를 입력해줌.
카드 인증을 마치고 Create Droplet을 클릭함.
가장먼저 해주는 설정으로 OS와 버전인데 **우분투 14.04 64bit** 버전을 설정 함.

다음으로 CPU/DISK/Transfer 설정임. 나는 한달에 $10달라 짜리를 골랐음 (제일 싼건 한달에 $5임.. 싸다!)

마지막으로 서버위치를 설정해줌. 한국에서 제일 가까운 지역인 싱가포르 서버로 설정함. (물리적으로 가까운 만큼 반응속도 또한 가장 빠름)

여기서 언급하지 않은 여러 기타 설정들은 기본셋팅을 그대로 사용하였음. **Create**를 클릭하면 아래와 같이 서버가 생성됨.

## 서버 원격 접속
서버를 생성하였으니 접속을 해봄. 생성된 Droplet을 클릭하면 Access 메뉴가 있는데 여기서 Console 모드로 서버에 접속할 수 있음.

하지만 맥 유저인 나는 터미널 창을 이용해서 접속하기로 함. (윈도우 유저는 Putty를 이용해서 접속을 권함)
```
# 터미널에 ssh명령어를 사용하여 root계정으로 해당 아이피서버로 접속
$ ssh root@{server-ip-address}
```
초기 계정은 **root**이고 해당 계정의 비밀번호는 이메일로 와있는데 이를 참고하여 로그인!! (혹시 실수로 이메일을 지웠다면 Access 메뉴에서 Reset Root Password 버튼을 클릭하면 이메일로 비밀번호를 재전송 해주니 걱정 ㄴㄴ)
첫 로그인을 하면 root 계정의 비밀번호를 바꾸라고 함. 오타 안나게 알아서 잘 바꿔꿔야 함.. (초기 비밀번호가 생각보다 어려워 오타 자꾸나면 빡침)
## 사용자 계정 생성
로그인 할 수 있는 새로운 사용자를 만들어 봄.
```
$ adduser {username}
```
위 명령어를 입력하면 몇 가지 추가 정보를 입력하라고 나옴. (그냥 엔터쭉 눌러서 쿨하게 패스)
## 루트 권한 부여
일반적으로 리눅스는 루트(root) 계정 로그인을 권장하지 않기에 새롭게 만든 아이디에 루트 권한을 부여하기로 함. (루트권한을 부여하지 않으면 관리자 모드의 작업을 할 수 없음)
```
$ adduser {username} sudo
```
아까 만들어준 계정에 `sudo`권한을 부여하였으니 새 아이디로 로그인을 하자~~
```
$ exit
$ ssh {username}@{server-ip-address}
```
## 방화벽 설정
서버에 접속 가능한 포트들을 관리하는 걸 방화벽이라고 함. 우분투는 기본적으로 ufw 방화벽을 제공하므로 이를 사용하여 방화벽을 설정.
```
$ sudo ufw allow ssh
$ sudo ufw allow http
```
위 명령어는 ssh(22번 포트) 접속과 http(80번 포트) 접속을 허용하는 명령임. 이를 동작시키려면 아래와 같이 enable 해야 함.
```
$ sudo ufw enable
```
현재 방화벽 설정을 보려면 아래를 쳐주면 됨.
```
$ sudo ufw status
```
## SSH 보안 설정
root 계정이 ssh 접속하게 해둔다면, 무차별 대입공격(해킹)이 들어올 수 있음. 이를 방지하기 위해 root 계정 로그인을 비활성화 하기로 함.
이를 위해 ssh 설정파일을 수정해 줘야 함. 먼저 vi 편집기를 사용해 해당 설정 파일을 열어 줌.
```
$ sudo vi /etc/ssh/sshd_config
```
열려진 파일에서 다음의 내용을 찾아
```
PermitRootLogin yes
```
아래와 같이 바꿔 줌.
```
PermitRootLogin no
```
혹시모를 무차별 대입 공격을 대비하기 위해 반복 접속 실패시 딜레이를 주도록 아래와 같이 설정함
```
$ sudo apt-get install sshguard
```
## apt-get 업데이트
기본설정의 마지막 작업으로 OS업데이트를 함.
```
$ sudo apt-get update
$ sudo apt-get upgrade
```
update 명령을 통해 최신 업데이트 목록을 가져온 뒤, upgrade 명령을 통해 이를 최신화 함. 끝~~~