head	1.1;
access;
symbols;
locks
	root:1.1; strict;
comment	@# @;


1.1
date	2009.11.15.19.03.49;	author root;	state Exp;
branches;
next	;


desc
@/opt/nforge/var/wiki/jsboard/data/text/JSBoard_2fSecurity
@


1.1
log
@211.37.104.183;;oops 김정균 ;;
@
text
@#title JSBoard 보안 설정

[[TableOfContents]]

== Upload Directory 제한 ==

보통 CGI 방식을 통한 upload 에 관련하여 보안문제가 많이 발생을 하고 있다. 하지만 단순히 CGI 의 코드만 의존하여 보안문제를 방지 한다는 것은 무리라고 생각이 되어 apache의 설정 file 에서 원천적으로 업로드 file 에 대해서 실행이 되지 않도록 하는 설정을 적용 시켜 보았다. 현재 필자의 개인 서버와 kldp server에서 적용이 되어 있으며 특히 호스팅서버와 같이 여러 계정들이 사용을 하는 경우에 JSBoard 를 사용할수도 있기 때문에 이 셋팅을 해 놓는 것을 권장한다.  

설정은 다음과 같이 할수 있다.

{{{#!vim config
<DirectoryMatch "^/.*/jsboard/data">
  AddType application/x-httpd-php3-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins
  AddType application/x-httpd-php-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins 

  ErrorDocument 403 http://domain.com/ErrorMSG/error_msg.php?l=ko&c=403 

  <Files ~ ".*\.ph$">
    Order allow,deny
    Deny from all
  </Files>
</DirectoryMatch> 
}}}

이 설정의 의미는 jsboard/data라는 디렉토리 아래에 있는 어떠한 경로의 data라는 이름의 디렉토리에서 '''''.phps .php .ph .php3 .cgi .vbs .ins .sh .pl .htm .html .shtml''''' 의 확장자를 가지고 있으면 source 를 출력하라는 의미이며 주의 할것은 여기에 패스워드 같은 것이 들어가 있는 source 를 올려 놓으면 안된다는 것을 주의해야 한다. 위의 경로는 게시판 디렉토리 이름을 어떻게 하느냐에 따라 수정을 해 줘야 한다.

또한 data 라는 이름의 디렉토리 아래로 .ph로 직접 접근할 경우에는 '''''http://domain.com/ErrorMSG/error_msg.php?l=ko&c=403''''' 페이지를 출력 하라는 의미이다.

이 설정은 root 의 권한만 가지고 있으면 누구나 다 설정을 해 주는 것이 좋으며 만약 계정 유저들이라고 해도 서버 관리자에게 이 설정을 해 달라고 하는 것이 좋다. 이 설정을 안해서 좋을것이 하나도 없을테니 아마 다 해줄 것이다.


== DB 암호 관리 ==

계정 유저들의 경우에는 db 의 password 를 가지고 있는 file을 보호하기 위한 것을 설명한다. 즉 다른 유저가 db 의 패스워드를 볼수 없도록 하기 위한 것으로 이
부분은 root(서버 관리자) 가 해 주어야 할 부분이다. 만약 이것이 불가능 하다면 이 파일들의 권한을 606 으로 그냥 두면 된다. 즉,

 * jsbaord/config/global.php,
 * jsboard/config/spma_list.php,  

에 대한 group 소유권을 nobody 로 지정해 달라고 해야 한다 (Debian 사용자 라면 www-data 로 해야 할 것이고, Redhat/CentOS/Fedora 의 경우에는 apache 이다. 다른 OS는 모르겠다. httpd.conf 의 Group 지시자에 설정되어 있는 값을 확인을 해서 해 달라고 한다) 즉

{{{#!vim sh
$ chgrp nobody jsboard/config/global.php (root가 실행해야 하는 명령)
$ chgrp nobody jsboard/config/spam_list.txt (root가 실행해야 하는 명령)
}}}

명령을 실행해 달라고 해야 한다. 이를 시행하면 아래와 같이 소유권을 가지게 된다. 이것은 account 를 실행한 후에 행할 일들이다. (Debian의 경우에는 nobody가 아니라 www-data가 되어야 한다. Redhat/CentOS/Fedora 의 경우에는 apache 이다.)

{{{#!vim sh
-rw-rw----    accountname    nobody     config/global.php
-rw-rw----    accountname    nobody     config/spam_list.txt
}}}

만약 root 가 이를 응하지 않거나 또는 불성실한 root 라면 다음과 같이

{{{#!vim sh
$ chmod 606 config/global.php
$ chmod 606 config/spam_list.txt
}}}

을 실행하고, 퍼미션은 다음과 같이 된다.

{{{#!vim sh
-rw----rw-    accountname    accountname    config/global.php
-rw----rw-    accountname    accountname    config/spam_list.txt
}}}

하지만 이렇게 했을 경우 운영은 가능하나 보안상 좋지는 않다. 그리고 주의 할것은 account user 의 권한으로 설치 시에는 보안의 문제성이 대두될 수 있으니 home directory의 권한을 꼭 711로 해야한다.
@
