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


1.3
date	2009.11.15.18.55.01;	author root;	state Exp;
branches;
next	1.2;

1.2
date	2009.11.15.18.53.51;	author root;	state Exp;
branches;
next	1.1;

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


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


1.3
log
@211.37.104.183;;oops 김정균 ;;
@
text
@#title JSBoard User Mode Installation

[[TableOfContents]]

== 주의 사항 ==

 * 이 문서는 JSBoard 2.0.x 버전을 설치 하기 위한 문서이다.
 * WikiPediaKO:PHP 4.1.0 이상 버전이 필요하다.
 * Account User(Root 권한이 없을 경우) 권한으로 Installer를 사용하여 설치할 경우 다음의 조건이
 선행 되어야 함
  1. WikiPediaKO:MySQL database가 미리 생성 되어 있어야 함.
  1. 생성되어 있는 database에 대한 WikiPediaKO:MySQL user와 암호가 미리 설정이 되어 있어야 함

== 사용 환경 ==

 * [wiki:WikiPediaKO:아파치_웹서버 Apache] 1.3.23 이상
 * WikiPediaKO:MySQL 3.23.32 이상
 * WikiPediaKO:PHP 4.1.0 이상
 * PHP Build Option
 {{{#!vim sh
shell> ./configure ... \
              --disable-debug \
              --with-regex=php \
              --with-mod_charset \
              --with-mysql=shared \
              --enable-inline-optimization \
              --enable-magic-quotes \
              --enable-track-vars \
}}}

== 체크 사항 ==

 * WikiPediaKO:PHP mysql function test
  * check.php라는 파일을 다음의 내용으로 생성한다.
  {{{#!php
<?php
if ( function_exists ('mysql_connect') ) echo "Yes\n";
else echo "No\n";
?>
}}}
  * 만든 문서를 웹에서 호출을 했을 경우, No가 출력이 되면 WikiPediaKO:PHP 에서 WikiPediaKO:MySQL extension을 지원하지 않는 것이다. WikiPediaKO:PHP 가 WikiPediaKO:MySQL을 지원하도록 빌드가
되었는지 확인을 하도록 한다.
 * Web server의 Directory Index 확인
  * [WikiPediaKO:아파치_웹서버 Apache]의 경우 설정 파일에서 DirectoryIndex 지시자에 index.php>가 등록이 되어 있는지 확인을 한다.
 * Shell 환경 확인
  * SunOS나 WikiPediaKO:Solaris의 경우 설치 전 INSTALLER/script에 존재하는 script의 첫 라인 '''''#!/bin/sh'''''를 다음과 같이 수정을 한다.
  {{{
#!/bin/ksh
PATH=/usr/ucb:/usr/xpg4/bin:/usr/bin:/usr/sbin
}}}

== JSBoard 설치 ==

<!> JSBoard는 웹상에서 관리를 하도록 되어 있기 때문에 웹서버가 작동하는 nobody group의 권한으로 쓰기권한을 가지고 있어야만 한다는 것을 명심해야 한다. 즉 permission 설정에 주의를 기해야 한다는 것이다! (꼭 nobody 라는 보장은 없다. 이는 apache의 설정 파일인 httpd.conf 에서의 Group지시자의 값에 따라 달라진다. 확인을 해 보도록 한다.)

=== MySQL Setting ===

MySQL의 처음 셋팅 하는 사람을 기준으로 설명을 한다. 이미 셋팅이 되어 있는 사람들은 적당히 보고선 자신이 이미 되어 있는 부분은 뛰어 넘도록 한다.
    
계정 사용자들의 경우에는 이 과정을 생략하며, 서버 관리자에게 MySQL 의 계정과 Database만 생성해 달라고 요청을 하면된다. 즉 DB username,DB name,DB password를 알려 달라고 해야 한다.

 1. 일단 MySQL을 설치를 하도록 한다. 일반적으로 배포본에서 제공하는 패키지 관리자로 설치를 하든지 또는 http://mysql.org/ 에서 binary version을 받아서 사용을 하도록 한다. 

 1. 설치를 마쳤으면 root계정의 패스워드를 지정한다.
 {{{#!vim sh
[root@@home /public_html]# mysql mysql 

Reading table information for completion of table and column names You can
turn off this feature to get a quicker startup with -A 

Welcome to the MySQL monitor. Commands end with; or \g. 
Your MySQL connection id is 1961 to server version: 3.22.32-log 

Type 'help' for help. 
mysql> use mysql;
mysql> update user set password = password('루트패스워드')
     > where user = 'root';
Query OK, 1 row affected (0.00 sec) 

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
}}}

 root password 를 지정한 후에 JSBoard 에서 사용할 database 와 사용자 설정을 하도록 한다. 등록을 하려는 '''''USER이름을 "사용자", DB이름을 "디비", 패스워드를 "패스워드"''''' 로 가정을 한다. 적절히 대입을 해 줘라. 단 중요한 것은 이것들을 한글로 하지는 마라. 먼일이 벌어지기를 기대한다면 한글로 해도 상관이 없다. 여기서는 단지 보기 쉽게 하기 위해서 한글로 하는 것 뿐이다.

 {{{#!vim sh
mysql> CREATE database 디비; 
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT all privileges on 디비.* TO 사용자@@localhost
     > IDENTIFIED BY '패스워드';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
}}}

 이미 설정이 되어 있는 사람들은 이 단계는 그냥 건너 뛰면 된다.

=== 설정 file 및 셋팅 하기 ===

먼저 다운로드 받은 file의 압축을 설치를 원하는 디렉토리에서 압축을 풀도록 한다.

{{{#!vim sh
$ tar xvfpz jsboard-version.tar.gz
}}}

압축을 풀면 jsboard-version 이라는 디렉토리가 생성이 된다. jsboard/INSTALLER/SQL 로 이동을 하여 다음 명령을 실행을 하여 jsboard 에서 사용을 할 table 구조체를 만들도록 한다. 위에서 등록한 MySQL 정보들을 알아야 한
다.

{{{#!vim sh
$ cd jsboard-version/INSTALLER/SQL
$ mysql -u 사용자 -p 디비 < board-$ostype.sql
Enter password: 패스워드 

$ mysql -u 사용자 -p 디비 < userdb-$ostype.sql  
Enter password: 패스워드 
}}}

table 구조체를 만들었으면, 다음 설정 file 들을 위치 시키고 그 file 들의 퍼미션을 조정하도록 한다.

 1. Root 권한이 있을 경우

 jsboard/INSTALLER/script 에서 root 의 권한을 가지고 설치를 할수 있다면 root 를 실행하도록 한다. Root 권한이 없을 경우 '''''2. Root 권한이 없을 경우'''''를 보도록 한다.

 {{{#!vim sh
$ ./root
########################################################
# JSBoard Config File Installer v2.0                   #
# Scripted By JoungKyun Kim < http://www.oops.org >    #
########################################################

STEP 1 Language Check
---------------------
Can you enable to use KOREAN in this console? [Y/N](default Y) : y <--Enter

########################################################
## 시스템 정보
########################################################
#
# 시스템 언어               : 한국어
# 시스템 타입               : Linux
# 아파치 유저권한           : nobody
# 아파치 그룹권한           : nobody
#
########################################################


위의 정보가 틀리면 N 을 선택해서 재조정 해 주십시오. 
위의 정보가 맞습니까? [Y/N](default Y) :
}}}

 위에서 아파치 유저권한 과 아파치 그룹권한이 맞는지를 확인을 해야 한다. 이 값들은 httpd.conf 의 USER, GROUP 지시자의 값과 동일해야 한다. 같으면 y 를 틀리면 n 을 선택하도록 한다. n 을 선택하면 다음의 과정을 거친다

 {{{#!vim sh
1. Webserver user configuration
httpd.conf 의 User 지시자의 값을 적어 주십시오 : apache

2. Webserver group configuration
httpd.conf 의 Group 지시자의 값을 적어 주십시오 : apache

설정 완료!!!
$
}}}

 보통 FreeBSD 는 nobody 일 것이며 Debian 은 www-data, RedHat7 은 apache 일 경우가 많다.

 1. Root 권한이 없을 경우
 계정 사용자의 경우에는 account 를 실행하도록 한다.

 {{{#!vim sh
$ ./account
########################################################
# JSBoard Config File Installer v2.0                   #
# Scripted By JoungKyun Kim < http://www.oops.org >    #
########################################################

STEP 1 Language Check
---------------------
Can you enable to use KOREAN in this console? [Y/N](default Y) : Y 

config/global.php config/spam_list.txt file 의 group 소유권이 nobody
에게 있어야 합니다. 만약 위의 파일들의 그룹 소유권을 변경할 수 없다
면 permission 을 606으로 맞춰 주십시오
}}}

 account 를 실행 하면 다음과 같이 나온다.  위의 경우는 한글을 사용할수 있다고 선택한 경우이다. 없다면 영문 메세지로 위의 내용이 나오게된다. 위의 내용은 db의 password를 가지고 있는 file을 보호하기 위한 것을 설명한다. 즉 다른 유저가 db 의 패스워드를 볼수 없도록 하기 위한 것으로 이 부분은 root(서버 관리자) 가 해 주어야 할 부분이다. 만약 이것이 불가능 하다면 이 파일들의 권한을 606 으로 설정을 하라는 의미이다. 즉

 {{{
jsbaord/config/global.php,
jsboard/config/spma_list.php,
}}}

 에 대한 group 소유권을 nobody 로 지정해 달라고 해야 한다 (Debian 사용자 라면 www-data로 해야 할것이고 다른 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가 되어야 한다. RH 7.x 의 경우에는 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로 해야한다.

 위의 두 script file은 간단하게 mv, chown, chmod 등의 shell 명령어로 이루어져 있으니 file 을 편집기로 열어서 보면 어느 곳에 어떠한 소유권과 권한 으로 설정
file 들이 위치해야 하는지 쉽게 파악할수 있을 것이다.

 위의 명령을 실행을 하면 설정 file들이 각각의 위치로 자리를 잡게 된다.

== JSBoard 설정 ==

jsboard/config/ 로 이동을 하여 global.php 에서 DB의 정보와 몇가지 기본정보들을 수정을 한다. global.php 의 설정에 대해서는 README.CONFIG 파일에서 자세
하게 설명을 한다.

{{{#!vim php
############################################################################
#  DATABASE Configuration
############################################################################
$db[server] = ":/var/lib/mysql/mysql.sock"; # DB address
$db[user]   = "";               # DB login user
$db[pass]   = "";               # DB login pass
$db[name]   = "";               # DB name
}}}

위의 부분을 적절하게 수정을해 주면 된다. DB 서버가 외부에 존재를 할 경우에는 ":/var/lib/mysql/mysql.sock" 부분을 DB 서버의 ip address 로 대체를 하면 될것
이다. 그리고 mysql을 source compile한 사람들도 mysql.sock file의 경로를 적당히 수정해 주면 된다.

socket file 의 경로는 '''''mysql_config --socket''''' 으로 알수가 있다.

{{{#!vim php
##############################################################################
#  BASIC Configuration
##############################################################################
.........

# web path of installed jsboard
$board[path]     = "http://domain.com/jsboard/";
}}}

$board[path] 의 값은 jsboard가 설치 되어 있는 웹 경로를 지정해 주면 된다. 제일 마지막은 / 로 막혀 있어야 한다.

{{{#!vim php
##############################################################################
#  login mode Configuration
##############################################################################
# login variation name (This value must be modified as security problem)
$jsboard         = "login";
}}}

이 값은 jsboard의 login 변수명을 지정한다. 보안상 다른 값으로 변경해 주는 것이 좋다. 임의의 알파벳으로 된 한단어 또는 무작위 단어를 지정하면 된다.

{{{#!vim php
# Don't touch this line.
$jsboard         = "jsboard".$jsboard;
}}}

이 값은 건드리지 않도록 한다. 이 값은 위에서 지정한값이 다른변수와 충돌이 될까봐 방지하기 위한 값이다.

{{{#!vim php
# location of default page after login
$print[dpage] = "http://domain.com/jsboard/list.php?table=test";
}}}

이 값은 로그인 후에 위치할 페이지를 지정하도록 한다.

{{{#!vim php
##############################################################################
#  Theme Configuration
##############################################################################
# Theme Name
$print[theme]    = "@@THEME@@";
}}}

이 값은 영문 페이지로 운영하려면 EN-default 를 지정하고 한글 페이지로 운영하려면 KO-default 로 지정을 하도록 한다.

이상의 값들은 기본적으로 수정이 되어 져야 운영이 가능하다. 그 외에는 JSBoard의 README.OPERATE 에 관한 문서를 읽어 보도록 한다.

== JSBoard 전체 관리자 패스워드 변경 ==

JSBoard 에는 관리자 기능이 존재를 한다. 설치가 완료 되었다면 이제 웹브라우져에서 접속을 해 보도록 한다. 우선 전체 설정부터 살펴 보도록 한다. 

{{{
http://domain.com/jsboard/login.php?type=admin
}}}

위의 URL으로 접속을 하도록 한다. JSBoard의 관리자의 기본 ID 와 패스워드는 초기값으로는 '''''admin''''' 과 '''''0000''''' 으로 되어 있으니 이 ID 와 패스워드로 접속을 하도록 한다. 가끔 이렇게 접근을 할 경우 IE 의 경우

{{{
http://domain.com/jsboard/admin/admin.php 인터넷 사이트를 열 수 없습니다. 지정된 파일을 찾을 수 없습니다.
}}}

라는 메세지를 보이면 접근이 안될때가 있다. 이 경우는 당황하지 말고 리로드를 하면 접근이 가능하다. 이 문제가 필자의 PC의 문제인지 IE 의 문제 인지는 아직 밝혀
진 바가 없다. 

OOPS Administration Center v4.0 에서 달라진 기능은 일단 종전에 JSBoard 에 비해 사용자 관리 툴이 추가 되어졌다. 이는 JSBoard 2.0 버젼 부터 지원하는 login 기능을 지원하기 위해서 이다. 사용자 관리기능으로 들어가서 일단 admin 의 패스워드를 변경하도록 한다. 유저관리 기능에서는 이름, email, url, password 만 변경이 가능하다. id 의 경우에는 db 에서 직접 변경을 해야한다. 또한 전체관리자는 삭제가 불가능 하다.

== JSBoard 보안 ==

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

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

각 jsboard 에서 사용하는 data 디렉토리에서는 php 가 구동이 되지 않도록 해 주도록 한다.

{{{#!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 .sh .pl .html .htm .shtml .vbs .ins'''''의 확장자를 가지고 있으면 source를 출력하라는 의미이며 주의 할것은 여기에 패스워드 같은 것이 들어가 있는 source를 올려 놓으면 안된다는 주의해야 한다. 위 의 경로는 게시판 디렉토리 이름을 어떻게 하느냐에 따라 수정을 해 줘야 한다.

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

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

== Bug report ==

버그를 발견할 경우 http://kldp.net/projects/jsboard/bugs 에 리포팅을 해 주면 감사하겠다.
@


1.2
log
@211.37.104.183;;oops 김정균 ;;
@
text
@d343 4
@


1.1
log
@211.37.104.183;;oops 김정균 ;;
@
text
@d315 28
@
