이 글에서는 CentOS 7.0 또는 그 이상 버전에서 사용가능한 설정 방법을 설명하도록 하겠습니다.
참고로 운영체제 이미지는 다음의 위치에서 다운로드 가능합니다.
https://www.centos.org/download/
Everything ISO : 운영체제 파일 + 패키지 파일 이 모두 담겨있음. 인터넷이 안되는 환경에서 사용할 수 있음.
Minimal ISO : 운영체제 파일. 패키지는 인터넷 연결을 통해 설치해야 함. 일반적으로 이 이미지를 CD 장치 또는 DVD 에 기록 후 사용합니다.
1) 리눅스 버전체크
#uname -a Linux lael-centos 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
2) CentOS 버전체크
#cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
3) 하드용량체크
#df -h
대략 다 더하면 50GB의 여유공간이 있다.
4) 메모리 체크
#free -m
전체 3832MB의 메모리중 현재 3669MB 가 사용가능하다.
4-1) CPU 코어수 확인
cpu정보 프로세스를 읽어서 processor 항목이 몇개인지 갯수를 셉니다.
#cat /proc/cpuinfo | grep processor | wc -l
위의 사진은 6 core 를 뜻합니다.
한번 정도는 다음의 명령어를 확인해 보세요.
#cat /proc/cpuinfo | grep processor
#cat /proc/cpuinfo
5) 자잘한 업글
yum란 Yellow dog Updater, Modified 을 뜻합니다. (노란강아지 업데이터 수정버전. 별뜻 없으며 작명이 이렇게 되었을 뿐.)
우리는 yum 라는 센트오에스에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.
패키지 목록 갱신 및 업데이트 체크.
#yum update
6) 시스템 시간 설정
이것을 하지 않으면 EST 시간을 불러올 것이다.
#ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
7) Hostname 설정
이 서버에 이름을 정하는 것이다. 이름을 잘 정해 두어야 나중에 다중 서버작업을 할 때 헷갈리지 않는다.
위의 뜻은 “li599-115 서버에 root 사용자” 라는 뜻이다.
글 쓰는 지금 단어를 빨리 생각해보았는데 newhistory 라는 것이 떠오르더라.
이제 이 서버는 newhistory 라는 이름으로 만들 것입니다.
#vi /etc/hostname
빈 파일일 건데(또는 기존 hostname이 쓰여있을것임.) 원하는 이름으로 바꾼다. newhistory
권장하는 단어는 이 서버에 연결될 대표 도메인이다. 예를 들어 lael.be 같은 것.
적용한다.
#hostname -F /etc/hostname
서버에 재 접속하면 적용된 것을 확인 할 수 있을 것이다.
8)방화벽 포트에서 http 80 허용하기
당신의 서버에 방화벽이 이미 설치되어 있을 수도 있고, 설치되어 있지 않을 경우도 있다.
클라우드 사업자에 따라서 기본 패키지로 설치하는 경우가 많으니 이 글에서는 방화벽 설정까지 서술하도록 하겠다.
#yum install firewalld
설치되지 않았다면 설치 안내 메시지가 출력되고, 설치되어 있다면 이미 최신버전이 설치되어 있다는 메시지가 출력된다.
CentOS 7 에는 방화벽 기본값이 모두 차단으로 되어 있고 허용할 포트를 따로 등록해 주어야 한다.
root 로그인 상태에서
#firewall-cmd --zone=public --add-port=80/tcp --permanent
방화벽 설정 새로고침
#firewall-cmd --reload
포트와 프로세스 확인
편집
yum install nmap
nmap
명령어
nmap localhost
실행예시
[root@openwiki ~]# nmap localhost Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-10-04 22:07 KST Interesting ports on localhost.localdomain (127.0.0.1): Not shown: 1675 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 80/tcp open http 443/tcp open https 3306/tcp open mysql Nmap finished: 1 IP address (1 host up) scanned in 0.110 seconds
명령어
netstat -anp | grep "LISTEN "
p 옵션을 더 붙이면 프로세스 정보도 볼 수 있다.
편집
실행예시
[root@openwiki ~]# netstat -anp | grep "LISTEN " tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5178/mysqld tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2649/vsftpd tcp 0 0 :::80 :::* LISTEN 11646/httpd tcp 0 0 :::22 :::* LISTEN 8154/sshd
→ 포트를 LISTEN 중인 프로세스까지 확인할 수 있다.
→ 3306 포트를 LISTEN 중인 프로세스는 mysqld이며 프로세스ID는 5178이다.
9) Apache2 설치
#yum install httpd
CentOS 7.1 에서는 Apache 2.4.6 이 설치된다.
버전체크
#httpd -v
웹서버 실행
#service httpd start
확인해본다.
http://256.123.213.213 (서버의아이피)
웹브라우져에 기본 설명페이지가 뜨면 성공.
기본 파일을 대체한다.
#touch /var/www/html/index.html
10) PHP 5.x 설치
#yum install php
자동으로 아파치 중단시키고 설정파일에 php를 등록시키고 재 구동시킨다.(바로 적용됨)
CentOS 7.1 에서는 php 5.4.16 이 설치된다.
기타 주로 사용되는 모듈을 설치한다.
- 이미지처리 모듈
#yum install php-gd
- 다국어 처리 모듈
#yum install php-mbstring
-추가로 설치하고 싶은 모듈이 있으면
#yum search php-
라고 입력해서 설치가능한 패키지를 검색후 install 하도록 하자.
10 -2) . PHP Default timezone 설정하기
이 값을 설정하지 않으면 시스템 timezone 을 사용합니다.
PHP Default timezone 을 설정하는 것은 필수는 아니지만 매우 권장하는 작업입니다. 설정해주세요.
동일한 작업을 2개의 파일에 적용해 주어야 합니다.
이건 Apache2 - PHP 일때 참조하는 설정파일입니다.
#/etc/php.ini
date.timezone 값을 찾아서 주석을 제거하고 시간을 설정해주세요.
이 값을 찾아서
이렇게 변경.
#service httpd reload
vi 명령어
1. 먼저 vi 를 실행하고 : 를 눌러 명령어 모드에 들어갑니다.
2. / date.timezone 으로 문자열 탐색
현재 커서 위치에서 아래방향으로 탐색
/찾을문자열
예) :/text
현재 커서 위치에서 윗방향으로 탐색(역방향 탐색)
?찾을문자열
예) :?text
3. 그 다음 문자열를 탐색(계속 탐색)을 하려면 소문자 "n" 을 누르면 되고
이전 문자열를 탐색(계속 탐색 - 역방향)을 하려면 대문자 "N"을 누르면 됩니다.
4. 정규식도 사용할 수 있다!
예) Text 로 시작하는 문자열을 찾을때
/^Text
vi 사용이 힘들면 압타나 또는 이클립스 서버 연동으로 로 간편하게 고칠수 있다.
http://192.168.78.130/index.php 주소를 통해 확인해보자.
192.168.78.130 주소는 현재 자신의 컴퓨터주소로 ifconfig 를 치면
나온다.
파일을 만들고 웹브라우져에서 실행시킨 뒤 위와 같이 설정되어 있으면 정상이다.
/index.php 에는 다음 의 내용이 적혀 있다.
Default timezone 이 설정되어 있으면 정상.
11) Mysql 설치
#yum install mariadb
#yum install mariadb-server
MariaDB 5.5.41 버전이 설치된다.
MariaDB 시작
#service mariadb start
MariaDB 기본 환경설정
#/usr/bin/mysql_secure_installation
대문자로 쓰여져 있는 것이 기본값이다. root 비밀번호만 설정하고 나머지는 엔터(기본값 설정)를 입력하자.
Y 입력하고 엔터 입력해도 된다.
php와 mysql 의 연동모듈 설치.
#yum install php-mysql
11 - 2) 기본 언어셋 설정(중요)
이 단계를 건너뛰면 DB가 latin1 으로 생성되며 추후 DB작업에 문제가 생길 수 있다.
#vi /etc/my.cnf
[mysqld] 항목에 다음 2 줄을 추가한다.
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
변경사항 적용
#service mariadb restart
12) 계정생성 및 동작테스트
laelbe 사용자 계정 생성
#adduser laelbe
비밀번호 설정
#passwd laelbe
보통 웹루트는 홈디렉토리에 하지 않습니다.
저는 주로 www 디렉토리를 사용합니다.사용자변경 후 www 디렉토리를 생성하고 빠져나오기
#su -l laelbe
#mkdir www
#exit
13) 웹사이트 Apache 환경설정 파일 작성
다음의 내용을 작성한다.
#vi /etc/httpd/conf/httpd.conf
파일 맨 밑줄에 다음의 Include 구문 추가. VirtualHost 설정 파일을 따로 분리합니다.
# Virtual hosts Include conf/extra/httpd-vhosts.conf
추가
extra 폴더 생성 및 그 하위에 httpd-vhosts.conf 파일 생성
httpd-vhosts.conf
<VirtualHost *:80> DocumentRoot "/home/laelbe/www" ServerName laelbe.com ServerAlias www.laelbe.com <Directory /home/laelbe/www/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all require all granted </Directory> </VirtualHost>
호스트를 추가할 경우 위의 httpd-vhosts.conf 파일 하단에 추가하시면 됩니다.
<VirtualHost *:80> DocumentRoot "/home/laelbe/www" ServerName laelbe.com ServerAlias www.laelbe.com <Directory /home/laelbe/www/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all require all granted </Directory> </VirtualHost> <VirtualHost *:80> DocumentRoot "/home/test1/www" ServerName test1.laelbe.com <Directory /home/test1/www/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all require all granted </Directory> </VirtualHost>
아파치 설정파일 구문 및 동작검사
오타나 잘못된 설정구문이 있는지 미리 확인해 본다.
설정파일을 변경했으면 반드시 이 명령어를 통해 문법을 검사하도록 하자.
#service httpd configtest
아파치 새로고침 (새로운 virtualhost 추가나 삭제시에)
기존 연결된 사용자는 그대로 두고 새로운 접속자부터 새로운 설정이 적용되게 한다.
서비스가 운영중인 상황에서는 되도록 restart 대신 reload 를 사용하도록 하자.
#service httpd reload
- reload 를 할지 restart 를 할지는 엔지니어의 판단에 맡긴다. 몇가지 크리티컬한 상황은 다음과 같다.
1. 대용량 파일의 다운로드 중 restart 되면 -> 다운로드가 중단됨. 파일이 깨짐.
2. 글쓰기, 내용 작성 후 쓰기 버튼 클릭 / 글 첨부파일 업로드 중 restart 되면 -> 작성된 내용이 날아가게 됨.
3. 동작이 긴 PHP 파일 실행중 restart 되면 -> 중간 상태에서 끊어짐.
중단 없이 restart 하는 방법도 있는데, 난이도가 많이 올라가므로 따로 다루지는 않는다.
아파치 재시작 (새로운 확장모듈의 추가, 포트변경 등)
모든 연결을 강제 종료하고 서비스를 stop 한 후에 다시 start 하는 동작이다. restart = stop & start
주의 : 위의 configtest 에서 실패한 상태에서 restart를 하면 httpd 가 stop 된 후에 start 되지 않는다. 즉 서비스 중단 상태가 된다.
#service httpd restart
권한 설정 (/home/ 바로 하위레벨의 폴더의 권한을 701로 설정)
#chmod 701 /home/*
부팅시 자동실행
#chkconfig httpd on
#chkconfig mariadb on
확인하기
#systemctl list-unit-files | grep httpd
#systemctl list-unit-files | grep mariadb
14) 리눅스 보안강화 모듈 해제하기
CentOS는 SELinux 라고 보안강화 모듈이 기본으로 설치 및 활성화 되어 있다.
이것이 당신의 웹 소프트웨어 업로드 및 파일 쓰기 기능을 막을 것이다.
쓸말은 많은데 그냥 끄도록 하자. 방화벽만 잘 설정하고 유지보수가 잘되는 좋은 웹소프트웨어를 사용한다면 보안에 큰 무리는 없을 것이다.
# setenforce 0
# vi /etc/sysconfig/selinux
파일 중간의 SELINUX=enforcing 을 SELINUX=disabled 로 변경 후 저장
15) phpmyadmin 설치
Apache 와 PHP 와 MySQL 을 모두 사용하는 phpmyadmin 을 다운받아서 설치하신 후 로그인하면 됩니다.
phpmyadmin 은 전세계적으로 가장많이 쓰이는 데이터베이스 관리 오픈소스 프로그램이며
https://www.phpmyadmin.net/ 에서 다운받을 수 있습니다. 압축풀고 서버에 업로드 한 후 접속해보시면 됩니다.
apache 와 php, 그리고 mariadb 를 모두 사용하는 프로그램을 실행시켜보자.
phpmyadmin 공식사이트 : https://www.phpmyadmin.net/
설치 못하시는 분이 꽤 있으셔서 따로 설치법을 적습니다.
여러 설치방법이 있겠지만 저는 다음과 같이 설치합니다.
압축해제 프로그램 설치
# apt-get install unzip
압축파일 다운로드
# cd /home/macaronics/www/
https://www.phpmyadmin.net/ 사이트로 이동 후 위의 그림과 같이 입력하여 최신버전을 설치할 수 있도록 하자.
이 글에서는 글 작성 시각 현재 최신버전인 4.5.2 를 설치할 것이다. phpmyadmin 은 매우 견고하게 만들어진 프로그램으로써 4.5.2를 설치해도 보안취약점이 있지는 않겠지만 최신버전을 설치하는 습관을 기르도록 하자. (혹시나 말하지만, Alpha나 Beta 같은 개발자-최신버전을 설치하라는 뜻이 아니라 널리 사용되어 검증된 Release Channel 최신버전 를 사용하라는 것이다.)
# wget https://files.phpmyadmin.net/phpMyAdmin/4.5.2/phpMyAdmin-4.5.2-all-languages.zip
압축해제
# unzip phpMyAdmin-4.5.2-all-languages.zip
폴더 이름변경
# mv phpMyAdmin-4.5.2-all-languages dbmyadmin
다운받은파일 삭제
# rm phpMyAdmin-4.5.2-all-languages.zip
http://192.168.78.131/dbmyadmin/
에러 화면
PHP 5.5+ is required
phpmyadmin 상위버전 설치시 "PHP 5.5+ is required" 에러 대처 방법
아래의 파일을 다음과 같이 수정해 준다.
45번 ~ 46번째 줄 #] /libraries/common.inc.php
<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Misc stuff and REQUIRED by ALL the scripts. * MUST be included by every script * * Among other things, it contains the advanced authentication work. * * Order of sections for common.inc.php: * * the authentication libraries must be before the connection to db * * ... so the required order is: * * LABEL_variables_init * - initialize some variables always needed * LABEL_parsing_config_file * - parsing of the configuration file * LABEL_loading_language_file * - loading language file * LABEL_setup_servers * - check and setup configured servers * LABEL_theme_setup * - setting up themes * * - load of MySQL extension (if necessary) * - loading of an authentication library * - db connection * - authentication work * * @package PhpMyAdmin */ /** * block attempts to directly run this script */ if (getcwd() == dirname(__FILE__)) { die('Attack stopped'); } /** * Minimum PHP version; can't call PMA_fatalError() which uses a * PHP 5 function, so cannot easily localize this message. */ =================== if (version_compare(PHP_VERSION, '5.5.0', 'lt')) { die('PHP 5.5+ is required'); } ===================================== 를 다음과 같이 수정한다. if (version_compare(PHP_VERSION, '5.3.0', 'lt')) { die('PHP 5.3+ is required'); } /** * for verification in all procedural scripts under libraries */ define('PHPMYADMIN', true); /** * String handling (security) */ require_once './libraries/String.class.php'; $PMA_String = new PMA_String();
[TIP] 간혹 방금 설치한 디비의 root 비밀번호가 기억이 안나는 분들도 있을 것이다. 이 경우에는 다음의 명령어를 사용하여 mariadb 를 재설치 하도록 하자.
- 제거1. yum으로 패키지를 조회 해 보자.
# yum list mariadb
# yum remove mariadb.*
mysql 에 대하여 실행 해 보자.
[root@mcaronics ~]# mysql
-bash: /bin/mysql: 그런 파일이나 디렉터리가 없습니다
이제 삭제가 완료 되었다.
또는 비밀번호를 재 설정 해보자.
mysql> use mysql;
Database changed
mysql> UPDATE user SET password=PASSWORD('변경할패스워드') where user='root'; Query OK, 0 rows affected (0.14 sec) Rows matched: 1 Changed: 0 Warnings: 0
mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.11 sec)
mysql> quit
phpmyadmin 로그인이 된다면 정상적으로 서비스 할 수 있는 상태입니다.
댓글 ( 7)
댓글 남기기