[CentOS 7] step5. 서비스 설정 2014-09-02

1. Database

> MySQL 또는 MariaDB, MongoDB 기반 서비스를 설정한다.

>>> MySQL or MariaDB
## root 암호 등록
mysqladmin -u root password "[PASSWORD]"
## 개발 디비 생성
mysql -u root -p [PASSWORD]
create database {생성할 디비명} collate 'utf8_general_ci';
## 개발 디비 사용자 생성
create user '[ID]'@'localhost' identified by '[PASSWORD]';
grant all privileges on {생성할 디비명}.* to '[ID]'@'localhost';
flush privileges;
## 개발 디비 외부접근 사용자 생성
create user '[ID]'@'{접속할IP}' identified by '[PASSWORD]';
grant all privileges on {생성할 디비명}.* to '[ID]'@'{접속할IP}';
flush privileges;
>>>>>> description
– 개발에 사용할 디비 생성시 꼭 사용자를 따로 생성하여 권한을 부여
>>> MongoDB
## 관리자 계정 생성
mongo
use {사용할디비명}
db.createUser( { "user" : "[ID]","pwd": "[PASSWORD]", roles: [ "readWrite", "dbAdmin" ]})
show users
exit
## 인증 후 디비접속이 가능하도록 설정
vi /etc/mongod.conf
service mongod restart
## 개발 디비 생성
use {생성할 디비명}
## 개발 디비 사용자 생성
db.createUser( { "user" : "[ID]","pwd": "[PASSWORD]", roles: [ "readWrite" ]})
## 사용자 로그인
db.auth({"user" : "[ID]","pwd": "[PASSWORD]"});
## 사용자 비번 변경
db.changeUserPassword("[ID]", "[PASSWORD]")
## /etc/mongod.conf
auth=true
httpinterface=true
>>>>>> description
– 기본설치시 로그인 과정없이 디비에 접속됨
– 개발에 사용할 디비 생성시 꼭 사용자를 따로 생성하여 권한을 부여

2. Cache

> Redis, Memcached 기반 서비스를 설정한다.

>>> REDIS
vi /etc/redis.conf
## REDIS를 데몬으로 실행
daemonize yes
## REDIS를 PASSWORD인증 후 실행
requirepass {PASSWORD}
>>>>>> description
– REDIS는 지속성이 보장됨.(database로 활용이 가능)
– RDB, AOF의 두가지 형태의 데이터베이스로 활용 가능
– 데이터베이스로 활용시 REPLICATION 구성이 가능
>>> MEMCACHED
vi /etc/sysconfig/memcached
OPTIONS="-l {접속허용IP}"
>>>>>> description
– 인증기능 및 지속성을 제공하지 않음
– IP로 접속을 제한할 수 있음

3. World Wide Web

> JSP(Java server page) 또는 PHP(Personal Hypertext Preprocessor) 기반으로 웹서비스를 설정한다.

>>> JSP : Apache + Tomcat
## 연동설정 : mod_jk 설치
#### -- connector 다운로드
cd /usr/local/src
wget http://server.opendocs.co.kr/tomcat-connectors-1.2.40-src.tar.gz
#### -- 컴파일 & 설치
tar -xvf tomcat-connectors-1.2.40-src.tar.gz
cd tomcat-connectors-1.2.40-src/native
./configure -with-apxs=/usr/bin/apxs
make
make install
#### -- 공통 설정
vi /etc/httpd/conf.modules.d/00-base.conf
vi /etc/httpd/conf/httpd.conf
vi /etc/httpd/conf.d/mod_jk.conf
vi /etc/httpd/conf/workers.properties
#### -- 프로젝트 폴더 생성
mkdir /var/www/{PROJECT_NAME}-api
#### -- manager 복사
cp -R /usr/local/apache-tomcat-8.0.21/webapps/manager /var/www/{PROJECT_NAME}-api
#### -- apache 호스트 설정(conf.d 폴더의 전체 파일은 자동 인클루드됨)
vi /etc/httpd/conf.d/{PROJECT_NAME}.conf
#### -- tomcat 호스트 설정
vi /usr/local/apache-tomcat-8.0.21/conf/server.xml
vi /usr/local/apache-tomcat-8.0.21/conf/Catalina/localhost/ROOT.xml
#### -- manager 설정
vi /usr/local/apache-tomcat-8.0.21/conf/tomcat-users.xml
## 공통 : /etc/httpd/conf.modules.d/00-base.conf
LoadModule jk_module modules/mod_jk.so
## 공통 : /etc/httpd/conf/httpd.conf
DirectoryIndex index.jsp
## 공통 : /etc/httpd/conf.d/mod_jk.conf
<IfModule jk_module>
     JkWorkersFile /etc/httpd/conf/workers.properties
     JkShmFile /var/log/httpd/mod_jk.shm
     JkLogFile /var/log/httpd/mod_jk.log
     JkLogLevel info
     JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</ifModule>
## 공통 : /etc/httpd/conf/workers.properties
worker.list={PROJECT_NAME_1}, {PROJECT_NAME_2},...
#### 포트번호는 server.xml 파일의 AJP/1.3 프로토콜 컨넥터와 일치 시킴
worker.{PROJECT_NAME_1}.port=8009
worker.{PROJECT_NAME_1}.host={localhost or 외부서버IP}
worker.{PROJECT_NAME_1}.type=ajp13
worker.{PROJECT_NAME_1}.lbfactor=20
worker.{PROJECT_NAME_2}...
## 프로젝트별 : /etc/httpd/conf.d/{PROJECT_NAME}.conf
#### {PROJECT_NAME}-api
<VirtualHost *:80>
     DocumentRoot /var/www/{PROJECT_NAME}-api
     ServerName api.{PROJECT_DOMAIN}
     JkMount /* {PROJECT_NAME_1}
     ErrorLog logs/error_log_{PROJECT_NAME}-api
     CustomLog logs/access_log_{PROJECT_NAME}-api common
     <Directory "/var/www/{PROJECT_NAME}-api">
          AllowOverride All
          Order Allow,Deny
          Allow From All
     </Directory>
</VirtualHost>
## /usr/local/apache-tomcat-8.0.21/conf/server.xml
<Engine name="Catalina">
   <Host name="api.{PROJECT_DOMAIN}"  appBase="/var/www/{PROJECT_NAME}-api" unpackWARs="true" autoDeploy="true">
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="access_log_{PROJECT_NAME}-api." suffix=".txt"
            pattern="%h %l %u %t &quot;%r&quot; %s %b" />
   </Host>
</Engine>
## /usr/local/apache-tomcat-8.0.21/conf/Catalina/{localhost or 외부서버IP}/ROOT.xml
<?xml version='1.0' encoding='utf-8'?>
<!-- default virtual host\ROOT -->
<Context path="/" docBase="" reloadable="true">
</Context>
## /usr/local/apache-tomcat-8.0.21/conf/tomcat-users.xml
<tomcat-users>
   <role rolename="manager-script"/>
   <role rolename="manager-gui"/>
   <role rolename="manager-jmx"/>
   <role rolename="manager-status"/>
   <user username="manager" password="xxxxxxxxx" roles="manager-script,manager-gui,manager-jmx,manager-status"/>
</tomcat-users>
>>>>>> description
– 연동이 필요한 이유
==> Tomcat은 서블릿 컨테이너의 역할만 하고 Apache는 웹서버의 역할을 하여 기능을 분리
==> Apache에서 제공하는 편리한 기능을 사용할 수 있음
==> 부하 분산의 효과를 가질 수 있음(mod_jk의 Load Balancing과 FailOver기능을 사용)
– 연동에는 세가지 방법이 있다
==> mod_jk : 가장 많이 사용하므로 자료가 많고 유연한 설정이 가능 하나 톰캣에서만 사용이 가능함
==> mod_proxy or mod_proxy_ajp : 별도 설치가 필요없어 설치 및 설정이 간편하고 특정 WAS에 의존적이지 않음
– TOMCAT에서 제공하는 관리기능을 활용하면 배포, 상태 확인 등을 편리하게 할 수 있다. ({MANAGER_DOMAIN} 연결)
>>> PHP : Apache + PHP
#### -- 아파치 설정
vi /etc/httpd/conf.d/{PROJECT_NAME}.conf
#### -- PHP 설정
vi /etc/php.ini
## /etc/httpd/conf.d/{PROJECT_NAME}.conf
<VirtualHost *:80>
     DocumentRoot /var/www/{PROJECT_NAME}
     ServerName {HOSTNAME}
     ErrorLog logs/error_log_{PROJECT_NAME}
     CustomLog logs/access_log_{PROJECT_NAME} common
     <Directory "/var/www/{PROJECT_NAME}">
          AllowOverride All
          Order allow,deny
          Allow from all
     </Directory>
</VirtualHost>
## /etc/php.ini
#### <? 에 php 없이 설정 : 개발편의성
short_open_tag = On
#### timezone 설정
date.timezone = Asia/Seoul
>>>>>> description
– 프로젝트의 필요성에 따라 apache에서 제공하는 많은 모듈들을 적절히 활용할 수 있음
>>> NodeJS : Apache + NodeJS
## 시작 / 종료 / 재시작 스크립트 작성
vi /etc/init.d/{PROJECT_NAME}
## 실행권한 변경
chmod 755 /etc/init.d/{PROJECT_NAME}
## 시작시 자동실행
chkconfig --add {PROJECT_NAME}
chkconfig --level 234 {PROJECT_NAME} on
## 서비스 시작
service {PROJECT_NAME} start
## /etc/init.d/{PROJECT_NAME}
#!/bin/bash
# description: {PROJECT_NAME} Start Stop Restart
# processname: {PROJECT_NAME}
# chkconfig: 234 20 80 

case $1 in
start)
# 시작
forever start -a -l forever.log -o out.log -e err.log /var/www/{PROJECT_NAME}/app.js
;;
stop)
# 종료
forever stop /var/www/{PROJECT_NAME}/app.js
;;
restart)
# 재시작
forever stop /var/www/{PROJECT_NAME}/app.js
forever start -a -l forever.log -o out.log -e err.log /var/www/{PROJECT_NAME}/app.js
;;
esac
exit 0
>>>>>> description
– nodejs의 경우 오류 발생시 프로세스가 바로 죽게됨
– forever 모듈을 사용하여 운영함

[CentOS 7] step4. 보안 설정 2014-09-01

1. 방화벽 설정

> 방화벽 역할을 하는 장비가 없다면 리눅스 iptables을 활용하여 구축해야한다.

>>> 설치
yum -y install iptables
chkconfig iptables on
service iptables start
>>>>>> description
– iptables : 프로토콜의 상태 추적, 패킷 애플리케이션 계층검사, 속도 제한, 필터링 정책을 명시하기 위한 매커니즘을 제공한다.
– 기본적으로 설치되어 있으나 그렇지 않다면 위와 같이 설치한다.
>>> 설정확인
iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 104K   21M ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  any    any     anywhere             anywhere
 8799  530K ACCEPT     all  --  lo     any     anywhere             anywhere
    1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            state NEW tcp dpt:ssh
...
 2018  204K REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 114K packets, 20M bytes)
 pkts bytes target     prot opt in     out     source               destination

>>>>>> description
> Chain(체인) : 패킷을 구분
— INPUT : 호스트를 향한 모든 패킷
— OUTPUT : 호스트에서 발생하는 모든 패킷
— FORWARD : 라우트로 사용되는 호스트를 통과하는 패킷
> Match(매치) : 패킷의 조건
–source (-s) : 출발지 IP주소나 네트워크와의 매칭
–destination (-d) : 목적지 ip주소나 네트워크와의 매칭
–protocol (-p) : 특정 프로토콜과의 매칭
–in-interface (i) : 입력 인테페이스
–out-interface (-o) : 출력 인터페이스
–state : 연결 상태와의 매칭
–string : 애플리케이션 계층 데이터 바이트 순서와의 매칭
–comment : 커널 메모리 내의 규칙과 연계되는 최대 256바이트 주석
–syn (-y) : SYN 패킷을 허용하지 않는다.
–fragment (-f) : 두 번째 이후의 조각에 대해서 규칙을 명시한다.
–table (-t) : 처리될 테이블
–jump (-j) : 규칙에 맞는 패킷을 어떻게 처리할 것인가를 명시한다.
–match (-m) : 특정 모듈과의 매치
> Target(타겟) : 패킷을 처리하는 방식
— ACCEPT : 패킷을 받아들임
— DROP : 패킷을 버림(전송되지 않은 것으로 처리)
— REJECT : 패킷을 버리고 적절한 응답제공
— LOG : 패킷을 syslog에 기록
— RETURN : 호출 체인 내에서 패킷처리 계속
> Connection Tracking(연결 추적) : 연결 상태에 따른 패킷 제어
— NEW : 새로운 연결을 요청하는 패킷
— ESTABLISHED : 기존 연결의 일부패킷
— RELATED : 기존 연결에 속하지만 새로운 연결을 요청하는 패킷
— INVALID : 어떤 연결에도 속하지 않는 패킷
>>> 설정
iptables {옵션} {설정값}
>>>>>> description
-A (–append) : 새로운 규칙을 추가
-D (–delete) : 규칙을 삭제
-C (–check) : 패킷을 테스트
-R (–replace) : 새로운 규칙으로 교체
-I (–insert) : 새로운 규칙을 삽입
-L (–list) : 규칙을 출력
-F (–flush) : chain으로부터 규칙을 모두 삭제
-Z (–zero) : 모든 chain의 패킷과 바이트 카운터 값을 0으로 만듬
-N (–new) : 새로운 chain을 만듬
-X (–delete-chain) : chain을 삭제
-P (–policy) : 기본정책을 변경
>>> 설정예제
# CentOS 7 미만
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
service iptables restart
# CentOS 7 이상
firewall-cmd --zone=public --permanent --add-port=80/tcp
firewall-cmd --reload
>>>>>> description
– CentOS 7 이상부터 iptables 가 firewall-cmd로 대체 되었다
– 기존과 동일하게 사용하기 위해서는 firewall을 제거 하고 iptables-services를 설치

2. SSH 보안설정

> 서버 접속에 대한 보안룰을 적용한다.

## 루트 로그인 방지를 위한 일반관리계정 추가
useradd -G wheel admin
passwd admin
## 일반관리계정에 root 계정 권한 부여
chmod 600 /etc/sudoers
vi /etc/sudoers
## SSH 접속 제한설정
vi /etc/ssh/sshd_config
# /etc/sudoers : 다음내용 주석해제
%wheel        ALL=(ALL)       NOPASSWD: ALL
# /etc/ssh/sshd_config
## 접속포트 변경 : 22번이 아닌 다른포트
Port {포트번호}
## 인증없이 서버로 접속하는 rhost를 금지
IgnoreRhosts yes
## root로 직접로그인 금지
PermitRootLogin no
## wheel 그룹만 로그인가능
AllowGroups wheel
### 특정 계정 또는 그룹에 대해서 접속을 허용 또는 거부
AllowGroups {그룹}
AllowUser {계정}
DenyGroups {그룹}
DenyUser {계정}
## 서비스 재시작
service sshd restart
## 서비스 재시작 : CentOS 7 이상
systemctl restart sshd.service
>>>>>> description
– root로 직접로그인 하지 못하도록하여 비정상적인 접근시 복잡도를 증가시킴
– 시스템 운영의 중요한 부분은 wheel그룹만 가능토록함

3. 퍼미션 설정

> 보안에 문제가 될 수 있는 명령어는 root계정 또는 wheel그룹에게만 권한을 부여한다.

## 컴파일러 퍼미션 변경
chmod 100 /usr/bin/gcc /usr/bin/g++
chattr +i /usr/bin/gcc /usr/bin/g++
## su명령은 wheel그룹만 가능
chown root.wheel /bin/su
chmod 4750 /bin/su
chattr +i /bin/su
## 기타 명령 퍼미션 변경
chmod 750 /usr/sbin/useradd
chmod 750 /usr/bin/top
chmod 750 /sbin/fdisk
chmod 750 /sbin/mkfs*
chmod 750 /sbin/fsck*
>>>>>> description
– 퍼미션 변경으로 기본적인 보안이 가능

4. SELInux(Security-Enhanced Linux) 설정

> 보안정책이 적용되면 다음과 같은 문제점이 발생하는데 사용하지 않도록 설정(setenforce 0)한다기 보다 정책에 맞추어 설정하여 운영할 수 있도록 한다.

## [ERROR 1] apache 실행시 에러가 발생한다.
Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:88
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:88
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]
## [ERROR 1 - 해결]
### 88번 포트는 SELinux 정책에서는 기본적으로 허용하지 않는포트이다.
yum -y install policycoreutils-python
semanage port -a -t http_port_t -p tcp 88
>>>>>> description
– SELinux에서 기본적으로 허용하는 포트는 다음 8개포트 이다.
==> 80, 81, 443, 488, 8008, 8009, 8443, 9000

[CentOS 7] step1. 설치 후 기본설정 2014-08-06

1. 고정아이피 설정

> 서버로 활용시 고정IP를 설정하여 변경되지 않도록 해야함

vi /etc/sysconfig/network-scripts/ifcfg-eth0
>>> 유동IP
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=00:00:00:00:00
ONBOOT=yes
>>> 고정IP
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:00:00:00:00:00
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
UUID=00000000-0000-0000-0000-000000000000
IPADDR=000.000.000.000
NETMASK=255.255.255.0
GATEWAY=000.000.000.000
DNS1=000.000.000.000
DNS2=000.000.000.000
ETHTOOL_OPTS=wol g
IPV6INIT=no
USERCTL=no
>>>>>> description
– DEVICE :: 장치명
– BOOTPROTO :: static(고정IP) / dhcp(유동IP) / none(네트워크 미사용)
– HWADDR :: 물리적주소
– NM_CONTROLLED :: yes(네트워크 사용) / no(네트워크 미사용)
– ONBOOT :: 부팅시 장치 활성화 여부
– UUID :: 장치의 고유한 식별코드 (128bit로 구성)
– PEERDNS :: DBCP 사용시 Name Server를 DHCP 에서 받아온 것을 사용할 것인지 아닌지를 설정
– TYPE :: Ethernet
– IPADDR :: IP 주소 지정
– BROADCAST :: 브로드캐스트 지정
– NETMASK :: 서브넷마스크 지정
– GATEWAY :: 게이트웨이 지정
– ETHTOOL_OPTS :: Wake On Lan 기능 활성화, Ethtool필요함(CentOS의 경우 기본설치)
– IPV6INIT :: IPV6 사용여부
– USERCTL :: 일반 사용자의 네트워크 On/Off 가능 여부

2. 호스트네임 설정

> 서버를 구분하는 이름으로 시스템 구성시 유용하게 활용할 수 있음.

hostname ${hostname}
>>>>>> description
– 호스트명이 변경 됨
– 재부팅시 초기화 됨

 

vi /etc/sysconfig/network
HOSTNAME=${hostname}
>>>>>> description
– 호스트명이 변경 됨
– 재부팅시 반영 됨

 

vi /etc/hosts
127.0.0.1     localhost     ${hostname}
::1           localhost     ${hostname}
>>>>>> description
– 자기 자신을 가리키는 호스트 정보 수정

3. repository 추가

> 기본저장소에는 없는 최신의 패키지를 설치하기 위해 저장소를 추가한다.

>>> 저장소간 우선순위 지정
yum -y install yum-plugin-priorities
vi /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
## 추가
priority=1

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
## 추가
priority=1

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
## 추가
priority=1
>>>>>> description
– 저장소간 우선순위 지정을 위해 플러그인 설치
– 우선순위는 1~99까지 설정가능하며 낮을수록 우선순위가 높음
>>> RPM Forge 설치
## rpm 다운로드
wget http://server.opendocs.co.kr/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
## DAG's GPG key 인스톨
rpm --import http://server.opendocs.co.kr/RPM-GPG-KEY.rpmforge.txt
## 다운받은 패키지 확인
rpm -K rpmforge-release-0.5.3-1.el7.rf.*.rpm
## 패키지 설치
rpm -i rpmforge-release-0.5.3-1.el7.rf.*.rpm
## 저장소 활성화 설정
vi /etc/yum.repos.d/rpmforge.repo
[rpmforge]
name=RHEL $releasever - RPMforge.net - dag
baseurl=http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist=http://mirrorlist.repoforge.org/el6/mirrors-rpmforge
#mirrorlist=file:///etc/yum.repos.d/mirrors-rpmforge
enabled=1
protect=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck=1
## 추가
priority=1
>>>>>> description
– http://pkgs.repoforge.org/rpmforge-release/ 에서 알맞는 패키지를 다운로드
– DAG’s GPG key 를 체크해서 안정성을 검토 – 저장소 활성화
>>> Epel 설치 : 페도라 저장소로 이용되며 레드햇계열간은 호환성에 거의 문제없음
## rpm 다운로드
wget http://server.opendocs.co.kr/epel-release-7-1.noarch.rpm
## GPG key 인스톨
rpm --import http://server.opendocs.co.kr/RPM-GPG-KEY-EPEL-7.txt
## 다운받은 패키지 확인
rpm -K epel-release-7-1.noarch*.rpm
## 패키지 설치
rpm -i epel-release-7-1.noarch*.rpm
## 저장소 활성화 설정
vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
## 추가
priority=1
>>>>>> description
– http://dl.fedoraproject.org/pub/epel/ 에서 알맞는 패키지를 다운로드
– 저장소 활성화
>>> remi 설치 : 최신버전의 Mysql, PHP 등의 패키지를 지원함
## rpm 다운로드
wget http://server.opendocs.co.kr/remi-release-7.rpm
## GPG key 인스톨
rpm --import http://server.opendocs.co.kr/RPM-GPG-KEY-remi.txt
## 다운받은 패키지 확인
rpm -K remi-release-7.rpm
## 패키지 설치
rpm -i remi-release-7.rpm
## 저장소 활성화 설정
vi /etc/yum.repos.d/remi.repo
[remi]
name=Les RPM de remi pour Enterprise Linux 7 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/7/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/7/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
## 추가
priority=1

[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 7 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/7/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/7/php55/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
## 추가
priority=1

[remi-php56]
name=Les RPM de remi de PHP 5.6 pour Enterprise Linux 7 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/7/php56/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/7/php56/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
## 추가
priority=1
>>>>>> description
– http://dl.fedoraproject.org/pub/epel/ 에서 알맞는 패키지를 다운로드
– 저장소 비활성화 하고 필요한 경우에만 다음과 같이 사용함
yum install –enablerepo=remi,remi-php55 mysql-server
>>> 기존 설치된 패키지 update
yum clean all
yum -y --nogpgcheck update

4. selinux를 사용하지 않도록 설정

> 사용할 경우 설치 및 운영시 제약사항이 많아 사용하지 않는다.

## 사용해제
/sbin/setenforce 0

## 부팅시 사용해제 설정
vi /etc/selinux/config

#### /etc/selinux/config
SELINUX=disabled
>>>>>> description
– 보안정책이 너무 엄격해 운영시 오히려 문제를 발생시킬 수 있으므로 사용하지 않는다.

5. ssh 접속설정

> 직접 서버에서 작업을 하는 경우는 없으므로 SSH설치 후 원격으로 나머지 설치 및 유지보수 진행함

## 22번 포트가 열려있는지 확인
netstat -an|grep LISTEN

## 패키지 설치
yum -y install openssh-server openssh-clients

## 서비스 등록
chkconfig sshd on

## 서비스 시작
service sshd start

## 22번 포트가 열렸는지 확인
netstat -an|grep LISTEN

## 방화벽 설정
vi /etc/sysconfig/iptables

#### 다음내용 추가
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

## 방화벽 서비스 재시작
service iptables restart
>>>>>> description
– 22번 포트가 열려있다면 설치 불필요함

6. NTP(Network Time Protocol) 시간동기화

> 서버의 시간은 오차가 생기게 마련이므로 타임서버를 통해서 업데이트 받음

>>> NTP 설정
## ntp & libedit & ntpdate 설치
yum -y install ntp

## peer 설정
vi /etc/ntp.conf

## 시작프로그램에 등록
systemctl enable ntpd.service

## 서비스 시작
systemctl start ntpd.service

## 확인
ntpq -p
# ntp.conf
server time.bora.net
server time.kornet.net
>>>>>> description
– UDP 123을 기본포트로 사용함
– 국내의 NTP peer 서버를 등록
>>> 시간 동기화 설정
## rdate 설치
yum -y install rdate

## 하드웨어 시간확인
hwclock -r
#### ※ 시간설정
####    - hwclock -w (운영체제값과 동기화)
####    - hwclock -s (운영체제 값을 동기화 시킴)

## 운영체제 시간확인
date
#### ※ 시간설정
####    - date 082712122014(MM(월)DD(일)hh(시)mm(분)CCCC(년도))

## 타임서버 시간확인
rdate -p time.bora.net
#### ※ 시간설정
####    - rdate -s time.bora.net

## 시스템 부팅시 동기화
vi /etc/rc.d/rc.local

## cron을 이용한 주기적인 동기화
crontab -e
# rc.local
/usr/bin/rdate -s time.bora.net
/sbin/hwclock -w
# crontab
## 매일새벽 1시동기화
00    01    *    *    *    /usr/bin/rdate -s time.bora.net&&hwclock -w
>>>>>> description
– 운영체재의 시간은 시스템 재부팅시 CMOS의 시간으로 초기화 되므로 동기화 시켜주어야 함

7. 문자셋 설정

> 서버설치시 UTF-8로 설정되지 않았다면 다음과 같이 변경함

## 문자셋 설치
yum -y install kde-i18n-Korean fonts-korean

## 문자셋 변경
vi /etc/sysconfig/i18n 

## profile 추가
vi /etc/profile

## 반영
source /etc/sysconfig/i18n
locale

## 리부팅
init 6
# i18n
LANG="ko_KR.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.UTF-8:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"
SYSFONTACM="8859-15"
#profile
export LC_ALL="ko_KR.UTF-8"
export LANG="ko_KR.UTF-8"
>>>>>> description
– [LANG] : 최초 초기 지원 언어 지정(부팅시 사용할 언어 패키지).
– [SUPPORTED] : 최초 언어 패키지 외에 호환 가능한 패키지 지정
– [SYSFONT] : 사용할 언어 패키지의 글짜 폰트 지정
– [SYSFONTACM] : 8859-15, iso15, …