리눅스

 

이 글에서는 CentOS 7.0 또는 그 이상 버전에서 사용가능한 설정 방법을 설명하도록 하겠습니다.

 

참고로 운영체제 이미지는 다음의 위치에서 다운로드 가능합니다.

https://www.centos.org/download/

scr1108-3

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

스크린샷 2015-08-03 오전 12.50.52

대략 다 더하면 50GB의 여유공간이 있다.

 

 

 

4) 메모리 체크

#free -m

스크린샷 2015-08-03 오전 12.51.41

전체 3832MB의 메모리중 현재 3669MB 가 사용가능하다.

 

 

 

4-1) CPU 코어수 확인

cpu정보 프로세스를 읽어서 processor 항목이 몇개인지 갯수를 셉니다.

#cat /proc/cpuinfo | grep processor | wc -l

스크린샷 2015-04-08 오전 12.42.54

위의 사진은 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

tzselect

 

 

7) Hostname 설정

이 서버에 이름을 정하는 것이다. 이름을 잘 정해 두어야 나중에 다중 서버작업을 할 때 헷갈리지 않는다.

v3

위의 뜻은 “li599-115 서버에 root 사용자” 라는 뜻이다.

글 쓰는 지금 단어를 빨리 생각해보았는데  newhistory 라는 것이 떠오르더라.

이제 이 서버는 newhistory 라는 이름으로 만들 것입니다.

#vi /etc/hostname

빈 파일일 건데(또는 기존 hostname이 쓰여있을것임.) 원하는 이름으로 바꾼다. newhistory

권장하는 단어는 이 서버에 연결될 대표 도메인이다. 예를 들어 lael.be 같은 것.

 

적용한다.

#hostname -F /etc/hostname

 

서버에 재 접속하면 적용된 것을 확인 할 수 있을 것이다.

v4

 

 

 

 

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

스크린샷 2015-08-04 오전 12.11.47

 

웹서버 실행

#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 값을 찾아서 주석을 제거하고 시간을 설정해주세요.

q17

이 값을 찾아서

 

q18

이렇게 변경.

 

#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 입력하고 엔터 입력해도 된다.

스크린샷 2015-08-04 오전 12.25.30

 

 

 

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

 

스크린샷 2015-08-04 오전 12.28.11

 
변경사항 적용

#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

추가

스크린샷 2015-08-04 오전 12.34.19

 

extra 폴더 생성 및 그 하위에 httpd-vhosts.conf 파일 생성

스크린샷 2015-08-04 오전 12.35.02

 

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

스크린샷 2015-08-04 오전 12.52.31

 

 

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/

 

k25

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 로그인이 된다면 정상적으로 서비스 할 수 있는 상태입니다.

스크린샷 2015-08-04 오전 1.00.03

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

수입의 다소를 계산한 후에 지출을 한다. 이것이 건전 재정의 근본이다. -예기

댓글 ( 7)

댓글 남기기

작성
  •    
  •    
  •