리눅스 우분투 16.04 웹 서버 구축 세팅하기

리눅스 우분투 16.04 서버 세팅하기
웹호스팅을 사용하다가 이번에 가비아 가상호스팅 VPS를 이용하기로 했습니다.
그래서 서버세팅을 하고 있는데요.
그 과정을 적고, 나중에 다시 하게 됐을때 참고하려고 합니다.
다른분들도 참고하시면 좋을 것 같습니다.
이 글은 제가 공부하면서 계속해서 업데이트 할 것입니다.


VI 텍스트 에디터에 대해 간략히 알아두기

서버를 세팅하는 작업은 리눅스 명령어를 이용하기도 하지만 각종 파일들을 수정하기도 한다. 이때 사용하는 툴이 vi이다. 명령어들을 보면 vi로 시작하는 명령어가 있는데 파일을 열어서 수정하는 과정이다. 리눅스를 처음 접하는 사람은 이게 뭔지 모르는 것이 당연하다. 하지만 조금만 알면 메모장과 다를바 없다는 걸 알 수 있다.(물론 조금은 다르다)
명령어 vi로 무슨 파일을 열었다면 바로 수정이 되는 것이 아니다. i버튼을 누르면 파일 수정을 시작할 수 있다. 그리고 수정을 다 했을땐 esc를 눌러서 명령어 모드로 나온다음 :wq를 입력하면 저장하고 종료하게 된다. 혹은 :q라고 입력하면 저장하지 않고 종료한다. 그외에도 vi에서 사용하는 명령어들이 있는데 그것은 쉽게 찾아볼 수 있고, 초보는 이정도만 알아도 vi 명령어가 뭐하는 것인지 알게 될 것이다.

root로 권한 변경과 비밀번호 변경

내가 현재 로그인 되어 있는 것이 root인지를 확인해봐야한다.
# whoami
이때 root(루트)로 나와있으면 아래 단계를 진행하면 되고 루트가 아니라면 루트로 변경해야한다.
root로 로그인하는 명령어
# sudo su
다시 한번 내가 root인지 확인해주자.
# whoami
이제는 비밀번호 변경하자.
가비아에서 세팅이 완료되면 임시비밀번호를 메일로 발송해준다. 아이디는 root이다. root권한도 있다.
비밀번호 변경 명령어
# passwd
새로운 비밀번호를 넣고 다시 한번 확인차 입력하라고하고 마치게 된다.


패키지 업그레이드

현재 서버에 설치된 패키지들을 최신 버전으로 업그레이드한다.
패키지 목록 갱신
# apt-get update
최선버전패치
# apt-get upgrade

시스템 시간 설정

초기 세팅은 영국시간이다. 그래서 각자에게 맞는 시간으로 설정해줘야한다. 한국이라면 Asia – Seoul을 선택하면 되겠다.
# dpkg-reconfigure tzdata
선택하는 화면이 나오면 차례로 아시아와 서울을 선택한다.


호스트네임 변경하기

호스트네임을 명령어로 확인한다.
# hostname
초기에 세팅된 호스트네임이 있을텐데 이제 이것을 먼저 변경한다. 가장 좋은 것은 도메인 이름 전체를 사용하는 것이 좋다. 예를들어 도메인이 abc.com이라면 호스트네임도 abc.com이라고 하는 것이다.
호스트네임을 변경하는 방법은 2가지가 있다. vi를 이용해 hostname 파일을 열어서 적는 방법과 명령어로 변경하는 방법이다. 쉽게 명령어로 하겠다.
hostnamectl set -hostname abc.com
이렇게 명령어를 입력하면 호스트네임이 abc.com으로 변경된다.
이제는 hosts 파일을 수정해줘야 한다.
# vi /etc/hosts
파일을 열어보면 아래와 같이 적혀있다.(초기 설정값이기 때문에 ip와 이름이 다를 수 있음)

127.0.1.1 localhost
127.0.1.1 ubuntu

여기에서ubuntu라고 되어 있는 부분을 지우고 내가 변경한 호스트네임으로 수정한다.


아파치 설치(Apache2)

16.04 LTS 에서는 아파치 2.4.x 버전이 설치된다.
설치
# apt-get install apache2
아파치 버전 체크
# apache2 -v
서버의 IP주소로 접속해보면 아파치에 대한 설명 페이지가 나올 것이다.

아파치 보안 패치

apache2.conf 파일을 수정한다.
# vi /etc/apache2/apache2.conf
파일 중간에서 <FilesMatch “^\.ht”> 구문이 끝난 다음에 아래 내용을 추가한다.

# deny file, folder start with dot
<DirectoryMatch “^\.|\/\.”>
Require all denied
</DirectoryMatch>
# deny (log file, binary, certificate, shell script, sql dump file) access.
<FilesMatch “\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key|yml|lock|gitignore)$”>
Require all denied
</FilesMatch>
# deny access.
<FilesMatch “(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml|access_log|error_log|gruntfile\.js|bower\.json|changelog\.md|console|legalnotice|license|security\.md|privacy\.md)$”>
Require all denied
</FilesMatch>
# Allow Lets Encrypt Domain Validation Program
<DirectoryMatch “\.well-known/acme-challenge/”>
Require all granted
</DirectoryMatch>


PHP 7.0 설치

# apt-get install php
계속 하겠느냐는 물음에 Y로 대답
그리고 몇가지 모듈을 설치한다.

  • PHP와 아파치 연동모듈 설치

# apt-get install libapache2-mod-php7.0

  • 암호화 모듈 설치

# apt-get install php-mcrypt

  • 다국어 처리 모듈 설치

# apt-get install php-mbstring
이미지처리 모듈 설치
# apt-get install php-gd

  • 원격지 정보 불러오는 모듈 설치

# apt-get install php-curl php-xml


MariaDB 설치

# apt-get install mariadb-server

  • 마리아디비 초기화 하기

# usr/bin/mysql_secure_installation
비밀번호만 설정하고 나머진 전부 그냥 엔터만 누른다. 혹시 잘못하면 위의 명령어를 다시 실행한다.

  • root의 인증플러그인 정보 제거하기

리눅스 루트로 로그인 한 상태에서
# mysql
mysql로 접속한다. 그리고 아래와 같은 구문을 차례로 적어준다.

use mysql;
update user set plugin=” where User=’root’;
flush privileges;
exit;

이 그림처럼 하는 것이다.
mysql

  • PHP와 DB연동 모듈 설치하기

# apt-get install php-mysql

  • 기본 언어셋 설정

# vi /etc/mysql/mariadb.conf.d/50-server.cnf
이렇게 에디터로 들어가서 아래의 두 줄을 추가해준다. 위치는 skip-external-locking 밑에 넣으면 된다.

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

여기까지 했으면 mysql 재시작
# service mysql restart


PHP 권한 설정

웹서비스 구동시 발생할 수 있는 Nobody 퍼미션 관련 문제를 해결하기 위해 차례로 설치한다.
# apt-cache search mpm-itk
# apt-get install libapache2-mpm-itk
# chmod 711 /home
# chmod -R 700 /home/*
마지막 명령어는 home폴더에 아무것도 없을때 에러가 날 수 있고, 무시하면 된다. 또한 사용자계정을 만들어서 home밑에 메인페이지를 둔다면 700이 아니라 711로 해야 접근이 가능하다.

계정생성

계정을 생성해본다.
# adduser user1
이렇게 명령어를 입력하면 user1이라는 계정이 생성된다. 그러면 비밀번호를 생성한다. 그 뒤에는 풀네임, 룸넘버, 워크폰, 홈폰, 기타 등등 물어보는데 엔터로 넘어가면 되고 마지막에 Y를 누르고 끝낸다.

  • 생성한 계정으로 로그인하기

# su -l user1

  • 디렉토리 www 생성하기

# mkdir www

  • 계정 로그아웃하기

# exit
나중에 계정을 삭제할 수도 있다. 계정을 삭제하는 명령어는 다음과 같다.
# userdel -r user1
이렇게하면 user1이라는 계정을 삭제한다.


웹사이트 아파치 환경설정파일

사이트를 활성화 하기 위해서 환경설정을 해줘야한다. 여기에서 도메인은 abc.com으로 가정했고, 사용자계정은 user1로 했으니 나에게 맞게 변경해서 작성해야한다.
# vi /etc/apache2/sites-available/abc.com.conf
처음에는 빈파일이다. 아래의 내용을 적어넣자. FTP를 먼저 설치해서 내 컴퓨터에서 적은 뒤 서버에 올리는 방법이 편리하다.

<VirtualHost *:80>
#main domain
ServerName abc.com
#additional domain
ServerAlias www.abc.com
ServerAlias my-anotherdomain.com
#document Root
DocumentRoot /home/myuser1/www/
#additional setting
<Directory /home/myuser1/www/>
Options FollowSymLinks MultiViews
AllowOverride All
require all granted
</Directory>
AssignUserID myuser1 myuser1
ErrorLog ${APACHE_LOG_DIR}/lael.be-error.log
CustomLog ${APACHE_LOG_DIR}/lael.be-access.log combined
</VirtualHost>

만약 SSL을 설치한다면 아래의 내용을 추가해서 넣어주면 된다.

#main domain
ServerName lael.be
#additional domain
ServerAlias www.lael.be
ServerAlias my-anotherdomain.com
#document Root
DocumentRoot /home/myuser1/www/
#additional setting
Options FollowSymLinks MultiViews
AllowOverride All
require all granted
AssignUserID myuser1 myuser1
ErrorLog ${APACHE_LOG_DIR}/lael.be-error.log
CustomLog ${APACHE_LOG_DIR}/lael.be-access.log combined
Header always set Strict-Transport-Security “max-age=31536000”
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLCertificateFile “/home/myuser1/ssl/mysite_ssl.crt”
SSLCertificateKeyFile “/home/myuser1/ssl/mysite_ssl.key”
SSLCertificateChainFile “/home/myuser1/ssl/mysite_ssl.certchain.crt”


네임서버 연결 확인

먼저 웹서버와 도메인 연결에 관한 글(http://ddable.com/linux-6/ ‎)
그런데 이 연결이 잘 됐어도 브라우저에서 도메인을 입력했을때 24시간이상 걸리는 경우도 있다. 그럴때 빠르게 연결이 됐는지만 확인해볼 수 있는 방법이 있다.
윈도우에서 시작메뉴를 눌러서 cmd 입력
명령어로 nslookup 입력
그리고 도메인을 입력해주면 권한없는 응답이라며 도메인이름과 ip주소가 나온다. ip주소가 나오지 않는다면 제대로 연결이 안됐다고 볼 수 있다.

SSH 기본 포트번호 변경 (보안 옵션)

SSH의 기본포트번호는 22입니다. 그래서 많은 세계의 많은 곳에서 로그인 시도가 이루어집니다. 그래서 포트번호만 변경해도 그런 시도조차 당하지 않을 수 있죠. 그래서 변경하는게 좋다고 합니다. 변경할 때는 10000 이상의 번호로 하고, 기억해두셔야합니다.
# vi /etc/ssh/sshd_config
파일을 열고 아래로 좀 내려가보면 Port 22라고 적힌 부분이 있습니다. 여기에서 22를 다른 1만 이상의 숫자로 변경해주시면 됩니다. 그리고 다시 시작.
# service ssh restart
그리고 이후엔 SSH 접속시에 포트번호를 22가 아닌 내가 적은 번호로 접속해야한다는점도 꼭 유의하세요.
제가 사용하는 가비아에서는 가비아 자체적으로 적용되는 방화벽에도 추가 설정을 해줘야하는데요.
가비아 접속과 로그인 – MY가비아 – 서비스정보 – 우측의 관리툴에서 시스템 모니터링 – 왼쪽 자원관리의 서비스 자원 – 원하는 서버를 클릭 – 아래쪽에 방화벽에서 방화벽 정책 관리 – 보안 정책 추가 – 내가 적은 포트번호 입력


아파치 기본폴더경로 변경

우분투 자작 NAS – 6강, Apache2 기본 디렉토리 변경


 
 

You may also like...

댓글 남기기

이메일은 공개되지 않습니다.