리눅스 가상서버 설치 및 운영

2017. 4. 4. 10:25서버 프로그래밍

1. Cafe24 리눅스 가상서버 호스팅 신청

https://www.cafe24.com/?controller=product_page&type=server&page=virtual_linux


2. CentOS에서 MySQL 설치

https://www.lesstif.com/pages/viewpage.action?pageId=24445108


3. CentOS에 MongoDB 설치

https://c5ecbb38d638.gitbooks.io/mongodb-install-manual/content/mongodb_c124_ce58_c900_be44.html


1. CentOS server

CentOS 7 기준

  1. epel 설치

    yum update
    yum install -y epel-release 
  2. npm 설치

    yum install -y npm 

2. mongoDB download & install

  1. mongodb download

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.2.6.tgz 
    https://www.mongodb.com/download-center#community 에서 최신버전 확인
    
  2. 위치 선정

    +

    mv ./mongodb-linux-x86_64-amazon-3.2.6 /usr/local/mongodb 
  3. 설정

    cd /usr/local/mongodb mkdir data; mkidr config; mkidr log 
    vi ./config/mongdb.conf
    dbpath=/usr/local/mongodb 
    logpath=/usr/local/mongodb/log/mongodb.log 
    logappend=true port=5555 
    verbose=true 
    fork=true 
    rest=true


4. git 설치

https://git-scm.com/book/ko/v1/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%84%A4%EC%B9%98

$ yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel


https://git-scm.com/download/linux

$ yum install git


5. 소스 코드 clone 및 빌드


* 이슈 1 : Linux 서버에서 bower install을 하니 패키지가 없다는 오류가 뜬다. (개발용 PC에서는 문제없이 인스톨되었음)

그래서 Linux 서버의 node.js 버전을 확인하니 6.10.1이고, 개발용 PC의 node.js 버전은 6.9.5였다.

http://blog.jeonghwan.net/2016/08/10/nvm.html

NVM 문서에 있는 설치 스크립트로 설치한다.

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.4/install.sh | bash

https://github.com/creationix/nvm#install-script

vi ~/.bash_profile

export NVM_DIR="/Users/Chris/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

nvm install v6.9.5

nvm을 이용해서 Linux 서버에 6.9.5 버전을 설치하고, 다시 puTTY로 접속한 다음 bower install을 하니 정상적으로 설치가 된다.


6. 웹서버 동작 및 테스트


httpd 설정 및 실행을 한다.

http://serverworld.kr/578

test용 HTML을 올려놓고 접속 테스트를 하니 에러가 난다.

/var/log/httpd/error_log를 열어보니 "ModSecurity"에 의해 접속 제한이 걸린 것 같다.

[Sun Apr 23 04:07:57.962531 2017] [:error] [pid 29771] [client 119.198.38.142] ModSecurity: Access denied with code 403 (phase 2). Pattern match "^[\\\\d.:]+$" at REQUEST_HEADERS:Host. [file "/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_21_protocol_anomalies.conf"] [line "98"] [id "960017"] [rev "2"] [msg "Host header is a numeric IP address"] [data "222.239.250.228"] [severity "WARNING"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "9"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [tag "http://technet.microsoft.com/en-us/magazine/2005.01.hackerbasher.aspx"] [hostname "222.239.250.228"] [uri "/404.html"] [unique_id "WPxg3ZeelKlA7oHO3iVOGwAAAAE"]

그래서 modsecurity 설정을 수정해보기로 했다.

vi /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_21_protocol_anomalies.conf

http://katze-misc.kro.kr/3

98번째 줄을 #으로 주석처리 하라고 해서 주석처리를 하니 테스트 페이지가 잘나온다!


rm -rf *

cp -a ~/project/dist/* .

하지만, 앞서 빌드한 파일을 /var/www/html 폴더에 복사하고 접속해보니 다시 접속 에러 발생.

Forbidden

You don't have permission to access / on this server.

/var/log/httpd/error_log를 열어보니 이번엔 permission denied가 나왔다.

[Sun Apr 23 04:56:30.482230 2017] [core:error] [pid 30166] (13)Permission denied: [client 119.198.38.142:56409] AH00035: access to /index.html denied (filesystem path '/var/www/html/index.html') because search permissions are missing on a component of the path


Re: Assistance getting Apache to store website files under a different root directory

Postby TrevorH » 2016/08/12 21:27:53

If you have existing content then you format the new filesystem and mount it somewhere else like e.g /mnt, then cd /var/www/html; cp -ax . /mnt/ to copy the existing content over. Once copied and verifed you can delete what's currently there, umount /mnt and mount it on /var/www/html and make sure it works. May also be necessary to run restorecon -r /var/www/html after mounting it (safer to run it than not). If everything works then you can add a new line to /etc/fstab to auto-mount your new filesystem on /var/www/html at boot time.
CentOS 5 died in March 2017 - migrate NOW!
Full time Geek, part time moderator. Use the FAQ Luke

/var/www/html 폴더에서 다음과 같이 명령어를 실행하니 정상적으로 나온다
restorecon -r *

----------------------------------------

방법 #2 - restorecon

cp 로 복사할 경우 보안 컨텍스트가 복사되는 목적지에 맞게 자동으로 설정되지만  파일이나 디렉터리가 여러 개라면 cp 로 복사하여 보안 컨텍스트가 자동으로 설정되게  하는 건 번거롭다. cp 보다 더 SELinux 에 적합한 방법은 restorecon 명령어를 사용하는 것이다. 명령어 이름에서 짐작했듯이 잘못 설정된 보안 컨텍스트를 복구해 주는 유용한 명령어이다. 부여되는 보안 컨텍스트는 사전에 설정된 정책에 의해 자동으로 설정된다. 다음 두 가지 경우를 보자

  • admin_home_t  를 갖는 test.html 이 /var/www/html 경로에 있을 경우
    restorecon 을 실행하면 httpd_sys_content_t  컨텍스트로 복구
  • httpd_sys_content_t  를 갖는 test.html이 /root 에 있을 경우
    restorecon 을 실행하면 admin_home_t  컨텍스트로 복구

이제 test.html 에 대해 다음과 같이 "restorecon /var/www/html/test.html" 명령어를 적용하여 문제를 해결해 보자. 대상이 디렉터리일 경우 -R 옵션을 붙여서 실행하면 하위 디렉터리까지 재귀적으로 처리해 주므로 "restorecon -R /var/www/html" 명령어를 실행해도 된다.

restorecon 실행 결과

restorecon 을 수행한 후에 결과를 확인해 보면 위와 같이 보안 컨텍스트가 복구된 것을 알 수 있다.