Ubuntu 서버 16.04 초기설정 가이드

Ubuntu 서버를 처음 설치한 후 기본적으로 해야 하는 셋업이 몇 가지 있습니다. 이번 포스팅에선 Digital Ocean 튜토리얼을 참고하여 보안 강화를 위해서 또는 쉬운 관리를 위해서 꼭 필요한 서버 초기설정에 대해서 알아보겠습니다.

이 가이드는 Ubuntu 16.04 LTS 버전을 기준으로, vultr.com VPS에서 테스트 되었습니다. Ubuntu 버전에 따라 세부적인 명령어 등이 다를 수 있으므로 유의하시기 바랍니다. 참고로 Ubuntu의 경우 12.04, 14.04, 16.04 버전이 LTS(Long Term Support)로서 최대 5년까지 보안 업데이트를 받을 수 있기 때문에 대부분의 경우 이 버전을 선택하시는 것이 좋습니다. Ubuntu 14.04 LTS 버전 기준으로 작성된 포스팅도 있으니 참고하시기 바랍니다.

가상호스팅이 아직 없으시다면 다음 포스팅을 참고하시기 바랍니다: VULTR를 통한 가상서버(VPS) 호스팅


1단계. 루트(root) 로그인

모든 작업을 위해서 가장 먼저 필요한 서버 로그인을 해보겠습니다.

서버에 접속하기 위해서는 IP 주소와 root 계정의 비밀번호를 알아야 합니다. vlutr.com과 같은 VPS 서비스를 이용하여 가상서버 인스턴스를 생성하게 되면 IP 주소와 초기 root 계정 비밀번호를 제공해줍니다. 현재는 서버를 새로 설치했기 때문에 root 계정으로만 접근할 수 있습니다. OS X나 Unix 계열의 OS를 사용할 경우 터미널에서 다음과 같은 명령어로 서버에 접속할 수 있습니다.

$ ssh [email protected]{서버-IP-또는-도메인}

처음 접속할 경우에는 다음과 같이 '처음 접속하는 원격 서버'라는 경고 메시지가 뜹니다. yes를 입력하면 다음으로 넘어갑니다.

The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
ECDSA key fingerpring is 79:95:46:1a:ab:37:11:8e:86:54:36:38:bb:3c:fa:c0.
Are you sure you want to continue connecting (yes/no)?

2단계. 언어(locale) 설정

시스템의 언어를 설정해 줄 차례입니다. 기본적으로 en_US로 설정되어 있지만, 각종 패키지를 설치할 때 필요한 LC_ALL을 포함하여 다음과 같이 지정하는 것이 편리합니다.

/etc/default/locale 파일을 찾아 다음과 같이 수정합니다. (각 행의 마지막에 빈칸이 포함되지 않도록 합니다.)

LANG="en_US.UTF-8"
LANGUAGE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

다음과 같이 서버를 재부팅하면 설정이 적용됩니다.

$ reboot

3단계. 계정 생성

서버에서 새로운 계정을 만들어 보도록 하겠습니다. 보안을 위해서 root 계정을 비활성화 하고 생성된 계정을 사용하는 것이 일반적입니다. 서버를 재부팅하였다면 다시 접속하신 후, 다음과 같이 입력합니다. 여기서 {유저-아이디} 부분은 원하시는 아이디로 바꾸시면 됩니다.

$ adduser {유저-아이디}

비밀번호를 포함하여 몇 가지 정보를 입력하게 됩니다. 비밀번호를 제외하고는 필수 입력사항이 아니므로 그냥 엔터를 입력해도 됩니다.


4단계. 루트 권한

이전 단계에서 만든 계정은 일반 계정입니다. 일반적인 작업은 수행할 수 있지만 관리자 작업은 수행할 수 없습니다. 일반 계정에서 관리자 작업을 수행할 수 있도록 일반 계정에 관리자 권한을 부여할 수 있습니다.

서버에서 다음과 같이 입력합니다.

$ usermod -aG sudo {유저-아이디}

5단계. 공개키 인증 활성화 (선택사항)

이번단계에서는, 아이디-비밀번호 인증이 아닌 공개키(public key) 기반의 인증을 활성화 하도록 하겠습니다. 공개키 인증을 사용할 경우 터미널 또는 SFTP 접속시 매번 암호를 입력하지 않아도 되고, 더 나은 보안을 제공하여 줍니다.

로컬 PC 터미널에서 다음과 같이 입력하여 공개키를 생성합니다.

$ ssh-keygen

다음과 같이 암호 설정여부를 물어보게 됩니다. 암호를 설정하게 되면 공개키 인증과 더불어 암호 확인도 하게 됩니다. 암호 없이 편하게 쓸 것인가, 암호를 넣고 좀더 보안을 강화할 것인가는 상황에 따라 다를 수 있습니다. 다만 두 방법 모두 아이디-비밀번호를 통한 인증 보다는 훨씬 안전한 방법입니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa):

이제 다음과 같이 생성된 공개키를 서버에 복사합니다. (ssh-copy-id 명령어는 macOS 10.12 Sierra부터 내장되어 있습니다. 이전 버전의 macOS나 다른 OS의 경우 따로 설치하셔야 합니다.)

$ ssh-copy-id {유저-아이디}@{서버-IP-또는-도메인}

이제 서버 .ssh/authorized_keys 폴더에 해당 PC 공개키가 저장되게 되며 ssh 접속시 비밀번호를 따로 물어보지 않고 바로 접속하게 됩니다.


6단계. SSH 비밀번호 인증 비활성화 (선택사항)

공개키 기반의 인증을 활성화 하였다면 비밀번호 인증을 비활성화 함으로 좀더 보안을 강화할 수 있습니다. 서버에서 다음과 같이 입력하여 SSH 설정을 수정합니다.

$ vi /etc/ssh/sshd_config

파일에서 PasswordAuthentication을 찾아서 앞에 있는 #을 지우고 값을 no로 변경합니다. (먼저 편집모드 전환을 위해서 a 키를 누릅니다) 수정을 마친 후에는 명령어 :wq를 입력하여 저장하고 파일을 닫습니다.

PasswordAuthentication no

이제 다음과 같이 입력하여 SSH daemon을 재시작합니다.

$ systemctl reload sshd

다만 이를 사용할 경우 인증된 PC에 새로 OS를 설치하거나 다른 PC로 접속시 ssh를 통한 접속이 되지 않기 때문에 호스팅 업체에서 제공하는 서버 콘솔을 통해서 접속해야 합니다. 이럴 경우 SSH 설정 파일에서 PasswordAuthentication를 임시로 yes로 수정하여 새로운 PC의 공개키를 등록할 수 있습니다.


7단계. 접속 테스트

여기까지 진행한 후 다음과 같이 로컬 PC에서 서버 접속이 되는지 확인하여 보겠습니다.

$ ssh {사용자-아이디}@{서버-IP-또는-도메일}

이제 관리자 권한이 필요한 명령어는 앞에 sudo를 붙이고 사용할 수 있습니다.

$ sudo {명령어-이름}

8단계. 방화벽 설정

ufw는 Ubuntu에 기본적으로 설치되어 있는 방화벽입니다. 다양한 app을 허용목록에 등록할 수 있습니다. 현재 등록되어 있는 app의 목록은 다음과 같이 확인할 수 있습니다.

$ sudo ufw app list

다음곽 같이 입력하여 OpenSSH를 추가합니다.

$ sudo ufw allow OpenSSH

이제 설정을 마쳤으므로 다음과 같이 활성화 시킬 수 있습니다.

$ sudo ufw enable

현재 동작여부와 열려있는 포트의 목록을 보려면 다음과 같이 입력합니다.

$ sudo ufw status

이것으로 기본적인 서버 설정을 모두 마쳤습니다. 동적 웹 서비스를 위해서 웹 서버와 DB 등을 설치할 수 있습니다. 이와 관련된 가이드는 추후에 작성 예정입니다.

참고: VULTR를 통한 가상서버(VPS) 호스팅

comments powered by Disqus