• APM

리눅스를 가장 많이 활용하는 분야 중에 하나가 바로 웹 서버

가장 안정적이고 유명한 Apache 웹 서버

APM = Apache 웹 서버 + 프로그래밍 언어 PHP + 데이터베이스 MariaDB

리눅스 환경에서 사용될 경우에 LAPM(Linux, Apache, PHP, MariaDB) 이라고도 부름

APM이라는 소트프웨어는 존재하지 않으며 이 3가지가 서로 잘 연동되어 운영되도록 만든 환경을 APM이라고 부르는 것

CentOS는 DNF 명령으로 편리한 설치를 제공함

# rpm -qa httpd php mariadb-server

# yum -y install httpd php php-mysqlnd mariadb mariadb-server

# systemctl restart httpd(mariadb도)

# systemctl enable httpd(mariadb도)

# systemctl status httpd(mariadb도)

# firewall-config -> http 활성화

firefox에서 127.0.0.1로 이동 -> testing 123 뜨면 정상

# cd /var/www/html/ -> html 홈 디렉터리

# vim phpinfo.php
<?php phpinfo(); ?> 입력 후 저장
127.0.0.1/phpinfo.php 들어가면 php 설정한거 확인 가능

# vim index.html

<h1>Hi</h1> 입력 후 저장

127.0.0.1 들어가면 설정된거 확인 가능

  • Web Server 및 DB Server 구축

# mysql -> db서버 구축

MariaDB [(none)]> GRANT ALL PRIVILEGES ON DB이름.*TO DBuser명@localhost(db서버와 웹 서버를 별도로 구축할 경우 localhost 대신 웹 서버를 입력) IDENTIFIED BY '비밀번호' ;

MariaDB [(none)]> exit

# mysql -u DBuser명 -p비밀번호

MariaDB [(none)]> CREATE DATABASE DB이름;

MariaDB [(none)]> SHOW DATABASES ; 로 확인

MariaDB [(none)]> exit

 

xe 공식홈페이지에서 core 다운 후 /var/www/html에 압축해제-> web서버 구축

# chmod -R 707 xe

웹 브라우저에서 127.0.0.1/xe > DB이름 및 사용자 입력 > DB에 연결되지 않는다면 방화벽 문제(방화벽을 끄거나 # systemctl stop firewalld 방화벽에 포트를 추가 # firewall-cmd --permanent --zone=public --add-port=port번호(보통 3306)/tcp -> # firewall-cmd --reload)

※ setenforce 0 반드시 하기

※ 웹 서버와 DB 서버를 분리한다면 /etc/mysql/mariadb.conf.d/50-server.cnf 에 bind-address를 주석 처리해야 함

 

  • ACL(Access Control List)

# vim /etc/httpd/conf/httpd.conf -> 웹에 대한 기본 설정 파일(기본 파일, 포트 번호 등)

<Directory "/var/www/html">의 Require all granted 밑에

Order allow,deny (특정 ip 입력이 순위가 낮게 순서 지정)

Allow from all

deny from 차단할ip주소 추가

# vim /var/www/html/index.html > 작성

차단ip 및 허용ip에서 접속 확인

 

  • php 설정파일

php와 html이 동시에 있다면 우선순위는 html

# vim /etc/php.ini -> php에 대한 기본 설정 파일

 

  • cgi

웹 서버가 클라이언트에게 제공하는 데이터는 정적, 동적인 데이터를 전달하기 위해 사용하는 것이 perl, php, python 같은 서버 사이드 스크립트, 서버 사이드 스크립트와 웹 서버가 서로 통신하는 방법을 정의한 것이 cgi

# vim /etc/httpd/conf/httpd.conf에서 Addhandler cgi-script .cgi에 .py 추가

/var/www/cgi-bin에 python script 작성

예시)

chmod 707 python script -> apache가 해당 스크립트를 사용할 수 있도록 권한 설정

웹 브라우저 > 192.168.111.100/cgi-bin/first.py로 확인

  • 웹 페이지 인증

basic - 서버로 사용자 이름과 암호를 Base64로 인코딩 된 문자열을 전송(도청에 취약)

# vim /etc/httpd/conf.d/auth_basic.conf > 설정 입력

<Directory /var/www/html/basic>
AuthType Basic(인증 방식)
AuthName 인증 시 나타낼 인증방식 이름(ex."Basic Authentication Test")
AuthUserFile 유저파일 경로(ex./etc/httpd/.htpasswd)
Require user 유저명(ex.seunghyun Na, 명시된 유저만 인증을 통해 접속 가능하게 한다는 옵션)
Require valid-user (인증된 유저만 접속을 가능하게 한다는 옵션)

Order deny,allow (ACL도 추가)
Deny from all
Allow from 192.168.0. 192.168.111.
</Directory>

# htpasswd -c /etc/httpd/.htpasswd seunghyun(-c는 create로 처음 만들때 사용)

# htpasswd /etc/httpd/.htpasswd Na

# cat /etc/httpd/.htpasswd -> 비밀번호 암호문으로 설정된거 확인

# mkdir /var/www/html/basic

basic안에 index.html 작성

# systemctl restart httpd

웹 브라우저에 주소/basic 입력 후 인증 확인

digest - 서버로 사용자 이름과 암호 등을 조합하여 md5 값으로 전송

# vim /etc/httpd/conf.d/auth_digest.conf > 설정 입력

<Directory /var/www/html/digest>
AuthType Digest
AuthName 인증 시 나타낼 인증방식 이름(ex."Digest Private Area")
AuthUserFile 유저파일 경로(ex./etc/httpd/.htdigest)
Require valid-user (인증된 유저만 접속을 가능하게 한다는 옵션)

Order deny,allow (ACL도 추가)
Deny from all
Allow from 192.168.50. 192.168.111.
</Directory>

# htdigest -c /etc/httpd/.htpasswd '인증방식 이름'(ex.'Digest Private Area') user명(-c는 create로 처음 만들때 사용)

# cat /etc/httpd/.htdigest -> 비밀번호 암호문으로 설정된거 확인

# mkdir /var/www/html/digest

digest디렉터리 안에 index.html 작성

# systemctl restart httpd

웹 브라우저에 주소/digest 입력 후 인증 확인

  • was

웹 서버 + 웹 컨테이너(동적 컨텐츠 수행)

# yum -y install tomcat tomcat-webapps -> tomcat 사용

# cd /usr/share/tomcat/webapps/ROOT -> 기본 디렉터리

# vim /usr/share/tomcat/conf/tomcat-users.xml

manager-gui 주석 해제, admin user 주석 해제

# systemctl restart tomcat

# vim /usr/share/tomcat/webapps/ROOT/index.jsp

java 작성

웹 브라우저에 주소:8080 입력 후 확인

  • https

apache

인증, 서로 교환되는 데이터를 암호화함, 443 포트 사용

개인키 생성 -> CSR 생성 -> 개인키와 CSR를 이용해 Certificate(인증서) 생성

CSR : SSL 인증의 정보를 암호화하여 인증기관에 보내 인증서를 발급받게 하는 신청서

# cd /etc/pki/tls/certs -> 인증서 위치

# openssl genrsa -out http.key(개인키 이름) 2048(용량) -> 개인키 생성

# openssl req -new -key http.key(개인키 이름) -out http.csr(CSR 이름) -> CSR 생성

# openssl x509 -req -days 356(유효기간) -in http.csr(CSR 이름) -signkey http.key(개인키 이름) -out http.crt(인증서 이름) -> 인증서 생성

# yum -y install mod_ssl

# vim /etc/httpd/conf.d/ssl.conf -> 설정 파일(documentroot, servername, sslfile 수정)

# systemctl restart httpd

# netstat -natlp | grep httpd -> httpd port 확인

# lsof -i tcp:443 -> 443 port 상태 확인

웹 브라우저에서 https://주소 입력해서 확인

tomcat

8443 포트 사용

# keytool -genkey -alias tomcat(별칭) -keyalg RSA(key알고리즘 종류) -keystore /etc/pki/keystore(key 저장 위치)

# vim /usr/share/tomcat/conf/server.xml -> 8443 포트의 keystorefile, keystorepass 추가

# systemctl restart tomcat

웹 브라우저에서 https://주소:8443 입력해서 확인