실습> 아래 조건에 맞게 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 이 열려있지 않았다면 패킷을 받아들일 수 있게 설정한다.

실습> 웹페이지 접속 과정 살펴보기
-- 순서 --
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
[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에 오신 것을 환영합니다.