2013년 3월 20일 수요일

PHP의 파일 용량 제한 설정 (php.ini)

오전 4:56 Posted by jonnung No comments

php.ini


POST 데이터가 허용하는 최대 사이즈는 파일 업로드에도 관여하며 큰 파일을 업로드 하기 위해서는 이 값이 upload_max_filesize보다 커야한다.
환경 설정 스크립트에서 메모리 제한을 활성화하였으면, memory_limit도 파일 업로드에 관여한다.

;파일 업로드 사용여부
file_uploads = On 

;업로드 파일의 최대 크기
upload_max_filesize = 10M

;PHP가 허용하는 POST 데이터의 최대 크기
post_max_size = 11M

일반적으로, memory_limit는 post_max_size보다 커야만 한다.

;스크립트가 사용할 수 있는 최대 메모리 크기

memory_limit = 20M

스크립트가 사용할 수 있는 최대 메모리 양을 바이트로 설정하고, 서버의 많은 메모리를 차지하는 것을 방지하도록 한다.
PHP 4.3.2부터, memory_limit를 활성화 했을때, PHP 함수 memory_get_usage()가 사용 가능하다.


크기 설정시 아래와 같은 순서로 설정하는 것을 추천한다.

memory_limit > post_max_size > upload_max_filesize


php.conf

LimitRequestBody 524288 # 524288 이 초기값이다.. 원하는 크기를 설정하면 된다.
아파치 웹서버를 이용하여 업/다운로드 하는 모든 파일의 사이즈를 제한한다.
아래는 download 디렉토리를 10M로 업/다운로드 크기를 제한한 예제이다.

LimitRequestBody 10240000

2013년 3월 17일 일요일

리눅스의 데몬(Daemon)

오후 5:50 Posted by jonnung No comments
몬(Daemon)

 데몬이란 시스템에 관련된 작업을 백그라운드에서 수행하는 프로세스를 말한다.

 이벤트를 기다리거나 주기적으로 주어진 작업을 수행하기 위하여 대기하고 있는 프로세스를 의미한다.
일반적으로 데몬 프로세스는 이름끝에 'd'자가 붙는다.

 기본적으로 리눅스에는 여러 기능과 서비스를 제공하기 위한 다양한 데몬 프로세스들이 시스템에서 돌아가고 있다.
서비스 데몬들의 실행여부는 레드햇 리눅스 계열에서 ntsysv 커맨드로 조정하면 된다.
리눅스상에서 현재 실행되고 있는 데몬의 현황을 보려면 pstree 커맨드를 쓴다. 


데몬의 실행 방식

(1) Stand-alone 방식
 이 방식의 데몬들은 데몬이 시작되면 말 그대로 자기 스스로 시스템에서 상주하며 클라이언트 요청에 응답을 보내주는 방식으로 보통 아파치 데몬처럼 클라이언트의 요청이 잦은 데몬들이 이런 방식으로 실행된다.

 스탠드 얼론방식의 데몬을 확인하려면 쉘상에서 pstree 명령을 내리면 데몬들을 트리형식으로 보여준다.

 스탠드 얼론 방식의 데몬들은 xinetd방식보다는 클라이언트 요청에 신속하게 대응한다는 장점은 있으나 이런 스탠드 얼론 데몬들이 시스템에서 많이 생성되게되면 시스템의 자원낭비가 심해지게 되고 퍼포먼스도 떨어지게 된다.


(2) xinetd 방식
 Stand-alone 처럼 자기 스스로 독립적으로 시스템에 실행되는게아니라 xinetd라는 수퍼데몬이 시스템에서 대기하고 있다고 클라이언트 요청이 들어오면 xinetd데몬에 의해 해당 서비스를 제공해줄 데몬을 실행시키는 방식이다.

 telnet이나 ftp같이 비교적 클라이언트 요청의 빈도가 낮은 서비스들은 이런 xinetd데몬이 시스템 활용측면에서는 유리하다.

 또한 tcp wrapper를 써서 보안을 손쉽게 설정할 수 있는 것도 장점이다. 그러나 전술한 아파치 데몬같이 클라이언트의 자잘한 요청이 많은 서비스에 대해서는 inetd방식이 시스템효율을 도리어 떨어드리게된다.

 xinetd데몬은 스탠드 얼론방식으로 실행되는 슈퍼데몬이며 서비스 요청시 xinetd데몬의 차일드 프로세스로 다른 데몬이 실행된다.

 이를 확인하려면 pstree로 xinetd데몬을 확인하고 다른 한텀창에서 telnet이나 ftp로 자신의 호스트에 접속해보라. 그럼 xinetd데몬에서 차일드 프로세스로 해당 데몬이 실행되는 것을 확인할 수 있다.


슈퍼 데몬

 데몬 중에는 xinetd(커널 2.4버전 이전은 inetd, xinetd는 eXtended Internet Services daemon의 약자이다) 이라는 인터넷 수퍼 데몬(Internet Super Daemon)이 있다.

SENDMAIL, HTTPD 등과 같이 리눅스 시스템에서 실행되는 데몬의 일종이다.

 그런데 이를 다른 데몬들과 달리 슈퍼 데몬이라고 부르는데에는 특별한 이유가 있다. 이 슈퍼 데몬은 리눅스 서버에서 서비스되는 다른 여러가지 데몬들 을 제어하면서 각각의 서비스들의 연결을 담당하고 있기 때문이다.

 예를 들어 xinetd 슈퍼 데몬에 의해 제어되는 서비스중에 telnet(하나의 데몬)이라는 서비스가 있다고 하자. 누군가가 telnet서비스에 접속을 시도하면 바로 telnet으로 연결이 되는 것이 아니라 슈퍼데몬인 xinetd에 의해 허가된 사용자인가를 검사받은 후에 xinetd의 telnet설정파일(/etc/xinetd.d/telnet)에 정의되어 있는 telnet서비스 데몬과 연결되어 비로소 사용자는 telnet을 이용하게 되는 것이다.

 이처럼 리눅스의 데몬중에는 슈퍼데몬에 의해 제어가 되는 데몬에는 telnet 이외에 ftp, finger, login, shell 등이 있다.


참고

2013년 3월 14일 목요일

html 문서에서 php 코드를 실행 시키기 - php 은닉(hiding php)

오후 8:54 Posted by jonnung No comments

두가지 상황을 생각해 볼 수 있지만 사실은 같은 말이다. ㅋㅋ

  1. html 문서에서 php 코드를 실행 
  2. php 코드만으로 작성 되었지만 확장자를 php로 하지 않고 html로 저장
Apache 웹서버가 php를 다른 파일 타입으로 인식하도록 httpd.conf 파일에서 아래와 같은 부분을 찾아 수정하면 가능하다.

<IfModule mime_module>
AddType application/x-httpd-php .html .htm 
</IfModule>

위 설정 변경의 의미는 .html / .htm 을 확장자로 갖는 문서에 대해 php가 실행 되도록 하는 역할을 한다.

하지만 php엔진에 의해 모든 html 구문에 대한 분석이 발생하기 때문에 성능면에서 다소 좋지 않을 수 있다.

참고 : http://php.net/manual/en/security.hiding.php