2차 네임서버 동기화/도메인 설정확인/zone transfer 제한/아파치 설치/웹페이지 접속 과정 살펴보기/동적 페이지 생성하기/ Apache + PHP 연동하기/MariaDB 설치하기/APM 설치하기/가상호스트 설정하기/ (교육 45일차)

SW·2023년 1월 25일

실습> 아래 조건에 맞게 2차 네임서버에서 동기화 하시오.


2차 네임서버에서 1차 네임서버의 도메인에 대한 정보를 그대로 복사한다.
1차 네임서버: server.com, kh.com, sbs.com
2차 네임서버: server.com

1. 도메인 등록
[root@ns2 ~]# vi /etc/named.rfc1912.zones
:
:(생략)
zone "server.com" IN {
type slave; // 복사본이므로 slave
file "server.com.zone"; // /var/named/server.com.zone
masters { 200.200.200.3; }; // 1차 네임서버 주소
};

// 한 줄로 설정해도 상관없다.
zone "kh.com" IN { type slave; file "kh.com.zone"; masters { 200.200.200.3; }; };
zone "sbs.com" IN { type slave; file "sbs.com.zone"; masters { 200.200.200.3; }; };

2. 네임 서버 재시작
[root@ns2 ~]# ls -F /var/named/
chroot/ dynamic/ named.empty named.loopback slaves/
data/ named.ca named.localhost server.com.zone

[root@ns2 ~]# named-checkconf

[root@ns2 ~]# systemctl restart named

확인1 체크. 포워드 존파일이 생겼다.
[root@ns2 ~]# ls -F /var/named/
chroot/ dynamic/ named.ca named.localhost sbs.com.zone slaves/
data/ kh.com.zone named.empty named.loopback server.com.zone

3. 확인
kh.com, sbs.com 도메인에 대한 포워드 존파일이 동기화가 되었는지 확인한다.
아래처럼 kh.com.zone, sbs.com.zone 파일이 생성되면 잘 동기화가 된 것이다.
만약 파일이 생성이 안되면 방화벽이나 설정파일에 문제가 없는지 확인해야 한다.
[root@ns2 ~]# file /var/named/kh.com.zone
/var/named/kh.com.zone: ASCII text

[root@ns2 ~]# file /var/named/sbs.com.zone
/var/named/sbs.com.zone: ASCII text

[root@ns2 ~]# cat -n /var/named/kh.com.zone
1 $ORIGIN .
2 $TTL 300 ; 5 minutes
3 kh.com IN SOA ns1.kh.com. root.kh.com. (
4 2023012001 ; serial
5 21600 ; refresh (6 hours)
6 1800 ; retry (30 minutes)
7 1209600 ; expire (2 weeks)
8 10800 ; minimum (3 hours)
9 )
10 NS ns1.kh.com.
11 A 200.200.200.3
12 $ORIGIN kh.com.
13 ns1 A 200.200.200.3
14 www A 200.200.200.3

[root@ns2 ~]# cat -n /var/named/sbs.com.zone
1 $ORIGIN .
2 $TTL 300 ; 5 minutes
3 sbs.com IN SOA ns1.sbs.com. webmaster.sbs.com. (
4 2023012001 ; serial
5 21600 ; refresh (6 hours)
6 1800 ; retry (30 minutes)
7 1209600 ; expire (2 weeks)
8 10800 ; minimum (3 hours)
9 )
10 NS ns1.sbs.com.
11 A 200.200.200.3
12 $ORIGIN sbs.com.
13 ns1 A 200.200.200.3
14 www A 200.200.200.3

4. 도메인 확인
kh.com, sbs.com의 IP주소를 확인하면 200.200.200.3 이 나오면 정상적으로 세팅된 것이다.
[root@ns2 ~]# dig @200.200.200.4 kh.com +short
200.200.200.3
[root@ns2 ~]# dig @200.200.200.4 sbs.com +short
200.200.200.3

실습> 도메인 설정 확인하기

Host OS 에서 nslookup을 실행해서 server.com, kh.com, sbs.com을 확인해서
IP주소가 잘 나오는지 확인하고 안되면 방화벽이나 설정을 확인해야 한다.

C:\Users\user>nslookup
기본 서버: ns.lgdacom.net
Address: 164.124.101.2

> server 200.200.200.3

기본 서버: [200.200.200.3]
Address: 200.200.200.3

네임서버를 200.200.200.3으로 설정하고 server.com, kh.com, sbs.com을 확인한다.

> server.com

서버: [200.200.200.3]
Address: 200.200.200.3

이름: server.com
Address: 200.200.200.3

> kh.com

서버: [200.200.200.3]
Address: 200.200.200.3

이름: kh.com
Address: 200.200.200.3

> sbs.com

서버: [200.200.200.3]
Address: 200.200.200.3

이름: sbs.com
Address: 200.200.200.3

네임서버를 200.200.200.4으로 설정하고 server.com, kh.com, sbs.com을 확인한다.

> server 200.200.200.4

DNS request timed out.
timeout was 2 seconds.
기본 서버: [200.200.200.4]
Address: 200.200.200.4

> server.com

서버: [200.200.200.4]
Address: 200.200.200.4

이름: server.com
Address: 200.200.200.3

> kh.com

서버: [200.200.200.4]
Address: 200.200.200.4

이름: kh.com
Address: 200.200.200.3

> sbs.com

서버: [200.200.200.4]
Address: 200.200.200.4

이름: sbs.com
Address: 200.200.200.3

> quit

실습> zone transfer 제한하기

존의 정보를 2차 네임서버 이외에서 가져가지 못하게 설정하는 것이다.
allow-transfer { none; }; <-- 2차 네임서버가 없을 때 설정
allow-transfer { 200.200.200.4; }; <-- 2차 네임서버가 있을 때 설정 (2차 네임서버 200.200.200.4라고 가정)

1. zone transfer 제한
zone transfer를 제한하지 않았을 경우에 Host OS에서 전체 정보를 요청하면 자신이 가지고 있는 도메인에 모든 정보를 전송한다.
C:\Users\user>nslookup

> server 200.200.200.3
기본 서버:  [200.200.200.3]
Address:  200.200.200.3
> set type=any
> ls -d server.com

2. zone transfer 제한 설정
/etc/named.conf 에서 설정한다.
[root@ns1 ~]# vi /etc/named.conf

recursion yes;
/*  
 * zone transfer 설정
 * 200.200.200.4 에서만 존을 동기화할 수 있도록 설정한다.
 */
allow-transfer { 200.200.200.4; };
/*
 * notify 설정
 * also-notify에 설정한 IP주소(2차 네임서버)로 NOTIFY 메세지를 발송한다.
 */
notify yes;
also-notify { 200.200.200.4; };   

[root@ns1 ~]# systemctl restart named

3. 로그 모니터링
zone transfer 를 요청할 때의 로그를 확인하기 위해서 /var/log/messages 파일을 모니터링 한다.
[root@ns1 ~]# rdate -s time.bora.net
[root@ns1 ~]# > /var/log/messages
[root@ns1 ~]# tail -f /var/log/messages

4. 동기화 요청
Host OS에서 server.com 에 대한 모든 정보를 요청하고 로그를 확인한다.
C:\Users\user>nslookup

> server 200.200.200.3
> set type=any
> ls -d server.com

[[200.200.200.3]]
*** 도메인 server.com을(를) 나열할 수 없습니다. Query refused
DNS 서버가 영역 server.com을(를) 사용 중인 컴퓨터에 전송하는 것을 거부했습니다.
잘못된 경우에는 IP 주소 200.200.200.3의 DNS에서 server.com의 영역 전송 보안 설정을
확인하십시오.

[root@ns1 ~]# tail -f /var/log/messages
Jan 25 10:33:38 ns1 named[14291]: client @0x7f530c0569f0 200.200.200.1#32456 (server.com): zone transfer 'server.com/AXFR/IN' denied

실습> 몇가지 설정하기

1. 존 파일 수정
[root@ns1 ~]# cd /var/named/

[root@ns1 named]# vi server.com.zone

[root@ns1 named]# vi kh.com.zone

[root@ns1 named]# vi sbs.com.zone

2. 네임서버 재시작
[root@ns1 named]# systemctl restart named

3. 동기화 확인
[root@ns2 ~]# yum -y install rdate
[root@ns2 ~]# rdate -s time.bora.net
[root@ns2 ~]# date
2023. 01. 25. (수) 11:01:21 KST
[root@ns2 ~]# ll /var/named/

합계 28
drwxr-x---. 7 root named 61 1월 19 17:20 chroot
drwxrwx---. 2 named named 23 1월 19 17:20 data
drwxrwx---. 2 named named 60 1월 25 11:01 dynamic
-rw-r--r--. 1 named named 426 1월 25 11:01 kh.com.zone
-rw-r-----. 1 root named 2253 4월 5 2018 named.ca
-rw-r-----. 1 root named 152 12월 15 2009 named.empty
-rw-r-----. 1 root named 152 6월 21 2007 named.localhost
-rw-r-----. 1 root named 168 12월 15 2009 named.loopback
-rw-r--r--. 1 named named 438 1월 25 11:01 sbs.com.zone
-rw-r--r--. 1 named named 453 1월 25 11:01 server.com.zone
drwxrwx---. 2 named named 6 10월 4 16:06 slaves

[root@ns2 ~]# cat -n /var/named/server.com.zone

[root@ns2 ~]# cat -n /var/named/kh.com.zone

[root@ns2 ~]# cat -n /var/named/sbs.com.zone


















########
📌 APM 📌
########
LAMP: Linux + Apache + MySQL or MariaDB + PHP
LEMP: Linux + Enginx + MySQL or MariaDB + PHP

실습> 아파치 설치하기

여기서 설치하는 아파치 웹서버는 APM 연동 설치가 아니고 Apache 웹서버만 단독으로 설치하는 것이다.

WEB Client와 WEB Server는 HTTP로 대화(Request/Response)를 한다.

1. 웹서버 패키지 설치
httpd: 아파치 웹서버 패키지
[root@ns1 named]# cd
[root@ns1 ~]# yum -y install httpd

2. 웹페이지 생성
[root@ns1 ~]# vi /var/www/html/index.html

<html>
  <head>
    <meta charset="utf8">
    <title> ::: 기본 페이지 ::: </title>
  </head>
<body>
    Hello~!
    Welcome to my Home~!!
</body>
</html>

[root@ns1 ~]# systemctl enable httpd
[root@ns1 ~]# systemctl start httpd

3. 확인
[root@ns1 ~]# ps aux|grep httpd

[root@ns1 ~]# netstat -nltp|grep http

4. 방화벽 확인
firewalld 가 중지가 되었는지 확인한다.
-만약 중지가 안되었다면 중지하고 비활성화한다.
[root@ns1 ~]# systemctl status firewalld

iptables 방화벽이 설정되어 있다면 80번 포트가 열려있는지 확인한다.
-80/tcp 이 열려있지 않았다면 패킷을 받아들일 수 있게 설정한다.

  1. 웹서버 접속
    Host OS에서 브라우저로 접속한다.
    http://200.200.200.3/
    Hello~! Welcome to my Home~!!

실습> 웹페이지 접속 과정 살펴보기

-- 순서 --
DNS 서버로 접속해서 도메인에 대한 IP주소를 요청한다.
DNS 클라이언트로 요청한 도메인에 대한 IP주소를 응답한다.
응답을 받은 웹서버의 80번 포트로 접속해서 웹페이지를 요청한다.
웹 클라이언트로 요청한 웹페이지(index.html)를 응답한다.
웹 서버가 전송해준 index.html의 내용을 웹 클라이언트가 받아서 브라우저에 출력한다.

-- 순서 --

Step1. DNS 서버로 접속해서 도메인에 대한 IP주소를 요청한다.
-이때 DNS 서버는 자신이 설정한 DNS Server로 접속해서 요청한다.
[root@ns2 ~]# lynx --dump server.com

Step2. DNS 클라이언트로 요청한 도메인에 대한 IP주소를 응답한다.

Step3. 응답을 받은 웹서버의 80번 포트로 접속해서 웹페이지를 요청한다.
-여기서는 index.html을 요청한다.

Step4. 웹 클라이언트로 요청한 웹페이지(index.html)를 응답한다.

Step5. 웹 서버가 전송해준 index.html의 내용을 웹 클라이언트가 받아서 브라우저에 출력한다.

1. 네임서버 변경
ns1, ns2의 DNS 서버를 모두 변경한다.
1차 DNS서버: 200.200.200.3
2차 DNS서버: 200.200.200.4

[root@ns1 ~]# nmtui
1차 DNS서버: 200.200.200.3
2차 DNS서버: 200.200.200.4
[root@ns1 ~]# systemctl restart network
[root@ns1 ~]# cat /etc/resolv.conf
#Generated by NetworkManager
search server.com
nameserver 200.200.200.3
nameserver 200.200.200.4

[root@ns2 ~]# nmtui
1차 DNS서버: 200.200.200.3
2차 DNS서버: 200.200.200.4
[root@ns2 ~]# systemctl restart network
[root@ns2 ~]# cat /etc/resolv.conf
#Generated by NetworkManager
search server.com
nameserver 200.200.200.3
nameserver 200.200.200.4

2. 웹서버 접속
[root@ns1 ~]# yum -y install lynx
[root@ns2 ~]# yum -y install lynx

[root@ns1 ~]# lynx --dump 200.200.200.3
Hello~! Welcome to my Home~!!

[root@ns1 ~]# lynx --dump server.com
Hello~! Welcome to my Home~!!

[root@ns2 ~]# lynx --dump 200.200.200.3
Hello~! Welcome to my Home~!!

[root@ns2 ~]# lynx --dump server.com
Hello~! Welcome to my Home~!!

실습> 동적 페이지 생성하기

1. 웹페이지 생성
Apache 웹 서버가 PHP와 연동하지 않은 상태에서 동적인 웹페이지를 생성한다.
[root@ns1 ~]# vi /var/www/html/test.php

<?php
phpinfo();
?>

2. 웹 서버 접속
동적인 웹페이지를 생성한 후 아래처럼 접속하면 소스코드 형태로 출력된다.
php 소스코드를 해석할 수 있는 엔진이 없어서 아래처럼 소스코드가 출력된 것이다.
http://200.200.200.3/test.php

<?php
phpinfo();
?>

실습> Apache + PHP 연동하기

/etc/httpd: 웹서버 설정 디렉터리

1. php 설치
[root@ns1 ~]# yum -y install php
[root@ns1 ~]# rpm -qf /etc/httpd/conf.d/php.conf
php-5.4.16-48.el7.x86_64

2. 웹 서버 재시작
[root@ns1 ~]# systemctl restart httpd

3. 웹 서버 접속
다시 php 로 접속하면 동적 웹페이지를 사용할 있게 HTML로 변경된 페이지가 출력된다.
http://200.200.200.3/test.php

PHP Logo
PHP Version 5.4.16

System Linux ns1.server.com 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
Build Date Apr 1 2020 04:08:16
:
:(생략)

실습> Apache + PHP 연동하기

확장자:
-파일명.html: html 문서
-파일명.php: php 문서
-파일명.htm: html 문서 (오래전에 사용했던 파일)
-파일명.php3: php 문서 (오래전에 사용했던 파일)
-파일명.php4: php 문서 (오래전에 사용했던 파일)

1. 웹 페이지 복사
[root@ns1 ~]# cp /var/www/html/test.php /var/www/html/test2.html

2. 웹 서버 접속
다시 html 로 접속하면 페이지가 아무것도 출력되지 않는다.
http://200.200.200.3/test2.html

<?php        <-- 오른쪽 마우스를 클릭해서 소스보기로 확인하면
phpinfo();   <-- PHP 소스코드가 보인다.
?>

3. PHP 인식 설정
/etc/httpd/conf.d/php.conf 파일을 열어서 확장자를 추가한다.
변경 전: <FilesMatch .php> 변경 후: <FilesMatch \.(php|html)>
[root@ns1 ~]# vi /etc/httpd/conf.d/php.conf
#확장자가 .php or .html 이면 PHP로 인식하게 설정한다.
<FilesMatch .(php|html)$>
SetHandler application/x-httpd-php

DirectoryIndex index.php index.html

[root@ns1 ~]# systemctl restart httpd

4. 웹 서버 접속
다시 html 로 접속하면 PHP가 해석된 HTML 페이지가 출력된다.
http://200.200.200.3/test2.html

PHP Logo
PHP Version 5.4.16

System Linux ns1.server.com 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
Build Date Apr 1 2020 04:08:16
:
:(생략)

실습> .phps

SetHandler application/x-httpd-php: php 코드로 인식하는 옵션
SetHandler application/x-httpd-php-source: php 소스코드로 인식하는 옵션

보안상 .phps 는 사용하지 않는 것이 좋다.
여기서는 .phps가 어떤 것인지 확인하기 위한 실습이다.

1. 설정파일 수정
[root@ns1 ~]# cat /etc/httpd/conf.d/php.conf
#확장자가 .php or .html 이면 PHP로 인식하게 설정한다.

<FilesMatch \.(php|html)$>
    SetHandler application/x-httpd-php
</FilesMatch>

AddType text/html .php
DirectoryIndex index.php index.html

<FilesMatch \.phps$>
    SetHandler application/x-httpd-php-source
</FilesMatch>

php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"

2. 웹 서버 재시작
[root@ns1 ~]# systemctl reload httpd

3. 심볼릭 링크 생성
[root@ns1 ~]# cd /var/www/html/
[root@ns1 html]# ln -s test.php test.phps
[root@ns1 html]# ll test.phps
lrwxrwxrwx. 1 root root 8 1월 25 15:03 test.phps -> test.php

4. 웹 서버 접속
http://200.200.200.3/test.phps

5. .php 설정 주석처리
설정 파일을 열어서 .phps 부분을 모두 주석처리한다.
[root@ns1 html]# vi /etc/httpd/conf.d/php.conf
#확장자가 .php or .html 이면 PHP로 인식하게 설정한다.

<FilesMatch \.(php|html)$>
    SetHandler application/x-httpd-php
</FilesMatch>

AddType text/html .php
DirectoryIndex index.php index.html

#<FilesMatch \.phps$>
#SetHandler application/x-httpd-php-source
#</FilesMatch>

php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"

[root@ns1 html]# systemctl reload httpd
[root@ns1 html]# rm -f test.phps

6. 웹 서버 접속
http://200.200.200.3/test.phps
Not Found
The requested URL /test.phps was not found on this server.

실습> MariaDB 설치하기

Apache + PHP + MariaDB

DBMS는 외부에 직접적으로 연결될 수 없게 설정하는게 일반적이다.
만약 외부에서 연결하기 위해서는 터널링을 이용해서 설정하면 외부에서도 접속이 가능하다.

MariaDB의 최신 버전을 설치하기 위해서는 MariaDB 공식 사이트에서 저장소 주소를 가져와서 설정하면
최신버전을 받을 수 있다. 여기서는 그냥 기본 저장소에 있는 것으로 설정한다.

1. 패키지 설치
mariadb: MariaDB 클라이언트 패키지
mariadb-server: MariaDB 서버 패키지
php-mysql: PHP가 MariaDB에 접속할 수 있는 패키지
[root@ns1 ~]# yum -y install mariadb mariadb-server php-mysql
[root@ns1 ~]# systemctl enable mariadb

2. 설정 파일 수정
[root@ns1 ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#아래 4줄을 추가한다.
collation-server=utf8_general_ci
character-set-server=utf8
skip-character-set-client-handshake
bind-address=127.0.0.1

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#include all files from the config directory

!includedir /etc/my.cnf.d

설정 파일을 수정 후 mariadb를 시작한다.

3. DB서버 시작
[root@ns1 ~]# systemctl start mariadb
[root@ns1 ~]# netstat -nltp | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0: LISTEN 15562/mysqld
[root@ns1 ~]# ss -nltp | grep 3306
LISTEN 0 50 127.0.0.1:3306
:* users:(("mysqld",pid=15562,fd=14))

[root@ns1 ~]# cat /etc/services
mysql tcp 포트 3306 확인

[root@ns1 ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> \s
--------------

mysql Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1

Connection id: 3
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 5.5.68-MariaDB MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8 <-- 언어셋 확인
Db characterset: utf8 <-- 언어셋 확인
Client characterset: utf8 <-- 언어셋 확인
Conn. characterset: utf8 <-- 언어셋 확인
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 10 min 41 sec

Threads: 1  Questions: 7  Slow queries: 0  Opens: 0  Flush tables: 2  Open tables: 26  Queries per second avg: 0.010
--------------

MariaDB [(none)]> quit

4. DBMS 관리자 비밀번호 설정
mariadb를 설치하면 DBMS 관리자(root)의 비밀번호가 없기 때문에 반드시 비밀번호를 설정한다.
mysqladmin : 여러 가지 역할을 하는 관리자용 프로그램
형식 : Usage: mysqladmin [OPTIONS] command command....
mysqladmin -h 호스트명 -u 사용자 -p비밀번호 password [new-password]

[root@ns1 ~]# mysqladmin --help
mysqladmin Ver 9.0 Distrib 5.5.68-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Administration program for the mysqld daemon.
Usage: mysqladmin [OPTIONS] command command....

:
:(생략)
-h, --host=name Connect to host.
-u, --user=name User for login if not current user.
-p, --password[=name]
password [new-password] Change old password to new-password in current format
:
:(생략)`

관리자(DB root)의 비밀번호를 P@ssw0rd로 변경한다.
-h localhost : 생략 가능 (클라이언트와 서버가 같은 호스트에 존재하면)
-u root : 생략 가능 (시스템 계정명과 DBMS 로그인 계정명이 동일하면)
[root@ns1 ~]# mysqladmin -h localhost -u root -p password
Enter password: <-- 현재 비밀번호는 없으므로 엔터
New password: <-- 새로운 비밀번호 (P@ssw0rd)
Confirm new password: <-- 새로운 비밀번호 (P@ssw0rd)

mysql 명령어로 DBMS(mariadb)로 접속한다.

Usage: mysql [OPTIONS][database]

-h localhost : 생략 가능 (클라이언트와 서버가 같은 호스트에 존재하면)
-u root : 생략 가능 (시스템 계정명과 DBMS 로그인 계정명이 동일하면)

3개의 명령어는 동일하게 mariadb의 관리자 root로 접속할 수 있다.
#mysql -h localhost -u root -pP@ssw0rd
#mysql -u root -pP@ssw0rd
#mysql -pP@ssw0rd

DB서버 자동 접속 설정하기
자신의 홈디렉터리에 .my.cnf 파일을 아래처럼 만들어 놓으면 호스트명, 사용자, 비밀번호
입력을 생략하고 DBMS(mariadb) 서버에 자동으로 접속할 수 있다.
[root@ns1 ~]# vi .my.cnf
[client]
host = localhost <-- -h 옵션
user = root <-- -u 옵션
password = P@ssw0rd <-- -p 옵션

[root@ns1 ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> SELECT user();

MariaDB [(none)]> exit

설정파일이 저장되면 허가권(Permission)을 변경한다.
[root@ns1 ~]# chmod 600 .my.cnf

불필요한 사용자 제거
mysql DB로 접속해서 사용자/DB에 대한 불필요한 설정들을 삭제한다.
[root@ns1 ~]# mysql mysql
MariaDB [mysql]>

DB의 목록을 확인한다.
MariaDB [mysql]> SHOW DATABASES;

mysql DB에 있는 Table의 목록을 확인한다.
MariaDB [mysql]> SHOW TABLES;

user 테이블의 구조를 확인한다.
MariaDB [mysql]> DESC user;

user 테이블에서 host,user,password 컬럼만 출력한다.
MariaDB [mysql]> SELECT host,user,password FROM user;

user 테이블에서 password 컬럼에 값이 없는 행(5행)을 모두 삭제한다.
MariaDB [mysql]> DELETE FROM user WHERE password = '';
Query OK, 5 rows affected (0.00 sec)

MariaDB [mysql]> SELECT host,user,password FROM user;

db 테이블의 구조를 확인한다.
MariaDB [mysql]> DESC db;

MariaDB [mysql]> SELECT host,user,db FROM db;

MariaDB [mysql]> DELETE FROM db;
Query OK, 2 rows affected (0.00 sec)

MariaDB [mysql]> SELECT host,user,db FROM db;
Empty set (0.00 sec)

권한을 다시 읽어들인다.
MariaDB [mysql]> FLUSH PRIVILEGES;
MariaDB [mysql]> exit

실습> APM 설치하기

1. 웹서버 패키지 설치
httpd: 아파치 웹서버 패키지
php: php 패키지
mariadb: MariaDB 클라이언트 패키지
mariadb-server: MariaDB 서버 패키지
php-mysql: PHP가 MariaDB에 접속할 수 있는 패키지
[root@ns2 ~]# yum -y install httpd php php-mysql mariadb mariadb-server

2. PHP 인식 설정
/etc/httpd/conf.d/php.conf 파일을 열어서 확장자를 추가한다.

변경 전: <FilesMatch \.php$>  
변경 후: <FilesMatch \.(php|html)$>

[root@ns2 ~]# vi /etc/httpd/conf.d/php.conf
#확장자가 .php or .html 이면 PHP로 인식하게 설정한다.

<FilesMatch \.(php|html)$>
    SetHandler application/x-httpd-php
</FilesMatch>

DirectoryIndex index.php index.html

아파치 웹 서버를 활성화 시키고 시작한다.
[root@ns2 ~]# systemctl enable httpd
[root@ns2 ~]# systemctl start httpd

2. 웹페이지 생성
/var/www/html/index.php 파일에 PHP 소스코드를 작성한다.
[root@ns2 ~]# vi /var/www/html/index.php

<?php
phpinfo();
?>

3. 웹 서버 접속
다시 php 로 접속하면 동적 웹페이지를 사용할 있게 HTML로 변경된 페이지가 출력된다.
http://200.200.200.4/

PHP Logo
PHP Version 5.4.16

System Linux ns1.server.com 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
Build Date Apr 1 2020 04:08:16
:
:(생략)

DBMS는 외부에 직접적으로 연결될 수 없게 설정하는게 일반적이다.
만약 외부에서 연결하기 위해서는 터널링을 이용해서 설정하면 외부에서도 접속이 가능하다.

MariaDB의 최신 버전을 설치하기 위해서는 MariaDB 공식 사이트에서 저장소 주소를 가져와서 설정하면
최신버전을 받을 수 있다. 여기서는 그냥 기본 저장소에 있는 것으로 설정한다.

4. DB 설정 파일 수정
[root@ns2 ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#아래 4줄을 추가한다.
collation-server=utf8_general_ci
character-set-server=utf8
skip-character-set-client-handshake
bind-address=127.0.0.1

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#include all files from the config directory

!includedir /etc/my.cnf.d

설정 파일을 수정 후 mariadb를 시작한다.

5. DB서버 시작
[root@ns2 ~]# systemctl enable mariadb
[root@ns2 ~]# systemctl start mariadb

6. DBMS 관리자 비밀번호 설정
mariadb를 설치하면 DBMS 관리자(root)의 비밀번호가 없기 때문에 반드시 비밀번호를 설정한다.
mysqladmin : 여러 가지 역할을 하는 관리자용 프로그램
형식 : Usage: mysqladmin [OPTIONS] command command....
mysqladmin -h 호스트명 -u 사용자 -p비밀번호 password [new-password][root@ns2 ~]# mysqladmin -h localhost -u root -p password P@ssw0rd
Enter password: <-- 현재 비밀번호는 없으므로 엔터

DB서버 자동 접속 설정하기
자신의 홈디렉터리에 .my.cnf 파일을 아래처럼 만들어 놓으면 호스트명, 사용자, 비밀번호
입력을 생략하고 DBMS(mariadb) 서버에 자동으로 접속할 수 있다.
[root@ns2 ~]# vi .my.cnf
[client]
#host = localhost <-- -h 옵션
#user = root <-- -u 옵션
password = P@ssw0rd <-- -p 옵션

설정파일이 저장되면 허가권(Permission)을 변경한다.
[root@ns2 ~]# chmod 600 .my.cnf

불필요한 사용자 제거
mysql DB로 접속해서 사용자/DB에 대한 불필요한 설정들을 삭제한다.
[root@ns2 ~]# mysql mysql

user 테이블에서 password 컬럼에 값이 없는 행(5행)을 모두 삭제한다.
MariaDB [mysql]> DELETE FROM user WHERE password = '';
MariaDB [mysql]> DELETE FROM db;
MariaDB [mysql]> FLUSH PRIVILEGES;
MariaDB [mysql]> exit

APM 버전을 확인한다.
[root@ns2 ~]# httpd -v
[root@ns2 ~]# php -v
[root@ns2 ~]# mysql -V
[root@ns2 ~]# /usr/libexec/mysqld -V

실습> 가상호스트 설정하기

Domain User WEB Directory IP Address
server.com serveruser /home/serveruser/public_html 200.200.200.3
kh.com khuser /home/khuser/public_html 200.200.200.3
sbs.com sbsuser /home/sbsuser/public_html 200.200.200.3

1. 도메인 설정
이미 설정했기 때문에 이 부분은 skip 한다.
[root@ns2 ~]# dig server.com +short
200.200.200.3
[root@ns2 ~]# dig kh.com +short
200.200.200.3
[root@ns2 ~]# dig sbs.com +short
200.200.200.3

2. 사용자 생성

[root@ns1 ~]# mkdir /etc/skel/public_html
[root@ns1 ~]# useradd -g users serveruser
[root@ns1 ~]# useradd -g users khuser
[root@ns1 ~]# useradd -g users sbsuser

[root@ns1 ~]# passwd serveruser
[root@ns1 ~]# passwd khuser
[root@ns1 ~]# passwd sbsuser

[root@ns1 ~]# chmod o+x /home/{server,kh,sbs}user
[root@ns1 ~]# ls -l /home
합계 0
drwx-----x. 3 khuser users 81 1월 25 17:37 khuser
drwx-----x. 3 sbsuser users 81 1월 25 17:37 sbsuser
drwx-----x. 3 serveruser users 81 1월 25 17:37 serveruser

3. 웹 페이지 생성
[root@ns1 ~]# su - serveruser
[serveruser@ns1 ~]$ vi public_html/index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf8">
    <title> ::: server.com ::: </title>
  </head>

<body>
<?php
  $message = "server.com에 오신 것을 환영합니다.";
  echo $message;
?>
</body>
</html>

[serveruser@ns1 ~]$ exit

[root@ns1 ~]# su - khuser
[khuser@ns1 ~]$ vi public_html/index.html

::: kh.com ::: [khuser@ns1 ~]$ exit

[root@ns1 ~]# su - sbsuser
[sbsuser@ns1 ~]$ vi public_html/index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf8">
    <title> ::: sbs.com ::: </title>
  </head>

<body>
<?php
  $message = "sbs.com에 오신 것을 환영합니다.";
  echo $message;
?>
</body>
</html>

[sbsuser@ns1 ~]$ exit

4. 가상호스트 설정
가상호스트: 하나의 서버에 여러 개의 도메인을 운영하는 기술이다.
/etc/httpd/conf/httpd.conf: 웹 서버 main 설정파일

복사 > G > :set noai > :set paste > o > 붙여넣기
[root@ns1 ~]# vi /etc/httpd/conf/httpd.conf
:
:(생략)
#server.com

<VirtualHost *:80>
    DocumentRoot  "/home/serveruser/public_html"
    ServerName    "server.com"
    ServerAlias   "www.server.com"
</VirtualHost>

#kh.com

<VirtualHost *:80>
    DocumentRoot  "/home/khuser/public_html"
    ServerName    "kh.com"
    ServerAlias   "www.kh.com"
</VirtualHost>

#sbs.com

<VirtualHost *:80>
    DocumentRoot  "/home/sbsuser/public_html"
    ServerName    "sbs.com"
    ServerAlias   "www.sbs.com"
</VirtualHost>

5. 서버 재시작
SELinux 권한을 설정한다.
[root@ns1 ~]# chcon -R -t httpd_sys_content_t /home/{server,kh,sbs}user/public_html
[root@ns1 ~]# httpd -t
Syntax OK
[root@ns1 ~]# httpd -S
[root@ns1 ~]# systemctl restart httpd

6. 웹 서버 접속
[root@ns2 ~]# lynx --dump server.com
server.com에 오신 것을 환영합니다.

[root@ns2 ~]# lynx --dump kh.com
kh.com에 오신 것을 환영합니다.

[root@ns2 ~]# lynx --dump sbs.com
sbs.com에 오신 것을 환영합니다.

profile
정보보안 전문가

0개의 댓글