[MySQL] Slave_IO_Running: Connecting 조치 방법

리눅스/MySQL|2022. 5. 11. 11:47
반응형

Replication 을 구성하다보면 동기화가 되지 않은 상태에서 아래와 같은 메세지를 만날 수 있습니다.

 

(slave 서버에서)

mysql> show slave status\G

...

Slave_IO_Running: Connecting

Slave_SQL_Running: Yes

...

 

[점검1]

이 경우 slave 서버에서 master 서버로 접근 되는지 확인해 봐야 합니다.

 

(slave 서버에서)

# mysql -u replica -p -h 192.168.10.2

Enter password: 
ERROR 1129 (HY000): Host '192.168.10.2' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

 

위와 같이 출력 된 경우 조치 방법은 아래와 같습니다.

 

(master 서버에서)

mysql> flush hosts;

 

이후 다시 동기화를 하면 정상 구동되는것을 확인 할 수 있습니다.

 

[점검2]

서버 방화벽 등에서 slave 서버가 master 서버의 mysql 로 접근이 될 수 있도록 허용 합니다.

- 방화벽 (ufw, iptables 등)

- tcp wrapper (/etc/hosts.allow)

- mysql 리플리케이션 계정 접근 권한 (mysql.user 테이블 확인)

 

[점검3]

간혹 인터넷 예제를 따라 리플리케이션 설정을 했을때 slave 서버의 쿼리에서 아래 값을 안바꾸고 복사해서 실행한 경우가 있습니다.

확인해보세요.

mysql> change master to master_host='192.168.10.2', master_user='repl',master_password='12345678', master_log_file='binlog.000004',master_log_pos=156; 

 

 

반응형

댓글()

Zabbix API 예제

리눅스/OS 일반|2022. 4. 22. 15:59
반응형

[ PHP 코드 ]

아래 샘플 코드를 이용해 토큰을 출력해 봅니다.

<?php
$curl = curl_init() ;

curl_setopt ( $curl , CURLOPT_URL , 'http://sysdocu.tistory.com/api_jsonrpc.php' ) ;
curl_setopt ( $curl , CURLOPT_TIMEOUT , 10 ) ;
curl_setopt ( $curl , CURLOPT_POST , 1 ) ;
curl_setopt ( $curl , CURLOPT_RETURNTRANSFER , 1 ) ;
curl_setopt ( $curl , CURLOPT_SSL_VERIFYPEER , FALSE ) ;
curl_setopt ( $curl , CURLOPT_HTTPHEADER , array ( 'Content-Type: application/json'  ) ) ;
curl_setopt ( $curl , CURLOPT_POSTFIELDS , '{"jsonrpc":"2.0" , "method":"user.login" , "params":{"user":"Admin", "password":"12345678"} , "auth":null, "id":1}' ) ;

$result = curl_exec ( $curl ) ;
$err = curl_error ( $curl ) ;

curl_close ( $curl ) ;

if ( $err )
  echo 'Error :' . $err ;
else
  echo $result;


$data = json_decode($result, true);
$token = $data['result'];
echo $token
?>


[ BASH 코드 ]

#!/bin/bash

TOKEN=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{ "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "12345678" }, "id":1 }' 'http://sysdocu.tistory.com/api_jsonrpc.php' |sed -e "s/.*\"result\":\"//;s/\".*//"`

echo -e "TOKEN : $TOKEN\n"

 

[ API 종류 ]

더 자세한 API 종류 및 설명은 zabbix 공식 사이트를 참고해주세요.

아래는 curl 명령을 기준으로 작성하였습니다.

PHP 코드는 아래 코드와 맨 위 PHP 예제 파일을 참고해서 작성하면 됩니다.


1) 토큰 생성
Admin 계정으로 토큰을 생성해야 생성된 토큰으로 계정 추가, 삭제가 가능합니다.

(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0", 
"method": "user.login", 
"params": { 
    "user": "Admin", 
"password": "12345678" 
}, 
"id":1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'

 


(결과)
{
    "jsonrpc":"2.0",
"result":"c436f84f928956be8db12704db759376",
"id":1
}


2) 계정 생성
'${TOKEN}' 부분에 위에서 생성한 토큰이 들어갑니다.
usrgrpid 값 16은 임의로 만든 값입니다.

(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "user.create",
    "params": {
        "alias": "CDH",
        "passwd": "1234",
        "roleid": "1",
        "usrgrps": [
            {
                "usrgrpid": "16"
            }
        ],
        "medias": [
            {
                "mediatypeid": "16",
                "sendto": [
                    "123456789"
                ],
                "active": 0,
                "severity": 63,
                "period": "1-7,00:00-24:00"
            }
        ]
    },
    "auth": "'${TOKEN}'",
    "id": 2
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'

(결과)
{
  "jsonrpc": "2.0",
  "result": {
    "userids": [
      "20"
    ]
  },
  "id": 2
}


3) 계정 삭제
생성시 부여되었던 userids 값을 사용합니다.

(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "user.delete",
    "params": [
        "20"
    ],
        "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'

(결과)
{
  "jsonrpc": "2.0",
  "result": {
    "userids": [
      "20"
    ]
  },
  "id": 1
}


4) 유저 리스트
(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "user.get",
    "params": {
        "output": "extend"
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'


5) 그룹 리스트
(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "usergroup.get",
    "params": {
        "output": "extend",
        "status": 0
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'

 

아래는 쉘스크립트 코드 입니다. curl 형식은 동일합니다.


# 호스트 그룹 추가
HOSTGROUP_ADD=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "hostgroup.create",
    "params": {
        "name": "sysdocu"
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "호스트 그룹 생성 결과\n${HOSTGROUP_ADD}"


# 호스트 그룹 리스트 출력
HOSTGROUP_GET=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "output": "extend"
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "호스트 그룹 리스트 출력 결과\n${HOSTGROUP_GET}"


# 유저 그룹 추가
GROUP_ADD=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "usergroup.create",
    "params": {
        "name": "sysdocu",
        "rights": {
            "id": "37",       // 호스트 그룹 id
            "permission": 3   // 권한 (RW)
        }
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "그룹 생성 결과\n${GROUP_ADD}"


# 유저 그룹 삭제
GROUP_DEL=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "usergroup.delete",
    "params": [ "18" ],
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "그룹 삭제 결과\n${GROUP_DEL}"


# 호스트 그룹 삭제
HOSTGROUP_DEL=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "hostgroup.delete",
    "params": [ "32" ],
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "호스트 그룹 삭제 결과\n${HOSTGROUP_DEL}"


* 참고

roleid
1 : User role
2 : Admin role
3 : Super role
4 : Guest role

mediatypeid
1 : email
2 : x
3 : sms
4 : email
5 : Mattermost
6 : Opsgenie  
7 : PagerDuty
8 : Pushover
9 : Slack
10 : discord
11 : SIGNL4
12 : Jira
13 : Jira with CustomFields  
14 : MS Teams  
15 : Redmine
16 : Telegram

반응형

댓글()

[PHP] 여러개의 파일 읽기 (fopen multiple files in php)

리눅스/OS 일반|2022. 4. 19. 10:56
반응형

1. 특정 파일을 지정해서 읽을 경우 (array 배열에 파일명을 넣어줍니다)

<?PHP
$filenames = array("../logs/detect.log.1", "../logs/detect.log");
foreach ($filenames as $file) {
    $file_handle = fopen($file, "r");
    while (!feof($file_handle)) {
        $line = fgets($file_handle);
        echo $line;
    }
    fclose($file_handle);
}
?>

[출처] https://stackoverflow.com/questions/47992424/using-php-how-to-read-multiple-text-files-and-display-the-file-name

 

존재하는 파일만 읽고 싶은 경우, 파일이 있을때만 array 에 넣는 방법으로 해도 됩니다.

<?php
$filenames = array();

if (file_exists("../logs/detect.log.1")) {
    array_push($filenames, "../logs/detect.log.1");
}

if (file_exists("../logs/detect.log")) {
    array_push($filenames, "../logs/detect.log");
}

if (count($filenames) != "0") {  // 존재하는 파일이 한개라도 있을경우
    foreach ($filenames as $file) {
        $file_handle = fopen($file, "r");
        while (!feof($file_handle)) {
            $line = fgets($file_handle);
            echo $line;
        }
        fclose($file_handle);
    }
}
?>

 

2. 다수의 파일을 읽을 경우 ( * 과 같은 와일드 카드 문자를 이용합니다.)

<?php
foreach (glob("../logs/detect.log*") as $file) {
    $file_handle = fopen($file, "r");
    while (!feof($file_handle)) {
        $line = fgets($file_handle);
        echo $line;
    }
    fclose($file_handle);
}
?>

[출처] https://stackoverflow.com/questions/18558445/read-multiple-files-with-php-from-directory

 

반응형

댓글()

PHP 날짜 비교하기

프로그래밍/PHP|2022. 4. 13. 10:20
반응형

일반 변수에 들어있는 날짜 텍스트로는 비교가 안됩니다. 아래와 같이 strtotime 함수를 이용해 비교 가능하도록 해주세요.

아래는 사용 예제입니다.

 

<?PHP

// 하루 전 날짜

$yesterday_time = strtotime(date("Y-m-d H:i:s", strtotime("-1 day")));

 

// 임의의 날짜

$tmp_time = strtotime("2022-04-13 10:00:00");

 

// 비교하기

if ($yesterday_time <= $tmp_time) {

    echo "임의의 날짜가 더 나중입니다.";

} else {

    echo "하루 전 날짜가 더 나중입니다.";
}

?>

반응형

댓글()

오류: repo 'appstream'의 메타 데이터를 다운로드하지 못했습니다: Cannot prepare internal mirrorlist: No URLs in mirrorlist

리눅스/OS 일반|2022. 4. 12. 07:51
반응형

CentOS 8 에서 yum 실행시 출력된 에러 메세지 이며 해결은 다음과 같이 하였습니다.

# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*

# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*

 

그리고 충돌하는 패키지 변경을 위해 아래와 같은 옵션을 주며 update 를 하였습니다.

# yum update --allowerasing

 

이제 필요한 패키지 설치가 가능합니다.

 

[출처] https://stackoverflow.com/questions/70926799/centos-through-a-vm-no-urls-in-mirrorlist

반응형

댓글()

[PHP] AES-256-CBC 를 이용한 암호화 및 복호화

프로그래밍/PHP|2022. 4. 11. 08:49
반응형

[코드]

<?PHP
$str = "서버나라 개발왕자";    // 전달할 문자열
$key = "server&develop";    // 암호화, 복호화 하는 부분에서 동일한 키 사용

$en_key = base64_encode(openssl_encrypt($str, 'aes-256-cbc', $key, true, str_repeat(chr(0), 16)));
echo $en_key . "<br>";

$de_key = openssl_decrypt(base64_decode($en_key), 'aes-256-cbc', $key, true, str_repeat(chr(0), 16));
echo $de_key;
?>

 

 

[결과]

eIgTU/2u8qsWmnVorxdDYwdxRN3DMfK8PThERSmkN/I=
서버나라 개발왕자

 

반응형

댓글()

리눅스 PC (Ubuntu 24.04) 보안 설정

리눅스/OS 일반|2022. 4. 4. 10:50
반응형

[ 패스워드 복잡성 설정 ]

 

# apt-get -y install libpam-pwquality

 

# vi /etc/pam.d/common-password

 

// 25 번째 줄에 옵션 추가

        password    requisite                    pam_pwquality.so retry=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1

// 26 번째 줄에 옵션 추가

        password    [success=2 default=ignore]   pam_unix.so obscure use_authtok try_first_pass yescrypt sha512 minlen=6 maxlen=9

 


[ 계정 잠금 임계값 설정 ]

 

# vi /etc/pam.d/common-auth

 

// 24번째 줄에 아래 내용 추가

        auth    required                        pam_permit.so onerr=tail even_deny_root deny=10 unlock_time=300

 


[ 패스워드 최대 사용기간 설정 ]

 

# vi /etc/login.defs

 

        PASS_MAX_DAYS   90

        PASS_MIN_DAYS   0

        PASS_WARN_AGE   7

        PASS_MIN_LEN 8

 

현재 사용중인 계정은 위와 같은 룰이 적용되지 않기 때문에 아래와 같이 개별적으로 설정해 줍니다.

 

(패스워드 최대 사용일 : 90일)

# chage -M 90 root

# chage -M 90 sysdocu

 

(설정 확인)

# chage -l root

# chage -l sysdocu

 

 

[ 바이러스 스캔 툴 ]

 

# apt -y install clamav

# vi clamavscan.sh

#!/bin/bash

LOGDIR="/var/log/clamav"
LOGFILE="$LOGDIR/clamav-$(date +'%Y-%m-%d').log"
USER=$(who | awk '{print $1}')
DIRTOSCAN="/home/$USER"

if [ ! -d "$LOGDIR" ]; then
    mkdir -p "$LOGDIR"
fi

for S in ${DIRTOSCAN}; do
    DIRSIZE=$(du -sh "$S" 2>/dev/null | cut -f1)

    echo "Starting a daily scan of \"$S\" directory."
    echo "Amount of data to be scanned is \"$DIRSIZE\"."

    clamscan -ri "$S" >> "$LOGFILE"
done

exit 0

 

# chmod 700 clamavscan.sh

# echo "0 12 * * 1 root sh /root/clamavscan.sh" >> /etc/crontab

 

실시간 탐지를 위해 추가 세팅합니다.

# apt -y install clamav-daemon inotify-tools

# echo "fs.inotify.max_user_watches=524288"

# sysctl -p

# freshclam

# systemctl enable --now clamav-daemon

 

# wget http://www.rfxn.com/downloads/maldetect-current.tar.gz

# tar xvzf maldetect-current.tar.gz
# cd maldetect-1.6.5
# ./install.sh

 

감시를 시작합니다.

# maldet --monitor /home

 

 

[ 기타 설정 ]

 

PC 의 모든 포트에 접근 불가 설정을 합니다.

# echo "ALL : ALL" > /etc/hosts.deny

 

계정 파일 퍼미션을 조정합니다.
# chmod 0400 /etc/shadow
# chmod 0640 /etc/hosts.deny
# chmod 0640 /etc/hosts.allow

 

불필요한 데몬이 있는지 확인합니다.

# netstat -nltp

 

iptables 사무실 PC 셋팅용으로 적용합니다.

- 참고 : https://sysdocu.tistory.com/1486

 

패스워드를 한 번 더 적용합니다.

# echo "root:12345678" | chpasswd

# echo "sysdocu:12345678 | chpasswd

 

반응형

댓글()

[보안 설정] HTTP 불필요한 method 취약점 제거 (Disable HTTP Trace)

리눅스/APACHE|2022. 3. 31. 14:29
반응형

TRACE method 는 cross-site tracing, basic 인증 암호를 가로챌 수 있기 때문에 불필요하다고 판단 되므로 꼭 사용해야 하는 환경이 아닐 경우 제거하도록 합니다.

 

 

1. 확인

# curl -k -X TRACE http://localhost
TRACE / HTTP/1.1
User-Agent: curl/7.29.0
Host: localhost
Accept: */*

 

 

2. 조치

간단히 httpd.conf 에 아래 옵션을 추가하여 조치가 가능합니다.

 

# vi /usr/local/apache/conf/httpd.conf

TraceEnable off

 

# /usr/local/apache/bin/apachectl restart

 

 

3. 재확인

# curl -k -X TRACE http://localhost
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method TRACE is not allowed for this URL.</p>
</body></html>

 

 

[출처] https://www.youtube.com/watch?v=_zjMrdQoK8g

 

 

 

 

반응형

댓글()

CentOS 7 에서 OpenSSH 취약점 (취약한 알고리즘) 조치 방법

리눅스/OS 일반|2022. 3. 31. 12:21
반응형

[ 취약한 알고리즘 ]
Running SSH serviceInsecure CBC ciphers in use: aes128-cbc,aes192-cbc,blowfish-cbc,cast128-cbc,aes256-cbc
Running SSH serviceInsecure 3DES ciphers in use: 3des-cbc
Running SSH serviceInsecure key exchange in use: diffie-hellman-group1-sha1
Running SSH serviceInsecure key exchange algorithms in use: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
Running SSH serviceInsecure MAC algorithms in use: umac-64-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,hmac-sha1

 


[ 현재 허용된 알고리즘 확인 ]
아래와 같은 명령어로 확인이 가능합니다.

 

(명령)

# sshd -T | grep "\(^ciphers\|^macs\|^kexalgorithms\)"

(결과)
ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,cast128-cbc,3des-cbc
macs umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1

kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1


[ 설정 변경 및 적용 ]
설정 파일을 열어 아래 내용 삽입 (또는 수정) 후 sshd 데몬을 재시작 합니다.
기본 옵션으로 모두 허용되어 있으므로 위 출력 결과에서 사용하지 않을 알고리즘만 제거하고 입력하였습니다.

 

# vi /etc/ssh/sshd_config


ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
macs umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512
kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1

# service sshd restart

 

 

[ 변경된 알고리즘 재확인 ]

 

(명령)

# sshd -T | grep "\(^ciphers\|^macs\|^kexalgorithms\)"

 

(결과)
ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
macs umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512
kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1

반응형

댓글()

Ubuntu 18.10 싱글모드 (복구모드) 진입 & 계정 잠김 해제

리눅스/OS 일반|2022. 3. 17. 08:01
반응형

패스워드 임계치 설정을 해 놓고, 정해놓은 수 만큼 패스워드가 불일치 되면 계정이 잠깁니다.

이럴 경우 싱글모드로 진입하여 계정 잠김 해제를 할 수 있습니다.

 

 

1. 싱글모드 진입

시스템 리부팅시 커널 선택 부분에서 아래와 같은 항목 위에서 알파벳 'e' 를 누릅니다.

*Ubuntu    // 아마도 맨 위의 항목

 

에디터 창이 뜨는데 아래서 두번째 라인 (linux 로 시작 하는 라인) 만 수정하면 됩니다.

ro 라는 단어부터 뒤로 모두 지우고 아래 내용으로 대체합니다.

rw init=/bin/bash

그리고 Ctrl + X 키를 눌러 부팅하면 계정 패스워드 없이 root 권한으로 shell 진입하게 됩니다.

 

 

2. 계정 잠김 해제

1) 확인

# pam_tally2 -u 계정명

 

2) 해제

# pam_tally2 -u 계정명 -r

 

 

3. 리부팅

싱글모드에서는 init 6 이나 reboot 명령이 되지 않으므로 강제 리부팅을 시행합니다.

# reboot -f

 

반응형

댓글()

PHP 8.0 에서 SCREWIM 을 이용한 소스 암호화

리눅스/PHP|2021. 12. 28. 13:53
반응형

DB 접속 정보가 들어있는 파일이 노출될 우려가 있어 많은 개발자들이 암호화 방법을 찾고 있습니다.

검색해보면 상용 프로그램 또는 난독화, 무료 암호화 프로그램이 몇 개 있으나

여기에서는 김정균님이 만드신 screw 개선 버전 screwim 을 소개합니다.

아래 내용은 CentOS 7, PHP 8.0 소스설치 환경에서 테스트 했으며,

페이지 하단 출처의 내용을 요약하였습니다.

 

 

1. 다운로드

 

# cd /usr/local/src
# git clone https://github.com/OOPS-ORG-PHP/mod_screwim.git

mod_screwim.zip
0.22MB

# cd mod_screwim
# /usr/local/php/bin/phpize


2. PHP 확장 모듈 생성하기

 

# ./configure --with-php-config=/usr/local/php/bin/php-config
# make install

php.ini 에 아래 내용 추가
# vi /usr/local/apache/conf/php.ini
extension = screwim.so
screwim.enable = 1

(아파치 재시작 및 적용 확인)
# /usr/local/apache/bin/apachectl restart
# /usr/local/php/bin/php -m |grep screwim

 


3. SCREWIM 설치

 

# cd tools
# ./autogen.sh    // 위에서 모듈을 설치하지 않으면 실행이 안됩니다. 모듈부터 설치하세요.

# ./configure

# make install

 

(설치 확인)
# /usr/local/bin/screwim -v


4. PHP 소스 암호화 하기


# cd /{PHP 소스 디렉토리}
# screwim config.php

 

원본 파일은 백업하고 암호화된 파일은 사용하는 파일명으로 변경합니다.
# mv config.php config.php.ori
# mv config.php.screw config.php

사이트 동작을 확인합니다.

 

* 복호화 불가 처리하실 분은..

   실행 파일이나 설치 소스 파일이 그대로 남겨져 있을 경우 screwim -d 옵션을 통해 복호화가 가능하므로

   실행 파일 및 설치 소스 파일 디렉토리를 삭제 합니다.

   (설치시 암호화, 복호화에 사용되는 랜덤 생성된 KEY STRING 삭제)

    rm -f /usr/local/bin/screwim

    rm -rf /usr/local/src/mod_screwim

 

 

[출처] https://www.php79.com/525

https://github.com/OOPS-ORG-PHP/mod_screwim/

https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=81220

 

 

반응형

댓글()