이 글은 앞서 포스팅한 'CENTOS7 APM 설치' 시리즈에서 설치한 환경에서는 정확히 동작합니다.
또한 앞서 포스팅한 3개의 글을 참고하시는게 도움이됩니다.
사용중인버전
centos 7 | apache | mysql | php | openssl |
1810 | 2.4.38 | 8.0.15 | 7.3.3 | 1.1.1b |
??? : php7에 mysql8에다가 그누5를 설치하신다구요~~?
제맘입니다 ㅎ
그누보드5는 php5용 프레임워크입니다. 작게는 게시판, 크게는 프레임워크 자체를 사이트에서 사용합니다.
꽤 보편적인 프레임워크이지요.
여기서 그누보드5를 다운받으실 수 있습니다.
저는 그누보드5 설치에 앞서서
여기서 저는 유저goat를 이용할것이며 /home/goat/public_html/gnuboard 에서 사용할 예정입니다.
DNS셋팅에서 gnu.goatasriel.com 도메인을 활성화 시켰으며
apache vhost에서 gnu.goatasriel.com이 /home/goat/public_html/gnuboard 로 프록시 할 수 있게 셋팅하였습니다.
mysql에서 goat계정을 만들고 gnu_goat라는 데이터베이스를 만들고 그에대한모든권한을 goat계정에 할당했습니다.
마지막으로 httpd, mysqld, named의 서비스를 활성화 시켰습니다.
이에 대해선 자세히 포스팅 하지않을예정입니다.
(제가 앞서 쓴글에서 참고가능하며, 모두가 다 환경도 다르니...)
우선 작업을 진행할 디렉토리로 이동합니다.
$ cd /home/goat/public_html/gnuboard
다운로드한 그누보드5를 ftp나 wget등등으로 옮깁니다.(전ftp로 옮겼습니다.)
다운받은 압축파일을 풉니다.
$ tar -xvzf gnuboard5.3.2.8.tar.gz
웹브라우저에서 gnu.goatasriel.com으로 접속을 합니다.
여기서 그누보드5를 설치하기를 누르면 좋겠지만
아시다 싶이 php7에 mysql8..
특히 문제되는게 mysql8에서 설치를 시도하는것이기 때문에 그누5가 당연히 있다고 생각하고 설계된 PASSWORD함수를 사용할 수 없습니다.
PASSWORD함수를 대체할것을 찾고 그것에 맞게 수정해야합니다.
※ 저도 이게 정답인진 모르겠습니다.
암호화알고리즘은 https://offbyone.tistory.com/347 를 참고하였습니다.
저는 아래의 4개의 파일을 수정할 것입니다.
lib/common.lib.php
bbs/login_check.php
bbs/register_from_update.php
install/install_db.php
common파일은 순수해야한다는 분들은 입맛에 맞게 수정하셔도됩니다.
$ vi lib/common.lib.php
//순백염소수정
function sql_password($value)
{
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
//$row = sql_fetch(" select password('$value') as pass ");
$row = sql_fetch(" select md5('$value') as pass ");
return $row['pass'];
}
//순백염소끝
1557번 라인부터입니다
기존 password함수를 md5함수로 변경합니다.
비회원비밀번호등에 쓰이게 될것입니다.
// 순백염소수정
// openssl_encrypt 함수를 이용한 문자열 암호화
function get_opensslEncrypt_string($plainText)
{
// 256 bit 키를 만들기 위해서 비밀번호를 해시해서 첫 32바이트를 사용합니다.
$hash = substr(hash('sha256', $plainText, true), 0, 32);
// Initial Vector(IV)는 128 bit(16 byte)입니다.
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
// 암호화
$encrypted = base64_encode(openssl_encrypt($plainText, 'aes-256-cbc', $hash, OPENSSL_RAW_DATA, $iv));
return $encrypted;
}
// openssl_decrypt 함수를 이용한 문자열 복호화
function check_password_openssl($pass, $plainText)
{
$hash = substr(hash('sha256', $pass, true), 0, 32);
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
$decrypted = openssl_decrypt(base64_decode($plainText), 'aes-256-cbc', $hash, OPENSSL_RAW_DATA, $iv);
return ($pass===$decrypted);
}
// 순백염소
함수2개를 추가합니다. 참고로 저는 3053번 라인에 추가작성했습니다.
회원로그인, 회원가입등에 사용될 것입니다.
$ vi bbs/login_check.php
//소셜 로그인이 맞다면 패스워드를 체크하지 않습니다.
// 가입된 회원이 아니다. 비밀번호가 틀리다. 라는 메세지를 따로 보여주지 않는 이유는
// 회원아이디를 입력해 보고 맞으면 또 비밀번호를 입력해보는 경우를 방지하기 위해서입니다.
// 불법사용자의 경우 회원아이디가 틀린지, 비밀번호가 틀린지를 알기까지는 많은 시간이 소요되기 때문입니다.
if (!$is_social_password_check && (!$mb['mb_id'] || !check_password_openssl($mb_password, $mb['mb_password'])) ) { //순백염소 수정 (if (!$is_social_password_check && (!$mb['mb_id'] || !check_password($mb_password, $mb['mb_password'])) ) {)
alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
}
28번 라인부터입니다.
기존에 check_password 함수를 check_password_openssl 함수로 변경합니다.
$ vi bbs/register_from_update.php
//순백염소수정(mb_password = '".get_encrypt_string($mb_password)."')
if ($w == '') {
$sql = " insert into {$g5['member_table']}
set mb_id = '{$mb_id}',
mb_password = '".get_opensslEncrypt_string($mb_password)."',
mb_name = '{$mb_name}',
mb_nick = '{$mb_nick}',
mb_nick_date = '".G5_TIME_YMD."',
mb_email = '{$mb_email}',
mb_homepage = '{$mb_homepage}',
mb_tel = '{$mb_tel}',
mb_zip1 = '{$mb_zip1}',
mb_zip2 = '{$mb_zip2}',
mb_addr1 = '{$mb_addr1}',
mb_addr2 = '{$mb_addr2}',
mb_addr3 = '{$mb_addr3}',
mb_addr_jibeon = '{$mb_addr_jibeon}',
mb_signature = '{$mb_signature}',
mb_profile = '{$mb_profile}',
mb_today_login = '".G5_TIME_YMDHIS."',
mb_datetime = '".G5_TIME_YMDHIS."',
mb_ip = '{$_SERVER['REMOTE_ADDR']}',
mb_level = '{$config['cf_register_level']}',
mb_recommend = '{$mb_recommend}',
mb_login_ip = '{$_SERVER['REMOTE_ADDR']}',
mb_mailling = '{$mb_mailling}',
mb_sms = '{$mb_sms}',
mb_open = '{$mb_open}',
mb_open_date = '".G5_TIME_YMD."',
mb_1 = '{$mb_1}',
mb_2 = '{$mb_2}',
mb_3 = '{$mb_3}',
mb_4 = '{$mb_4}',
mb_5 = '{$mb_5}',
mb_6 = '{$mb_6}',
mb_7 = '{$mb_7}',
mb_8 = '{$mb_8}',
mb_9 = '{$mb_9}',
mb_10 = '{$mb_10}'
{$sql_certify} ";
//순백염소끝
200번 라인부터입니다.
sql 구문에서 mb_password 부분이 변경되었습니다. (위 주석에 기존에 쓰였던 함수가있으니 참고)
$ vi install/install_db.php
// 관리자 회원가입
//순백염소수정 (mb_password = PASSWORD('$admin_pass'),)
$sql = " insert into `{$table_prefix}member`
set mb_id = '$admin_id',
mb_password = '".get_opensslEncrypt_string($admin_pass)."',
mb_name = '$admin_name',
mb_nick = '$admin_name',
mb_email = '$admin_email',
mb_level = '10',
mb_mailling = '1',
mb_open = '1',
mb_email_certify = '".G5_TIME_YMDHIS."',
mb_datetime = '".G5_TIME_YMDHIS."',
mb_ip = '{$_SERVER['REMOTE_ADDR']}'
";
sql_query($sql, true, $dblink);
//순백염소끝
176번 라인부터입니다.
sql 구문에서 mb_password 부분이 변경되었습니다. (위 주석에 기존에 쓰였던 함수가있으니 참고)
제가 암호화쪽은 잼병이라 이 방법이 기존의 암호보다 더 강한지 약한지 잘모르겠네요;
이 부분은 여러분이 연습하면서 다른글도 참고해보면서 새로운것을 첨가해보면서 발전하는게 좋을것 같습니다.
모든게 수정이 완료가 됬다면 웹페이지 새로고침 한번해주시고
대망의 '그누보드 설치하기' 버튼을 누르시길 바랍니다.
설명대로 진행합니다.
$ mkdir data
$ chmod 707 data/
브라우저 새로고침
host는 mysql이 서비스되고있는 서버의 ip주소를
(httpd와 mysqld가 같은ip에서 서비스를 한다면 localhost 혹은 127.0.0.1로 설정하시면됩니다.)
user는 mysql에서 사용될 유저
password 는 그 mysql 유저의 패스워드
db는 mysql에 할당할 db(비어있는 db를 권장합니다) 입니다.
테이블명 접두사는 가능한 변경하지 말라니까 변경하지 않고 그대로둡니다.
아래의 최고관리자정보입력은 웹내에서 사용할 관리자의 아이디와 패스워드를 요구하는거니 편한걸 기입하세요.
다 작성했으면 다음을 누릅니다.
사실 오류를 겪는게 더 좋긴한데,,, 그래야 공부되죠 ㅎ
저는 이까지오는데 엄청 오류가 많았습니다...password함수 오류고친다고말이죠 ..
다행이 로그인을 성공하는군요.
일반회원 회원가입후 로그인 정상적으로 되는것 확인
글작성확인 글수정확인 글삭제확인
jpg png gif 사진 업로드확인
비회원수정확....... 실패 md5 구문 추가하고 비회원에서도 글수정확인(그와중에 실패를 맛본..)
후 다 끝난것 같습니다.
'IT, Computer > Linux' 카테고리의 다른 글
CentOS7 firewall를 이용해 특정국가 ip차단 (1) | 2019.03.31 |
---|---|
mysql8 유저 생성 (1) | 2019.03.29 |
아파치 홈 디렉토리 설정 및 가상호스트설정 (0) | 2019.03.28 |
DNS 서버만들기 (0) | 2019.03.27 |
CentOS 7 APM 설치 - php7.3.3 설치(컴파일설치) (1) | 2019.03.26 |