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 기준
epel 설치
yum update yum install -y epel-release
npm 설치
yum install -y npm
2. mongoDB download & install
mongodb download
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.2.6.tgz https://www.mongodb.com/download-center#community 에서 최신버전 확인
위치 선정
mv ./mongodb-linux-x86_64-amazon-3.2.6 /usr/local/mongodb
설정
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 설정 및 실행을 한다.
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"]
vi /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_21_protocol_anomalies.conf
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
방법 #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 을 수행한 후에 결과를 확인해 보면 위와 같이 보안 컨텍스트가 복구된 것을 알 수 있다.