다시 요약해서 최신에 맞게 작성해 봅니다.
최종수정 : 2014-10-16
현재 배포된 Ubuntu 버전은 아래와 같습니다.
운영체제의 수명이 긴 LTS 버전을 설치하도록 합시다. (버전숫자가 높다고 더 좋다는 뜻은 아님)
Ubuntu 운영체제에 관해서는 http://en.wikipedia.org/wiki/Ubuntu_(operating_system) 를 참조하세요.
설치는 Ubuntu 12.04 LTS를 기준으로 합니다.
물론 다른버전도 설치될겁니다.
일반 사업체에서 사용할 수 있도록 안정적인 세팅법을 알려드리겠습니다.
당신이 운영하고자 하는 소프트웨어가 WordPress나 Drupal , Joomla 같이 안정적인 프로그램이면 14.04 LTS를
gnuboard, technote, kimsq 등 과거 방식의 프로그램이면 12.04 LTS를 설치하세요.
(또는 14.04 설치해서 PHP ERROR REPORTING 부분만 수정해도 되는데.. 이 방식은 추천하지 않습니다.)
1) 리눅스 버전체크
#uname -a
Linux ubuntu 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
2) Ubuntu 버전체크
#cat /etc/issue
Ubuntu 12.04
3) 하드용량체크
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/LaelServer02-root
37G 739M 35G 3% /
tmpfs 244M 0 244M 0% /lib/init/rw
varrun 244M 72K 244M 1% /var/run
varlock 244M 0 244M 0% /var/lock
udev 244M 148K 244M 1% /dev
tmpfs 244M 0 244M 0% /dev/shm
lrm 244M 2.7M 242M 2% /lib/modules/2.6.28-11-server/volatile
/dev/sda5 228M 14M 202M 7% /boot
대략 다 더하면 40G가 나온다.
—
다른 예
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 2.5G 15G 15% /
udev 486M 4.0K 486M 1% /dev
tmpfs 198M 252K 198M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 495M 0 495M 0% /run/shm
/dev/sda3 80G 1.4G 75G 2% /home
이건 다 더하면 100G 가 나온다.
사용자 영역은 /home 이므로 약 75G 사용가능하다.
/home 이 따로 없으면 / 파티션 공간을 보면 된다.
즉 첫째 예시의 여유공간은 35G, 둘째 예시의 여유공간은 75G 이다.
4) 메모리 체크
#free -m
total used free shared buffers cached
Mem: 988 703 285 0 137 393
-/+ buffers/cache: 172 816
Swap: 1881 0 1881
988M의 전체메모리중 현재 703M을 사용하고 있고 285M가 비어있다.
5) 자잘한 업글
apt 목록 갱신
apt란 Advanced Packaging Tool 을 뜻합니다. 우리는 apt 라는 우분투에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.
#apt-get update
#apt-get upgrade
6) Apache2 설치
14.04 에서는 apache 2.4 가 설치된다.부팅시 자동실행 된다. (기본값)
설치 완료되면 자동적용 및 시작된다.확인해본다. http://256.123.213.213(서버의아이피)
웹브라우져에 It Works 라고 뜨면 성공.
7) PHP 5.x 설치
자동으로 아파치 중단시키고 설정파일에 php를 등록시키고 재 구동시킨다.(바로 적용됨)12.04 에서는 php 5.3 이 설치된다.
14.04 에서는 php 5.5 가 설치된다.#apt-get install php5-cli
콘솔에서 php를 실행시키기 위해서 위와 같이 실행
#php -v
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
5.3.10 버전이다. (당신이 설치한 버전은 이것보다 높을 것이다.)
8) Mysql 설치
[
#apt-get install mysql-server
mysql 서버데몬 설치. 재부팅시 자동실행된다.
설치중에 root비밀번호를 세팅할 수 있다.
]
또는 여러분 중에 MYSQL 최신 버전 설치를 원하는 사람이 있다면 아래의 명령어를 사용하여라.
[
#apt-get install mysql-server-5.6
mysql 서버데몬 설치. 재부팅시 자동실행된다.
설치중에 root비밀번호를 세팅할 수 있다.
#apt-get install php5-mysql
php5 연동모듈 설치
버전체크
#mysql -V
5.5.32 버전이다.
기본 언어셋 설정(중요)
이 단계를 건너뛰면 DB가 latin1 으로 생성되며 추후 DB작업에 문제가 생길 수 있다.
#vi /etc/mysql/my.cnf
(vi 에디터 사용방법을 모른다면 ftp 클라이언트를 사용하여 서버에 로그인 후 해당파일을 수정하고 덮어쓰기한다.)
[mysqld] 항목에 다음 2 줄을 추가한다.
character-set-server = utf8
collation-server = utf8_general_ci
*Fine Tuning 의 max_allowed_packet 을 256M 로 변경
(DB한 행의 데이터 크기 제한이라고 보시면 됩니다)
[mysqldump]에도
max_allowed_packet 을 256M으로
변경사항저장
9) PHP 권한 설정
+) 업로드시 기본 권한 설정
리눅스에서 기본적으로 파일 업로드시 지정되는 권한은
파일 : 755, 폴더 : 644 이다.
이것을 변경해 보자.
#vi /etc/profile
해당 파일의 최하단에
umask 077
TMOUT=1800
추가
umask는 권한 설정 계산 값인데 모든 권한을 주는 777 에서 이 값을 뺀 것이 권한지정된다.
즉 umask 077 의 계산법은 [777 – 077] 이 되며 700이 결과가 된다.
보안 향상에 좋다.
만약 1800초(30분)이 너무 길다면 TMOUT=600 (10분)으로 하고,
너무 짧다면 TMOUT=3600 (1시간) 또는 TMOUT=36000 (10시간) 으로 변경하세요.
10) 계정생성 및 동작테스트
리눅스 관련 서적을 보면 둘다 계정생성용 명령어라고 되어있다.
쉬운 설정을 위해 adduser를 사용
#adduser lael.be –force-badname
저는 주로 www 디렉토리를 사용합니다.사용자변경 후 www 디렉토리를 생성하고 빠져나오기
#su -l lael.be
#mkdir www
11) 웹사이트 정보 환경설정파일 작성
다음의 내용을 작성한다.
#11.11.03 샘플파일 추가.
다음의 파일을 다운받아서 알맞게 수정한 후에
/etc/apache2/sites-available/lael.be 에 저장한다.
#연결될 도메인을 설정합니다. (main domain)
ServerName lael.be
#다중도메인 설정을 합니다. 서브도메인 및 전혀다른 도메인도 가능합니다. 여러줄 써도 됨(additional domain)
ServerAlias www.lael.be
ServerAlias my-anotherdomain.com
DocumentRoot /home/lael.be/www/
#additional setting
< Directory /home/lael.be/www/>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
< /Directory>
< /VirtualHost>ServerAlias 는 사용안하면 빼도 되는 줄이다.
12) 사이트 활성화 및 적용
#14.10.16 보안 관련 설정 추가.
1. SSH 포트번호 변경
https://lael.be/285
물론 방화벽을 설정할 수 있다면 굳이 포트번호를 바꿀 필요는 없습니다.
이것은 보안향상에 크게 도움이 됩니다. (무작위 대입 프로그램으로부터 보호됨)2. PHP 명령어 제한
의도하지 않게 사이트가 뚫릴 수 있습니다.
웹쉘이 업로드 된다던가 잘못된 웹프로그램을 실행시킨다던가..그것을 막아주는 겁니다.1] php.ini 설정파일 편집
편집이 어려우면 FTP로 php.ini 를 다운받은 후 업로드 하세요.
#vi /etc/php5/apache2/php.ini
2] disable_functions 항목 변경
기존의 disable_functions을 주석처리하고 (앞에 ; 붙이면 주석처리됨)
disable_functions = “pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode”
바로 아래에 넣으세요.
만약 당신의 프로그램에서 위의 명령어중 사용하는 것이 있다면 해당 명령어를 지우고 아래의 3, 4번을 진행하면 됩니다.
3] 아파치 재시작
#service apache2 restart
4] 프로그램 테스트
test.php 파일을 생성해서 웹에서 실행해 본다.
<?php
echo exec(“whoami”);
echo ‘done';
?>
에러 나면서 실행이 안되면 정상.
3. Ubuntu 소프트웨어 업데이트
요즘 가끔씩 엄청난 취약점이 발견되곤 하는데….
해당 취약점을 대하는 우리의 자세는 보안패치 하는 것입니다.
1] 최신 소프트웨어 목록 불러오기
#apt-get update
2] 설치되어 있는 프로그램 최신 버전으로 업데이트
웹서버로 운영중이다면 그냥 아래의 명령어를 쓰시고(별 지장 없음)
기타 게임서버 프로그램이나 자체적으로 운영하는 프로그램이 있다면 끄고 실행하세요.
#apt-get upgrade
기타 ) #141105 추가. 계정용량 제한하기, 트래픽 제한하기, 속도 제한하기.
1. 트래픽 제한하기 (속도 제한하기)
– 트래픽 무제한의 진실.
간혹 웹서비스 중에 “트래픽 무제한” 이라는 것이 있다. 과연 진짜일까?
놀랍게도 진짜로 무제한이다.
하지만 당신이 생각하는 그 무제한은 아니다.
속도제한 이라는 놀라운 함정이 있다.
전송 속도 제한을 1MB/s (1초당 1MB를 전송)로 해둔다고 하자.
당신은 1시간 내내 FULL로 다운로드를 받아도 3600MB를 받을 수 있다. (약 3.6GB)
하루 종일 FULL로 사용해도 86400MB(86GB), 한달 내내 써도 2592000MB(2600GB) 이다.
이렇게 따로 트래픽양 제한을 하지 않는다고 해도 [속도제한]으로 인해 최대로 사용할 수 있는 트래픽양이 정해져 있는 것이다.
물론 이렇게 FULL로 사용하면 과부하 사이트로 되어 퇴출 당하게 된다.
- 속도 제한 방법
1초에 100번씩 데이터 전송량을 체크한다고 하자.
속도제한을 1MB/s 라고 해 놓았고(1초당 1MB를 전송)
만약 30번(0.3초)동안 1MB 를 이미 전송했다면 남은 70번(0.7초) 동안은 데이터를 전송하지 못하게 막는다. 이렇게 되면 1초당 1MB를 전송하는 셈이다.
사람이 느끼기에는 부드럽게 1초당 1MB씩 전송하는 것처럼 보인다.
컴퓨터가 느끼기에는 데이터가 0.3 초 동안 왕창 왔다가 0.7초 쉬고 또다시 0.3초 전송, 0.7초 휴식하는 것으로 보일 것이다.
- 서버를 다운시키는 법
라엘이가 겪었던 일이다. FLV 플래시 비디오를 업로드하고 빠른 속도를 제공했었다.
그런데 수십명이 동시접속을 해서 FLV 플래시 비디오를 재생하니 서버가 다운이 된 것이다.
이처럼 동영상이나 대용량 파일을 서비스 하면서 속도제한을 걸지 않으면 서버가 다운될 것이다.
- DDOS 방어 방법중에 하나가 속도제한을 거는 것이다.
속도를 느리게 맞추면, 예를들어 10개의 동시요청으로 다운되는 서버가 1000개의 요청을해야 다운이 된다.
- 전송량 제한이 가능하면 속도 제한도 가능하다. 왜냐하면 둘은 연관되어 있기 때문이다.
2. 트래픽 제한(속도 제한) 모듈 설치 및 사용 방법
— Ubuntu 12.04 LTS 버전의 경우 설치방법
1] 아파치 확장 개발 라이브러리 다운로드
#apt-get install apache2-prefork-dev
2] apache cband module 다운로드
현재 공식사이트가 닫혀있다…
위를 클릭해서 다운받도록 하자.
3] 압축을 풀고 설치
#tar -xzvf mod-cband-0.9.7.5.tgz
#cd mod-cband-0.9.7.5
#./configure
#make
#make install
4] 아파치 모듈 켜기
#a2enmod cband
5] 적용을 위해서 아파치 재시작
#service apache2 restart
6] 설정하기.
https://www.linux.co.kr/home/lecture/?leccode=10588
위의 링크 글을 참조하여 이미 생성해서 사용중인 sites-available 안의 virtualhost 파일을 수정한다.
끝
—
용량제한은 quota 프로그램임. 추후 서술.