본문으로 바로가기

워드프레스 구축

category Analysis/Wordpress 2015.06.17 14:54

1. 개요

전 세계적으로 가장 많이 사용하는 CMS(Contents Management System)로 워드프레스를 손꼽는다. 특히 오픈 소스로 구현되어 있고, 쉽게 설치가 가능하며, 여러 형태로 구현된 다양한 플러그인으로 쉽게 기능을 추가할 수 있는 것이 매력적이다. 또한 이쁘다. 해외 동향자료들을 살펴보면 워드프레스 사용률이 23%에 육박한다. 국내 중소기업뿐만 아니라 공공기관에서도 워드프레스를 선택해 사용하는 것을 보면 그 인기를 실감할 수 있다.

반면 공격자 입장에서도 이러한 워드프레스를 대상으로 공략하기 쉽다. 우선 공격 대상의 웹 사이트를 스캔하여 얻은 플러그인 정보로 동일한 환경을 구축한 다음 소스코드 분석을 진행한다. 그리고 취약점을 찾아 공격에 사용한다. 또한 공격자들은 수 많은 워드프레스를 일일이 공격할 수 없기 때문에 워드프레스에서 인기 있는 플러그인 취약점을 발견하기 위해 연구하고, 웜(Worm) 형태로 제작하여 공격하는 행위를 자주 볼 수 있다.

그림 1. 워드프레스 공격 동향

반대로 이야기하면 쉽게 구축하여 다양한 웹 해킹 실습을 할 수 있는 것이 워드프레스이다.

2. 워드프레스 설치

2.1. LAMP

LAMP는 어려운 것이 아니고 단순히 Linux, Apache, MySQL 그리고 PHP의 첫 글자를 가지고 와서 만들어진 용어이다. 리눅스 서버를 웹 서버로 사용하겠다는 의미와 일맥상통한다. 우선 가장 자신 있는 리눅스를 미리 설치한다. 여기서는 우분투 데스트톱 버전 14.04 LTS 를 사용한다. 그리고 설정된 리눅스 저장소(Repository)와 동기화 한다.

sudo apt-get update

만약 저장소가 국내가 아니라면 설정을 변경하는 것이 설치하기 위해 패키지를 다운로드 받는 과정을 시간 절약할 수 있다.

AMP 설치는 다음과 같이 진행한다. 마지막에 설치하는 vsftpd는 워드프레스와 서버간에 파일을 FTP 형태로 교환하는데 사용하기 위해 설치하는 간단한 FTP로, AMP에 포함되는 항목은 아니다.

sudo apt-get install -y apache2 php5 mysql-server mysql-client php5-mysql phpmyadmin vsftpd

설치하는 과정에서 다음과 같은 TUI(Terminal User Interface)를 만나게 된다. AMP 설치하는 과정에 묻는 질문들은 비밀번호 관련된 항목이다. 우리는 테스트 목적으로 사용할 예정이기 때문에 간단한 비밀번호를 사용하면 된다.

그림 2. 중간 중간 입력하는 TUI

설치가 완료되면 /var 디렉터리에 www 디렉터리가 생성된 것을 확인 할 수 있고, apach2와 mysql 데몬이 동작하는 것을 확인 할 수 있다.

2.2. 워드프레스 다운로드

워드프레스를 다운로드 받기 위해 wordpress.org로 접속한다. 만약 wordpress.com으로 접속하면 상술에 속아나니 조심한다. wordpress.org에 접속하면 메인 화면에서 워드프레스 다운로드 부분을 볼 수 있다. 영어이지만 두려워 말자.

그림 3. Wordpress.org 메인 페이지

다운로드는 다음 그림과 같이 zip 파일과 tar.gz 파일로 제공되는데 우리는 리눅스에서 사용할 예정이기 때문에 좀 더 친숙한 tar.gz을 다운로드 받는다. (사실 뭘 다운로드 받아도 크게 상관은 없다.)

그림 4. 워드프레스 다운로드

보통 최신버전을 다운로드 받으면 latest.tar.gz으로 다운로드 되고, 압축을 해제하면 wordpress 디렉터리가 생성된다. 이제 wordpress 디렉터리는 /var/www로 복사하자. 복사할 때 주의 할 점은 /var 디렉터리의 권한은 root이기에 sudo 명령을 사용해야 하는 부분이다.

sudo mv wordpress/ /var/www/

2.3. 아파치 설정

아파치 기본 디렉터리는 /var/www/html 이다. 이 디렉터리에 들어가보면 index.html이 있는데, 이 경로가 기본 경로이기 때문에 wordpress를 옮겼다고 하더라도 index.html를 계속 읽어 들일 것이다.

그림 5. 아파치의 index.html 페이지

아파치에는 이러한 설정은 간단하게 해결할 수 있는 서브 유틸을 제공하고 있다. 먼저 a2dissite 명령으로 기본 경로를 해제한다.

sudo a2dissite 000-default.conf

이제 /var/www/wordpress 디렉터리를 기본 경로 설정을 위해 다음 설정 내용을 /etc/apache2/sites-available 디렉터리에 wordprss.conf 파일로 생성한다. /etc 디렉터리도 root 사용자 권한을 가지고 있어 sudo 명령을 사용해야 한다.

sudo vi /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:80>
        ServerAdmin wordpress@localhost
        ServerName wordpress.local
        DocumentRoot /var/www/wordpress
        <Directory /var/www/wordpress>
                Options -Indexes
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        LogLevel warn
        ErrorLog /var/log/apache2/wordpress.local_error.log
        CustomLog /var/log/apache2/wordpress.local_access.log combined
        ServerSignature Off
</VirtualHost>

저장했다면 a2ensite 명령으로 wordpress.conf 설정을 활성화한다.

sudo a2ensite wordpress.conf

그리고 마지막으로 아파치 서비스를 재시작하여 변동사항을 적용시켜준다.

sudo service apache2 reload

적용 후 웹 서버에 접근하면 다음과 같은 화면을 볼 수 있다.

그림 6. 웹 서비스 메인 페이지 변경

2.4. 권한 설정

비록 웹 서비스에 접근했을 때 워드프레스 설치하도록 버튼이 활성화 되지만 아직은 이르다. 아파치가 좋아하는 아파치 전용 사용자 권한을 설정한다. 아파치를 설치하지 않더라도 www-data 사용자와 그룹은 사용할 수 있다. www-data 사용자와 그룹이 가지는 의미는 "nologin" 이다. 즉, 이 사용자로 설정되어 있는 애플리케이션은 로그인 없이 일련의 작업을 수행할 수 있음을 의미한다.

sudo chown -R www-data:www-data /var/www/wordpress

그리고 다음과 같이 디렉터리와 파일에 대해 서로 다른 권한을 부여한다.

sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;

2.5. 데이터베이스 생성

이제 워드프레스가 사용할 데이터베이스를 생성한다. MySQL 쉘로 접근하여 데이터베이스를 생성한다. 다음 명령을 입력하고 설치할 때 설정한 MySQL 접근 비밀번호를 입력한다. 그리고 다음과 같이 명령을 입력하여 데이터베이스를 생성하고, 잘 생성되었는지 확인한다. 그리고 워드프레스 데이터베이스를 이용할 MySQL 계정과 비밀번호를 새롭게 만든다.

mysql -u root -p
Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 52
Server version: 5.5.43-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database wordpress;

Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| phpmyadmin         |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

mysql> CREATE USER wordpress@localhost IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

2.6. 워드프레스 설치

이제 워드프레스 설치를 진행하면 된다. 다시 웹 서버로 접속하면 그림 6과 다른 언어 선택부터 시작하는 것을 볼 수 있다. 당연히 한국어 지원하는데 안 쓸 이유가 없다.

그림 7. 워드프레스 설치 및 운영 언어 선택

다음 그림과 같이 질문이 나오면 친절하게 생성해둔 wordpress 데이터베이스를 사용하고, MySQL 접근 계정과 패스워드를 입력해준다. 여기서 사용자 이름에 root가 아닌 새롭게 생성한 데이터베이스 이름과 패스워드를 입력한다.

그림 8. 워드프레스 데이터베이스 설정

설정이 끝나고 계속 진행하면 워드프레스 사이트 이름, 관리자 계정 및 비밀번호, 이-메일 입력 구간이 나온다. 친절하게 자주 사용하지 않는 것들로 채워 설정한다. 이-메일 주소는 관리자 계정과 비밀번호를 잊었을 때 사용하는 것인데, 웹 서버는 우리 손에 있기에 까먹었다면 크랙킹을 해보자.

설정 및 설치가 완료되면 로그인 화면을 볼 수 있다. 관리자 아이디와 패스워드를 입력하여 로그인하면 다음과 같이 볼 수 있다.

그림 9. 관리자 로그인 화면


댓글을 달아 주세요

티스토리 툴바