-
Notifications
You must be signed in to change notification settings - Fork 0
Installation Installer
##1. 주의 사항
- 이 문서는 JSBoard 2.0.x 버전을 설치 하기 위한 문서이다.
- PHP 4.1.0 이상 버전이 필요하다.
- Account User(Root 권한이 없을 경우) 권한으로 Installer를 사용하여 설치할 경우 다음의 조건이 선행 되어야 함
- MySQL database가 미리 생성 되어 있어야 함.
- 생성되어 있는 database에 대한 MySQL user와 암호가 미리 설정이 되어 있어야 함
##2. 사용 환경
- Apache 1.3.23 이상
- MySQL 3.23.32 이상
- PHP 4.1.0 이상
- PHP Build Option
[root@host ~]$ ./configure ... \
--disable-debug \
--with-regex=php \
--with-mod_charset \
--with-mysqli=shared \
--enable-inline-optimization \
--enable-magic-quotes \
--enable-track-vars \
##3. 체크 사항
- PHP mysqli function test
- check.php라는 파일을 다음의 내용으로 생성한다.
<?php
if ( function_exists ('mysqli_connect') ) echo "Yes\n";
else echo "No\n";
?>
- 만든 문서를 웹에서 호출을 했을 경우, No가 출력이 되면 PHP 에서 MySQLi extension을 지원하지 않는 것이다. PHP 가 MySQL을 지원하도록 빌드가 되었는지 확인을 하도록 한다.
- Web server의 Directory Index 확인
- Apache의 경우 설정 파일에서 DirectoryIndex 지시자에 index.php가 등록이 되어 있는지 확인을 한다.
- Shell 환경 확인
- SunOS나 Solaris의 경우 설치 전 INSTALLER/script에 존재하는 script의 첫 라인 '''#!/bin/sh'''를 다음과 같이 수정을 한다.
#!/bin/ksh
PATH=/usr/ucb:/usr/xpg4/bin:/usr/bin:/usr/sbin
##4. JSBoard 설치
일단 설정 파일들을 위치 시키고 그 파일들의 퍼미션을 조정하도록 한다. jsboard/INSTALLER/script 에서 아래의 명령을 실행 한다. 실행이 되지 않으면 퍼미션 을 755로 수정하기 바란다.
[root@host script]$ ./preinstall
########################################################
# JSBoard Pre 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 입력
아파치가 nobody 의 권한으로 작동하고 있는듯 싶습니다.
맞습니까? (이 값은 httpd.conf 의 Group 지시자에 설정되어
있는 값과 일치해야 합니다. [Y/N](default Y) : Y # Enter 입력
위에서 아파치 그룹권한이 맞는지 확인을 해야 한다. 이 값은 httpd.conf 의 GROUP 지시자의 값과 동일해야 한다. 같으면 y 를 틀리면 n 을 선택 하도록 한다. n 을 선택하면 다음의 과정을 거친다.
httpd.conf 의 Group 지시자의 값을 적어 주십시오 : apache
작업이 완료 되었습니다. 브라우져로 jsboard/INSTALLER/ 로 접속하여
설치를 계속 하시기 바랍니다.
[root@host script]$
RH 7.x부터는 httpd.conf 의 GROUP 값이 nobody 에서 apache 로 변경이 되었다. 그러므로 RH 7.x 를 사용하는 경우에는 위의 과정을 거쳐야 제대로 운영이 된다. 계정 유저의 경우에는 약간 다르게 나오는데, 나오는 메세지대로 따라서 하면 된다. 그리고 다시 jsboard/INSTALLER/include/passwd.php 를 편집한다.
<?php
######################################################
# MySQL root 의 권한 소지 여부
# MySQL root 의 패스워드를 알면 1, 모르면 0
#
# 만약 MySQL 패스워드를 몰라 0 으로 설정을 하려면 MySQL
# root 의 권한을 가지고 있는 사람이 database 를 생성하고
# 유저 등록과 패스워드를 등록해 준 후에 INSTALLER 를 사용
# 할 수 있음. 이 값들은 아래에 등록해 줘야 함.
#
$mysqlroot = 1;
# Specify MySQL Root Password
# mysql을 관리할 root의 password 를 지정
# 위에서 $mysqlroot 의 값을 0 으로 지정했을 경우에는 MySQL
# root 가 알려준 mysql 계정 패스워드를 지정함.
#
$passwd = "MySQL_ROOT_PASSWORD";
# $mysqlroot = 0 일 경우에는 아래를 설정함
#
# mysql root 가 생성해준 database name 을 지정
$mysqldatabasename = "";
# mysql root 가 생성해준 database user name 을 지정
$mysqlusername = "";
# apache의 설정파일(httpd.conf)의 경로를 지정
# redhat rpm package의 경우 /etc/httpd/conf/httpd.conf
# debian package의 경우 /etc/apache/httpd.conf
# 수동으로 설치했을 경우 /usr/local/apache/etc/httpd.conf
# 에 위치하는 경우가 많음.
#
$apache_config_file = "/etc/httpd/conf/httpd.conf";
# MySQL의 socket file 위치를 지정. socket file이 무엇인지
# 모르겠으면 localhost 나 127.0.0.1 을 적도록 한다. DB 서
# 버가 외부에 있을 경우에는 해당 DB서버의 ip address나 도
# 메인 이름을 적어주도록 하며, 이 경우에는 DB서버의 mysql
# 에서 설정한 접근 권한으로 설정을 하여야 한다. 즉
# mysql -u USER_NAME -p DB_NAME -h DB_address
# 로 쉘에서 접근이 가능해야 한다.
#
# socket file의 위치를 알고 싶다면 mysql_config --socket
# 명령으로 알수가 있다.
#
$mysql_sock = ":/var/lib/mysql/mysql.sock";
######################################################
?>
위는 passwd.php 의 내용이며, MySQL_ROOT_PASSWORD 부분에 MySQL 의 root password 를 넣어 준다.
계정 유저 즉 MySQL 의 root 패스워드를 모르고 시스템 root 의 권한이 없을경우에는 위의 메세지를 잘 읽으면서 적는다.
그리고 그 아래에는 apache web server의 설정 파일인 httpd.conf가 있는 경로를 적어 주도록 한다. 만약 DirectoryIndex 지시자를 srm.conf 에서 지정을 하는 유저들은 srm.conf의 위치를 지정하기 바란다.
마지막으로 mysql의 sockfile 경로를 지정해 준다. DB 서버가 외부에 있을 경우에는 DB서버의 IP 주소를 지정해 주면 되며, 동일한 서버에 존재할 경우에는 127.0.0.1을 지정하도록 한다.
다음 웹 브라우져로 http://domain.com/jsboard/INSTALLER/ 로 접근을 한다.
------------------------------------------------------
JSBoard Installer
------------------------------------------------------
[ ] Korean [ ] English
------------------------------------------------------
[submit]
------------------------------------------------------
과 같은 화면을 볼수 있을 것이다. 여기서 언어를 선택하도록 한다. 현재는 국문과 영문만을 지원한다. 선택하고 submit 을 click 하도록 한다.
------------------------------------------------------
JSBoard License
------------------------------------------------------
주절주절주절주절 ...........................................
주절주절주절주절 ...........................................
주절주절주절주절 ...........................................
------------------------------------------------------
[AGREE]
------------------------------------------------------
언어를 선택하고 나면 위의 JSBoard를 사용하기 위한 License가 나온다. 읽어보고 동의를 하면 AGREE를 click 한다.
------------------------------------------------------
JSBoard Environment Check
------------------------------------------------------
Jsboard를 사용하기 위한 환경 설정을 검사하고 있습니다
5초 후에 결과를 보실수 있습니다
만약 Linux용 Browser를 사용하신다면 다음 페이지로
자동으로 넘어가지 않을수도 있습니다.
이때에는 INATALL.MANUALY 문서를 참조하셔서 설치를 하십시오
------------------------------------------------------
[ 5초간 기다려 주세요 ]
------------------------------------------------------
새로이 추가된 부분이다. 이 부분에서는 특별히 할것없이 5초간 기다리기만 하면 된다. 이 부분에서 OS Type, MySQL 연동 체크, exec() 함수 사용여부, httpd.conf의 index file 설정 여부, jsbaord 를 사용하기 위한 권한설정 여부를 체크를 한다.
<!> 주의 할것은 이 부분은 meta tag 로 체크후에 결과 페이지로 넘어 가게 되어 있는데 Linux용 Netscape 4.x 는 Meta tag 가 제대로 작동을 하지 못하는 경우가 많다. 이런 경우에는 windows 에서 install program을 다시 실행 하던지 또는 수동 설치 문서를 참조해서 수동으로 설치를 하기 바란다.
------------------------------------------------------
JSBoard Enviornment Check Reuslt
------------------------------------------------------
OS Type : RedHat
MySQL check : Failed
MySQL login에 실패를 했습니다. jsboard/INSTALLER/include/passwd.php 에
MySQL의 root password가 정확한지 확인해 주시고 맞으면 PHP의 설치시에
--with-mysqli 옵션이 들어갔는지 확인해 주십시오
만약 DB server가 독립되어 있다면 INSTALL.MANUALY 문서를 참조하여 설치
를 하시기 바랍니다
index file check : OK
이 부분에서 제대로 설정이 되어 있을 경우에도 에러를 계속 뿌리는 경우가
존재한다. 이럴때에는 httpd.conf의 DirectoryIndex 지시자의 앞에 공백 문
자가 있는지 살펴 보고 만약 공백 문자가 있으면 이를 삭제해 주면 된다.
Permission check : OK
------------------------------------------------------
------------------------------------------------------
위의 화면은 환경체크 결과를 보여준다. 위에서는 에러가 하나 뜬것을 보여 주고 있는데 위의 결과가 모두 OK이면 다음 화면으로 넘어가고 위와 같이 에러가 발생하면 다시 처음 화면으로 가게 된다. 에러가 발생할 경우에 위와같이 점검 할 사항들을 제시해 준다.
혹시 위와 같이 MySQL login failed error 가 발생하면 임의의 php file 을 다음과 같은 내용으로 만들고 테스트를 해 보기 바란다.
>
>위와같이 만들어서 실행을 했을경우 OK가 떨어져야지만 된다. 아마 Installer 에서 failed가 나온다면 이것 역시 failed가 나오게 될것이다.
JSBoard Installer
MySQL password
[ ]
Password 초기화 [reset]
>이 화면에서 MySQL의 root password 를 넣고선 엔터를 누른다. 아래의 Password 초기화의 ***reset*** 을 클릭하면 session 에 있는 기존의 password 를 지워버리는 역할을 한다. 계정 유저는 MySQL root password 대신 system 관리자가 생성해준 db 로그인 패스워드를 넣으면 된다.
JSBoard Installer
DB value Admin value
-------------------------------------------------
DB name [ ] ID [ ]
DB user [ ] NAME [ ]
DB pass [ ] EMAIL [ ]
[ E N T E R ]
>JSBoard 가 사용할 DB 정보들을 입력한다. 주의 할 것은 아래에 적어 놓았듯이 MySQL에 존재하지 않는 새로운 DB name, DB user를 기입해야 한다.
>
>Admin value 는 2.0 부터 추가되는 인증 모듈을 위해 설정을 해 주도록 한다. 여기서 지정하는 id, name, email 은 jsboard 2.0 의 전체 관리자 정보를 부여 하는 것이다.
>
>계정 유저의 경우에는 DB value 쪽은 수정을 못하게 고정이 된다.
>
>그리고 Enter 를 click하면, 별다른 에러가 없다면 다음과 같은 경고창이 뜨면서 로그인 페이지로 가게 될것이다.
등록이 완료 되었습니다.
Admin Page로 이동을 합니다.
Admin User의 초기 Password는
0000 입니다.
##5. JSBoard 운영
설치가 완료 되었다면 브라우져는 로그인 창으로 이동을 하게 된다. 여기서 User에는 아까 Admin value 에 지정해 주었던 id 를 적어주고, Password 에는 '0000'을 넣어주도록 한다.
로그인 후에 간혹가다가 IE의 경우 다음과 같은 메세지를 보내는 경우가 있다.
<!> "http://domain.com/jsboard/admin/admin.php 인터넷 사이트를 열 수 없습니다. 지정된 파일을 찾을 수 없습니다."
이 메세지를 만나더라도 당황하지 말고 확인을 누른 후에 F5 또는 reload 를 해주면 admin page 에 접속이 된다. 이 에러 메세지는 관리자의 패스워드를 0000에서 변경을 하고 나면 다시는 나지 않는다.
일단 admin 에 로그인을 한 후에 제일 먼저 할 것은 "유저 관리" 버튼을 누르고 admin user 의 password 를 0000 에서 다른 것으로 바꾸어 주도록 한다. 패스워드를 변경한 후에는 로그아웃을 한 후에 다시 로그인을 하도록 한다.
어드민 페이지는 http://domain.com/jsboard/admin/ 으로 접근을 할수가 있다. 패스워드 변경후 다시 로그인을 하였으면 "전역변수 설정" 을 클릭하여 다음의 정보를 변경해 줘야 한다.
```php
# login variation name (This value must be modified as security problem)
$jsboard = "login";
이 값은 로그인 변수명을 변경한다. 즉 보안 위험 요소가 발생할지라도 이 값이 다르면 접근이 어렵게 된다. 기본값으로 나두지 말고 꼭 변경하도록 한다.
# location of default page after login
$print[dpage] = "http://domain.com/jsboard/list.php?table=test";
이 값은 login 을 한 후에 기본으로 갈 위치를 지정을 하도록 한다. 이 부분은 login 창 설명을 하는 README.OPERATE 문서에서 따로 다루도록 할 것이다.
# web path of installed jsboard
$board[path] = "http://domain.com/jsboard/";
이 값은 jsboard 가 설치 되어 있는 웹 경로를 지정한다. 메일 기능을 사용할 때 게시판 위치를 링크시키기 위해 사용이 되며, 또한 글 등록을 할때 referrer 를 체크하여, 게시판에 스팸을 올리는 프로그램들이 접근하는 것을 방지하게 된다. 경로의 가장 마지막은 / 로 막혀 있어야 한다.
#################################################
# If registed article as follow information, requried passwd of super user
#################################################
$compare[name] = "쥔장";
$compare[email] = "[email protected]";
이 설정은 전체 관리자의 패스워드로만 이름과 email 을 등록할수 있도록 제한을 하는 기능이다. 관심이 있으면 설정을 하도록 한다.
일단은 기본적으로 이정도만 설정을 하면 전체적인 운영에 별 지장은 없다. 각각 게시판에 대한 설명은 README.OPERATE에 관한 문서를 참조하도록 한다.
##6. JSBoard 보안
보통 CGI 방식을 통한 upload 에 관련하여 보안문제가 많이 발생을 하고 있다. 하지만 단순히 CGI 의 코드만 의존하여 보안문제를 방지 한다는 것은 무리라고 생각이 되어 apache의 설정 file 에서 원천적으로 업로드 file 에 대해서 실행이 되지 않도록 하는 설정을 적용 시켜 보았다. 현재 필자의 개인 서버와 kldp server에서 적용이 되어 있으며 특히 호스팅서버와 같이 여러 계정들이 사용을 하는 경우에 JSBoard 를 사용할수도 있기 때문에 이 셋팅을 해 놓는 것을 권장한다.
설정은 다음과 같이 할수 있다.
<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 의 password 를 가지고 있는 file을 보호하기 위한 것을 설명한다. 즉 다른 유저가 db 의 패스워드를 볼수 없도록 하기 위한 것으로 이 부분은 root(서버 관리자) 가 해 주어야 할 부분이다. 만약 이것이 불가능 하다면 이 파일들의 권한을 606 으로 그냥 두면 된다. 즉,
- jsbaord/config/global.php,
- jsboard/config/spma_list.php,
에 대한 group 소유권을 nobody 로 지정해 달라고 해야 한다 (Debian 사용자 라면 www-data 로 해야 할 것이고, RH 7.x 의 경우에는 apache 이다. 다른 OS는 모르겠다. httpd.conf 의 Group 지시자에 설정되어 있는 값을 확인을 해서 해 달라고 한다) 즉
[root@host jsboard]$ # root가 실행해야 하는 명령
[root@host jsboard]$ chgrp nobody config/global.php
[root@host jsboard]$ # root가 실행해야 하는 명령
[root@host jsboard]$ chgrp nobody config/spam_list.txt
명령을 실행해 달라고 해야 한다. 이를 시행하면 아래와 같이 소유권을 가지게 된다. 이것은 account 를 실행한 후에 행할 일들이다. (Debian의 경우에는 nobody가 아니라 www-data가 되어야 한다. RH 7.x 의 경우에는 apache 이다.)
-rw-rw---- accountname nobody config/global.php
-rw-rw---- accountname nobody config/spam_list.txt
만약 root 가 이를 응하지 않거나 또는 불성실한 root 라면 다음과 같이
[root@host jsboard]$ chmod 606 config/global.php
[root@host jsboard]$ chmod 606 config/spam_list.txt
을 실행하고, 퍼미션은 다음과 같이 된다.
-rw----rw- accountname accountname config/global.php
-rw----rw- accountname accountname config/spam_list.txt
하지만 이렇게 했을 경우 운영은 가능하나 보안상 좋지는 않다. 그리고 주의 할것은 account user 의 권한으로 설치 시에는 보안의 문제성이 대두 될수 있으니 home directory의 권한을 꼭 711로 해야한다.
##7. Bug report
버그를 발견할 경우 https://github.com/Joungkyun/JSBoard/issues 에 리포팅을 해 주면 감사하겠다.