728x90

CentOS 7 에서 PHP7.4 와 MariaDB를 설치하는 스크립트이다.

Apache httpd.conf 파일은 보안 설정과 php.ini 파일 보안설정이 고려되어 있다.

이런 스크립트 구하기는 쉽지 않을 것이다. Secure Coding 환경설정까지 고려된 스크립트라고 보면 된다.

 

 
##########################################################################
## CentOS 7 Package Update
# CentOS 7 업데이트
yum -y update
 
##########################################################################
# CentOS 7 방화벽 설정
yum -y install firewalld
 
# 방화벽 데몬 시작
systemctl start firewalld
 
# 서버 부팅 시 firewalld 데몬 자동 시작 설정
systemctl enable firewalld
 
firewall-cmd --permanent --add-service=http 
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=mysql
firewall-cmd --permanent --zone=public --add-port=3306/tcp
 
firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
firewall-cmd --list-all
 
#########################################################################
# Databse 접근을 위한 SELinux 설정 변경
# SELinux 상태 확인
sestatus
 
#SELinux httpd flag 확인 : 네트워크를 통해 Database에 연결할 수 있는 옵션이 꺼져 있음
getsebool -| grep httpd
 
# Database 접근을 위한 SELinx 설정 변경
setsebool -P httpd_can_network_connect_db 1
 
# SELinux 비활성화 하기
vi /etc/sysconfig/selinux
SELINUX=disabled
:wq 로 저장하고 나온다.
 
# 재부팅해야 SELinux 명령어 수정한 사항이 적용된다.
reboot 
 
# 임시 비활성화 방법
setenforce 0
 
################################
##### MariaDB 10.5 버전 설치 #####
################################
# MariaDB를 잘못 설치한 경우에는 기존 MariaDB에서 사용된 파일 삭제 필요
rm --/var/lib/mysql
 
rpm -qa | grep MariaDB
 
# 10.3 버전, 10.4버전도 동일한 형태이다.
cd /root
vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
 
:wq 로 저장하고 나온다.
 
sudo yum makecache fast
yum -y install mariadb-server mariadb-client
 
# mariadb 부팅 시 자동 시작 설정
systemctl enable mariadb
 
# mariadb 시작
systemctl start mariadb
 
# mariadb 상태 확인
service mariadb status
 
# Maria DB 보안 설정하기
# 거의 Y만 누르면 끝난다.
mariadb-secure-installation
 
mysql_secure_installation
# 알아낸 임시패스워드 입력하고 영문 소문자, 대문자, 숫자, 특수문자를 포함한 패스워드로 변경
 
# root 비밀번호 설정
 
# UTF-8 로 통신하기 위한 서버/클라이언트 설정
vi /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake
 
#:wq (저장)하고 빠져나온다.
# DB서버와 접속을 할 때 클아이언트는 자신이 사용할 문자셋 설정하며, 그 설정을 사용하도록 되어있지만 
# skip-character-set-client-handshake 옵션을 사용할 경우 
# 클라이언트에서 설정한 문자셋을 무시하고 character_set_server값으로 설정된다.
 
vi /etc/my.cnf.d/mysql-clients.cnf
[mysql]
default-character-set=utf8mb4
[mysqldump]
default-character-set=utf8mb4
 
#:wq (저장)하고 빠져나온다.
 
# MariaDB 재시작
service mariadb restart
 
 
# yum으로 설치한 패키지 경로 알아내기
rpm -ql MariaDB-server.x86_64 | grep cnf
 
# mariadb 버전 확인
mariadb --version
 
# MariaDB 접속하여 적용된 사항 확인
mysql -u root -p
status
show variables like 'c%';
 
# DB 서버의 기본 문자셋으로서 설정 파일에 명시한 대로 utf8mb4 로 설정되어 있다.
 
 
#########################################
####### 실제 적용 예제 ######
#########################################
# https://link2me.tistory.com/431 참조하면 도움된다.
mysql -u root -p
-- DB 생성
drop database phpdb;
create database phpdb default character set utf8mb4 COLLATE = utf8mb4_unicode_ci;
 
-- 사용자 권한 부여
use mysql;
create user codefox@localhost identified by 'Wofullnder!#%';
grant all privileges on phpdb.* to codefox@localhost;
flush privileges;
 
-- 비밀번호 변경 및 권한 부여
grant all privileges on phpdb.* to codefox@localhost identified by 'Wofullnder!#%';
flush privileges;
quit
 
#############################################
# PHP 7.4 와 Apache 설치 
#############################################
## 현재 설치된 PHP 버전 확인
yum list php
 
yum -y install expat-devel
 
# 설치 확인 방법1
yum list installed | grep httpd
yum list installed | grep php
 
# 설치 확인 방법2
rpm -qa | grep httpd
rpm -qa | grep php
 
## httpd 설치된 것 한꺼번에 지우기 ==> 설치된 것이 없으면 생략
# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
rpm -qa | grep httpd >list
sudo yum -y remove $(awk '{print $1}' <list)
 
# PHP 설치된 것 한꺼번에 지우기 ==> 설치된 것이 없으면 생략
# vi list로 해서 삭제 안할 리스트는 선별 제거한다.
rpm -qa | grep php >list
sudo yum -y remove $(awk '{print $1}' <list)
 
 
# Remi 저장소를 설치하고 활성화한다.
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
 
# yum 저장소와 패키지를 관리
yum -y groupinstall "Development tools"
yum -y install epel-release yum-utils
 
# Disable repo for PHP 5.4 ==> yum 기본 설치된 PHP 5.4 버전 대신에 PHP 7.4 버전 설치
yum-config-manager --disable remi-php54
yum-config-manager --enable remi-php74
 
# Install PHP 7.4 on CentOS 7
yum install ---enablerepo=remi-php74 httpd httpd-devel
yum install ---enablerepo=remi-php74 php php-cli php-common php-devel php-ldap 
yum install ---enablerepo=remi-php74 mod_ssl php-mbstring php-mcrypt php-mysqlnd php-pdo 
yum install ---enablerepo=remi-php74 php-pgsql php-sqlite php-process php-snmp php-soap 
yum install ---enablerepo=remi-php74 php-libxml php-xml php-pear php-gd php-fpm php-dom 
yum install ---enablerepo=remi-php74 php-ssh2 php-xmlreader php-curl php-date php-exif 
yum install ---enablerepo=remi-php74 php-filter php-simplexml php-hash php-iconv php-imagick 
yum install ---enablerepo=remi-php74 php-json php-openssl php-pcre php-posix php-sockets 
yum install ---enablerepo=remi-php74 php-spl php-tokenizer php-zlib php-gmp php-Icinga php-intl 
yum install ---enablerepo=remi-php74 php-pecl-zip zip php-zip php-pspell 
yum install ---enablerepo=remi-php74 wget unzip mc git nmap telnet net-tools
 
# PHP 버전 확인
php -v
 
# Apache 버전 확인
httpd -v
 
# 서비스 활성화(재부팅시 auto start)
systemctl enable httpd
 
# 서비스 시작
systemctl start httpd
 
# 서비스 구동 상태 확인
systemctl status httpd
 
# 서비스 중지
systemctl stop httpd
# 서비스 재시작
systemctl restart httpd
 
# openssl 버전 확인
openssl version
 
###################################################
# Apache 환경 설정 
###################################################
# Web root 디렉토리 : /var/www/html 기본 설정인데 아래는 home 디렉토리 하단으로 수정했다.
# 보안 설정 부분이 같이 포함되어 있으니 아래와 같이 설정하면 도움된다.
# 더 자세한 사항은 구글링해서 찾아보시라.
## httpd.conf 파일 수정
vi /etc/httpd/conf/httpd.conf
ServerName localhost
 
DocumentRoot "/var/www/htdocs"
 
<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>
 
<Directory "/var/www/htdocs">
    Options +FollowSymLinks -Indexes
    AllowOverride All
    Require all granted
    <LimitExcept GET POST>
      Order deny,allow
      Deny from all
    </LimitExcept>
</Directory>
 
<IfModule dir_module>
    DirectoryIndex index.php index.html 
</IfModule>
 
<IfModule mime_module>
    TypesConfig /etc/mime.types
    #AddType application/x-gzip .tgz
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php .html .do
    AddType application/x-httpd-php-source .phps
    AddType text/css .css
    AddType text/javascript .js
    #AddHandler cgi-script .cgi
    #AddHandler type-map var
    #AddOutputFilter INCLUDES .shtml
</IfModule>
 
ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 402 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 405 /error.php
ErrorDocument 408 /error.php
ErrorDocument 500 /error.php
ErrorDocument 501 /error.php
ErrorDocument 502 /error.php
ErrorDocument 503 /error.php
 
# 반드시 서버 정보 노출 방지 추가해야 함.
ServerTokens Prod
ServerSignature Off 
 
TraceEnable Off
 
# Apache HTTPOXY 취약점 방지
RequestHeader unset Proxy early
 
# 저장(:wq)하고 나온다.
 
##################################
# PHP.ini 환경 설정 수정사항
##################################
 
vi /etc/php.ini
short_open_tag = On
cgi.fix_pathinfo=0
 
;PHP 버전 정보 노출 방지(Hide PHP Version Number)
expose_php = Off
 
date.timezone ="Asia/Seoul"
 
;PHP에서 세션은 일단 생성 된 뒤에, 가비지 콜렉터 관리로직에 의해 소멸된다.
session.gc_probability = 1
;session.gc_divisor = 1000 으로 되어 있는 것을 1로 변경한다.
session.gc_divisor = 1
;이값이 100이면 1/100 즉 1%의 확률로 가비지콜렉션이 실행된다.
;1이면 정확하게 유효기간이 넘은 데이타가 삭제된다.
; 세션 시간은 1시간으로 설정한다.
session.gc_maxlifetime = 3600
 
post_max_size = 20M  ;// 8M 으로 되어 있었음.
upload_max_filesize = 18M ;// 기본 2M 으로 되어 있었음
 
 
# 저장(:wq)하고 나온다.
 
#####################################################################
# Web 서버 root 디렉토리 생성
mkdir -/var/www/htdocs
 
# 반드시 추가구현해야 문제없이 동작한다. error.php 파일 내용은 오픈하지 않는다.
# error.php 대신에 index.php 로 설정해도 무방하다.
# 해커가 없는 파일을 검색으로 찾을 때 비정상적으로 검색한다는 걸 알려주는 error.php 파일인데,
# 비정상적인 파일 검색 실행시 무조건 index.php 로 가도록 설정해도 되기 때문이다.
 
# Web 서버 root 디렉토리로 이동
cd /var/www/htdocs/
vi .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ error.php?/$1 [QSA,PT,L]
</IfModule>
 
#:wq(저장)하고 빠져나온다.
 
## 보안설정
sudo chmod 640 /etc/httpd/conf/httpd.conf
sudo chown root:root /etc/httpd/conf/httpd.conf
sudo chmod 640 /etc/php.ini
sudo chown root:root /etc/php.ini
 
sudo chown -R apache:apache /var/www/htdocs
sudo chmod -755 /var/www/htdocs
 
# 방화벽 설정 확인
iptables -L
 
# Apache 재시작
systemctl restart httpd
 
# 만약 Web 서버가 동작하지 않는다면 에러 로그를 살펴봐야 한다.
cd /var/log/httpd/
 
 
# 열린포트 확인
yum -y install net-tools 
netstat -nltp
 
### 시간 동기화
yum -y install rdate
 
crontab -e
00 00  * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w
 
 
#####################################
# 최신버전 phpMyAdmin 설치
#####################################
# Web 서버 root 디렉토리로 이동
cd /var/www/htdocs
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.zip
unzip phpMyAdmin-5.1.3-all-languages.zip
chown -R apache:apache phpMyAdmin-5.1.3-all-languages
mv phpMyAdmin-5.1.3-all-languages pmaaa
cd pmaaa
cp -rp config.sample.inc.php  config.inc.php
 
# 환경 설정
vi config.inc.php
 
$cfg['blowfish_secret'= 'qtdRoGmbcr]0s)r$9b_JUnoqtdRoGmbcr]0s)r$9b_JUnoGmbcrGmbcr]0s)r$9b{~Xz'// 임의의 값 설정
$cfg['Servers'][$i]['host'= 'localhost';
$cfg['Servers'][$i]['compress'= true;
$cfg['TempDir'= '/tmp';
 
# 저장(:wq)하고 빠져나온다.
 
# 주의사항
# phpMyAdmin 기능이 편리한 만큼 특정한 IP에서만 접속하도록 IPFiltering을 설정하는 걸 추가해줘야 안전하다.
# 설정 방법은 블로그 게시글을 찾아서 적용하기 바란다.
 
###############################
# composor 설치 
###############################
cd /var/www/htdocs
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer -V
# yes 입력
export COMPOSER_ALLOW_SUPERUSER=1
echo "export COMPOSER_ALLOW_SUPERUSER=1" >> ~/.bashrc
cat ~/.bashrc | grep export
 
# PHPSpredSheet 설치
cd /var/www/htdocs
composer require phpoffice/phpspreadsheet
 
# PHP Excel 예제는 본 블로그에 게시되어 있다.
 
###############################
# RSA 암호화 통신을 위한 설정
###############################
#리눅스 SSH 에서 RSA 공개키, 개인키 생성방법
mkdir -/home/rsa/key/
cd /home/rsa/key/
 
# Private Key 생성
openssl genrsa -out rsa_pri.pem 1024
 
# Public Key 생성
openssl rsa -pubout -in rsa_pri.pem -out rsa_pub.pem
 
##########################################################################
 
cd /var/www/htdocs/
vi info.php
<?php
phpinfo();
?>
 
#:wq(저장)하고 빠져나온다.
 
# Web 브라우저에서 동작여부 확인한다.
http://192.168.1.20/info.php
 
 
##########################################################################
# 패스워드 변경 (필요시)
mysql -uroot -p
update user set password=password('변경할비밀번호') where user='root';
flush privileges;
quit;
 
### 테이블 백업하기 ####
# 최초 단계에서는 실행하지 않는다.
mysqldump -uroot ---databases phpdb > phpdb.sql
mysqldump -uroot ---databases phpdb > phpdb.sql
 
### 테이블 구조만 백업하기 ####
# 최초 단계에서는 실행하지 않는다.
mysqldump -uroot ---no-data --databases phpdb > phpdb.sql
 
# 서버 접속 권한이 있어야 가능
# 개발용 노트북/맥북이 구로 사무실에서는 접속 가능
# 원격 서버에서 로컬 서버(현재 접속된 서버)로 파일 가져오기. 
scp root@192.168.1.20:/root/phpdb.sql ./
 
# DB 테이블 Upload. SQL 파일이 존재하는 경로에서 실행한다.
mysql -uroot -p
use phpdb;
source phpdb.sql; -- DB load
 
show tables;
drop table customer_bk;
 
-- 테이블 구조 확인
desc customer;
desc deviceM;
 
-- 테이블 칼럼 길이는 가능하면 너무 크지 않게 설정한다.
 
-- 데이터베이스 문자셋 변경
ALTER DATABASE {database} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER DATABASE phpdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
 
-- 기존 테이블 문자셋 변경
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
 
##########################################################################
 

 

 

'리눅스' 카테고리의 다른 글

CentOS 7 날짜 반복 증가 스크립트  (0) 2024.03.31
CentOS 5.8 APM 설치 과정  (0) 2022.05.14
VMWare Network 설정  (0) 2022.04.23
CentOS 7 Jenkins 설치  (0) 2022.03.25
Apache log Full  (0) 2022.02.22
블로그 이미지

Link2Me

,