403Webshell
Server IP : 119.195.102.159  /  Your IP : 216.73.217.134
Web Server : nginx/1.18.0
System : Linux picell 5.15.0-181-generic #191-Ubuntu SMP Fri May 22 19:09:02 UTC 2026 x86_64
User : altablue ( 1000)
PHP Version : 8.3.31
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/altablue/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/altablue/deploy_security.sh
#!/bin/bash
# ============================================================
#  πŸš€ λ³΄μ•ˆ κ°μ‹œ μ‹œμŠ€ν…œ 원클릭 배포 슀크립트
#  μ„œλ²„ 배포 경둜: /home/altablue/deploy_security.sh
#
#  이 슀크립트λ₯Ό μ„œλ²„μ—μ„œ root κΆŒν•œμœΌλ‘œ μ‹€ν–‰ν•˜λ©΄
#  λͺ¨λ“  λ³΄μ•ˆ κ°μ‹œ μ‹œμŠ€ν…œμ΄ μžλ™μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.
#
#  μ‚¬μš©λ²•: sudo ./deploy_security.sh
# ============================================================

set -euo pipefail

# ── 색상 μ •μ˜ ─────────────────────────────────────
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# ── 헬퍼 ν•¨μˆ˜ ─────────────────────────────────────
info()    { echo -e "${BLUE}[INFO]${NC} $*"; }
success() { echo -e "${GREEN}[βœ…]${NC} $*"; }
warn()    { echo -e "${YELLOW}[⚠️]${NC} $*"; }
error()   { echo -e "${RED}[❌]${NC} $*"; }

# ── 루트 κΆŒν•œ 확인 ────────────────────────────────
if [ "$(id -u)" -ne 0 ]; then
    error "이 μŠ€ν¬λ¦½νŠΈλŠ” root κΆŒν•œμœΌλ‘œ μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€."
    echo "   μ‚¬μš©λ²•: sudo $0"
    exit 1
fi

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
INSTALL_DIR="/home/altablue"
CONFIG_DIR="/etc/security-watchdog"
LOG_DIR="/home/altablue/logs"
QUARANTINE_DIR="/home/altablue/quarantine"
BASELINE_DIR="/home/altablue/baselines"

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "  πŸ›‘οΈ  λ³΄μ•ˆ κ°μ‹œ μ‹œμŠ€ν…œ 배포"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""

# ── Step 1: ν•„μˆ˜ νŒ¨ν‚€μ§€ μ„€μΉ˜ ──────────────────────
info "Step 1/8: ν•„μˆ˜ νŒ¨ν‚€μ§€ 확인 및 μ„€μΉ˜..."

PACKAGES_TO_INSTALL=()

if ! command -v inotifywait &>/dev/null; then
    PACKAGES_TO_INSTALL+=("inotify-tools")
fi

if ! command -v bc &>/dev/null; then
    PACKAGES_TO_INSTALL+=("bc")
fi

if ! command -v python3 &>/dev/null; then
    PACKAGES_TO_INSTALL+=("python3")
fi

if [ ${#PACKAGES_TO_INSTALL[@]} -gt 0 ]; then
    info "  μ„€μΉ˜ν•  νŒ¨ν‚€μ§€: ${PACKAGES_TO_INSTALL[*]}"
    apt-get update -qq
    apt-get install -y -qq "${PACKAGES_TO_INSTALL[@]}"
    success "  νŒ¨ν‚€μ§€ μ„€μΉ˜ μ™„λ£Œ"
else
    success "  λͺ¨λ“  ν•„μˆ˜ νŒ¨ν‚€μ§€κ°€ 이미 μ„€μΉ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€."
fi

# ── Step 2: 디렉토리 생성 ─────────────────────────
info "Step 2/8: 디렉토리 생성..."

mkdir -p "$CONFIG_DIR"
mkdir -p "$LOG_DIR"
mkdir -p "$QUARANTINE_DIR"
mkdir -p "$BASELINE_DIR"

chmod 700 "$CONFIG_DIR"
chmod 755 "$LOG_DIR"
chmod 700 "$QUARANTINE_DIR"
chmod 700 "$BASELINE_DIR"

success "  디렉토리 생성 μ™„λ£Œ"
echo "    πŸ“ μ„€μ •: $CONFIG_DIR"
echo "    πŸ“ 둜그: $LOG_DIR"
echo "    πŸ“ 격리: $QUARANTINE_DIR"
echo "    πŸ“ 베이슀라인: $BASELINE_DIR"

# ── Step 3: μ„€μ • 파일 배포 ────────────────────────
info "Step 3/8: μ„€μ • 파일 배포..."

if [ -f "$CONFIG_DIR/config" ]; then
    # κΈ°μ‘΄ μ„€μ • λ°±μ—…
    cp "$CONFIG_DIR/config" "$CONFIG_DIR/config.bak.$(date +%Y%m%d_%H%M%S)"
    warn "  κΈ°μ‘΄ μ„€μ • 파일 λ°±μ—… μ™„λ£Œ"
fi

cp "$SCRIPT_DIR/security-watchdog.conf" "$CONFIG_DIR/config"
chmod 600 "$CONFIG_DIR/config"

success "  μ„€μ • 파일 배포 μ™„λ£Œ: $CONFIG_DIR/config"

# ── Step 4: 슀크립트 배포 ─────────────────────────
info "Step 4/8: 슀크립트 배포..."

SCRIPTS=(
    "telegram_notify.sh"
    "watch_fpm.sh"
    "file_integrity_monitor.sh"
    "malware_scanner.sh"
    "integrity_baseline.sh"
    "wp_core_restore.sh"
    "wp_checksum_verify.sh"
)

# SCRIPT_DIRκ³Ό INSTALL_DIR이 κ°™μœΌλ©΄ 볡사 κ±΄λ„ˆλ›°κΈ°
SAME_DIR=false
if [ "$(realpath "$SCRIPT_DIR")" = "$(realpath "$INSTALL_DIR")" ]; then
    SAME_DIR=true
    info "  μŠ€ν¬λ¦½νŠΈκ°€ 이미 μ„€μΉ˜ κ²½λ‘œμ— μžˆμŠ΅λ‹ˆλ‹€. κΆŒν•œλ§Œ μ„€μ •ν•©λ‹ˆλ‹€."
fi

for script in "${SCRIPTS[@]}"; do
    if [ -f "$SCRIPT_DIR/$script" ]; then
        if [ "$SAME_DIR" = "false" ]; then
            # κΈ°μ‘΄ 파일 λ°±μ—…
            if [ -f "$INSTALL_DIR/$script" ]; then
                cp "$INSTALL_DIR/$script" "$INSTALL_DIR/${script}.bak.$(date +%Y%m%d_%H%M%S)" 2>/dev/null || true
            fi
            cp "$SCRIPT_DIR/$script" "$INSTALL_DIR/$script"
        fi
        chmod +x "$INSTALL_DIR/$script"
        success "  $script βœ“"
    else
        warn "  $script νŒŒμΌμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€ (κ±΄λ„ˆλœ€)"
    fi
done

# ── Step 5: systemd μ„œλΉ„μŠ€ 등둝 ───────────────────
info "Step 5/8: systemd μ„œλΉ„μŠ€ 등둝..."

SERVICE_FILE="/etc/systemd/system/file-integrity-monitor.service"

if [ -f "$SCRIPT_DIR/file-integrity-monitor.service" ]; then
    cp "$SCRIPT_DIR/file-integrity-monitor.service" "$SERVICE_FILE"
    chmod 644 "$SERVICE_FILE"

    systemctl daemon-reload

    # μ„œλΉ„μŠ€ ν™œμ„±ν™” (λΆ€νŒ… μ‹œ μžλ™ μ‹œμž‘)
    systemctl enable file-integrity-monitor.service

    success "  systemd μ„œλΉ„μŠ€ 등둝 및 ν™œμ„±ν™” μ™„λ£Œ"
else
    warn "  service νŒŒμΌμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€ (κ±΄λ„ˆλœ€)"
fi

# ── Step 6: inotify μ‹œμŠ€ν…œ μ„€μ • ───────────────────
info "Step 6/8: inotify μ‹œμŠ€ν…œ μ„€μ •..."

# κ°μ‹œ 파일 수 μ œν•œ 증가 (κΈ°λ³Έ 8192 β†’ 524288)
CURRENT_WATCHES=$(cat /proc/sys/fs/inotify/max_user_watches 2>/dev/null || echo 0)
REQUIRED_WATCHES=524288

if [ "$CURRENT_WATCHES" -lt "$REQUIRED_WATCHES" ]; then
    echo "fs.inotify.max_user_watches=$REQUIRED_WATCHES" > /etc/sysctl.d/60-inotify-watches.conf
    sysctl -p /etc/sysctl.d/60-inotify-watches.conf >/dev/null 2>&1
    success "  inotify max_user_watches: $CURRENT_WATCHES β†’ $REQUIRED_WATCHES"
else
    success "  inotify μ„€μ • 이미 μΆ©λΆ„ν•©λ‹ˆλ‹€ ($CURRENT_WATCHES)"
fi

# ── Step 7: 크둠탭 μ„€μ • ──────────────────────────
info "Step 7/8: 크둠탭 μ„€μ •..."

# κΈ°μ‘΄ λ³΄μ•ˆ κ΄€λ ¨ 크둠 제거
crontab -l 2>/dev/null | grep -v "watch_fpm.sh" | grep -v "malware_scanner.sh" | grep -v "integrity_baseline.sh" | grep -v "# SECURITY-WATCHDOG" > /tmp/crontab_clean 2>/dev/null || true

# μƒˆ 크둠 μž‘μ—… μΆ”κ°€
cat >> /tmp/crontab_clean << 'CRONEOF'

# ══════════════════════════════════════════════════
# SECURITY-WATCHDOG: λ³΄μ•ˆ κ°μ‹œ μ‹œμŠ€ν…œ 크둠 μž‘μ—…
# ══════════════════════════════════════════════════

# PHP-FPM ν—¬μŠ€μ²΄ν¬ (1λΆ„λ§ˆλ‹€)
* * * * * /home/altablue/watch_fpm.sh >> /home/altablue/logs/cron_watchfpm.log 2>&1

# μ•…μ„±μ½”λ“œ λΉ λ₯Έ μŠ€μΊ” (5λΆ„λ§ˆλ‹€, 졜근 λ³€κ²½ 파일만)
*/5 * * * * /home/altablue/malware_scanner.sh --quick >> /home/altablue/logs/cron_malware.log 2>&1

# 무결성 검증 (1μ‹œκ°„λ§ˆλ‹€)
0 * * * * /home/altablue/integrity_baseline.sh --verify >> /home/altablue/logs/cron_integrity.log 2>&1

# 전체 μ•…μ„±μ½”λ“œ μŠ€μΊ” (맀일 μƒˆλ²½ 3μ‹œ)
0 3 * * * /home/altablue/malware_scanner.sh --full >> /home/altablue/logs/cron_malware_full.log 2>&1

# 크둠 둜그 정리 (λ§€μ£Ό μΌμš”μΌ μƒˆλ²½ 4μ‹œ)
0 4 * * 0 find /home/altablue/logs -name "cron_*.log" -size +10M -exec truncate -s 1M {} \;

# SECURITY-WATCHDOG-END
CRONEOF

crontab /tmp/crontab_clean
rm -f /tmp/crontab_clean

success "  크둠탭 μ„€μ • μ™„λ£Œ"
echo "    ⏰ ν—¬μŠ€μ²΄ν¬: 1λΆ„λ§ˆλ‹€"
echo "    ⏰ λΉ λ₯Έ μŠ€μΊ”: 5λΆ„λ§ˆλ‹€"
echo "    ⏰ 무결성 검증: 1μ‹œκ°„λ§ˆλ‹€"
echo "    ⏰ 전체 μŠ€μΊ”: 맀일 03:00"

# ── Step 8: 초기 베이슀라인 생성 및 μ„œλΉ„μŠ€ μ‹œμž‘ ───
info "Step 8/8: μ΄ˆκΈ°ν™” 및 μ„œλΉ„μŠ€ μ‹œμž‘..."

# 베이슀라인 생성
info "  무결성 베이슀라인 생성 쀑..."
"$INSTALL_DIR/integrity_baseline.sh" --init 2>/dev/null || warn "  베이슀라인 생성 μ‹€νŒ¨ (λ‚˜μ€‘μ— μˆ˜λ™ μ‹€ν–‰ κ°€λŠ₯)"

# μ‹€μ‹œκ°„ κ°μ‹œ μ„œλΉ„μŠ€ μ‹œμž‘
info "  μ‹€μ‹œκ°„ 파일 κ°μ‹œ μ„œλΉ„μŠ€ μ‹œμž‘ 쀑..."
systemctl start file-integrity-monitor.service 2>/dev/null || warn "  μ„œλΉ„μŠ€ μ‹œμž‘ μ‹€νŒ¨ (λ‚˜μ€‘μ— μˆ˜λ™ μ‹œμž‘ κ°€λŠ₯)"

# μ„œλΉ„μŠ€ μƒνƒœ 확인
if systemctl is-active --quiet file-integrity-monitor 2>/dev/null; then
    success "  μ‹€μ‹œκ°„ 파일 κ°μ‹œ μ„œλΉ„μŠ€ μ‹€ν–‰ 쀑"
else
    warn "  μ„œλΉ„μŠ€κ°€ 아직 μ‹œμž‘λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."
    echo "    μˆ˜λ™ μ‹œμž‘: sudo systemctl start file-integrity-monitor"
fi

# ── ν…”λ ˆκ·Έλž¨ ν…ŒμŠ€νŠΈ ───────────────────────────────
echo ""
info "ν…”λ ˆκ·Έλž¨ μ•Œλ¦Ό ν…ŒμŠ€νŠΈ 전솑 쀑..."
"$INSTALL_DIR/telegram_notify.sh" "INFO" "πŸ›‘οΈ <b>λ³΄μ•ˆ κ°μ‹œ μ‹œμŠ€ν…œ μ„€μΉ˜ μ™„λ£Œ!</b>

μ„€μΉ˜λœ ꡬ성 μš”μ†Œ:
━━━━━━━━━━━━━━━━━━━━
βœ… μ‹€μ‹œκ°„ 파일 κ°μ‹œ (inotifywait)
βœ… PHP μ•…μ„±μ½”λ“œ μŠ€μΊλ„ˆ
βœ… ν•΄μ‹œ 무결성 검증
βœ… PHP-FPM ν—¬μŠ€μ²΄ν¬
βœ… 등급별 ν…”λ ˆκ·Έλž¨ μ•Œλ¦Ό

βš™οΈ ν˜„μž¬ λͺ¨λ“œ: alert_only (μ•Œλ¦Όλ§Œ)
πŸ“‹ λ³€κ²½ν•˜λ €λ©΄: /etc/security-watchdog/config" && success "  ν…”λ ˆκ·Έλž¨ ν…ŒμŠ€νŠΈ λ©”μ‹œμ§€ 전솑 성곡!" || warn "  ν…”λ ˆκ·Έλž¨ 전솑 μ‹€νŒ¨ (봇 토큰/μ±— ID 확인 ν•„μš”)"

# ── μ™„λ£Œ ──────────────────────────────────────────
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "  βœ…  λ³΄μ•ˆ κ°μ‹œ μ‹œμŠ€ν…œ 배포 μ™„λ£Œ!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "  πŸ“‹ μ£Όμš” λͺ…λ Ήμ–΄:"
echo "  ─────────────────────────────────────────"
echo "  μ„œλΉ„μŠ€ μƒνƒœ    : systemctl status file-integrity-monitor"
echo "  μ„œλΉ„μŠ€ 둜그    : journalctl -u file-integrity-monitor -f"
echo "  λΉ λ₯Έ μŠ€μΊ”      : /home/altablue/malware_scanner.sh --quick"
echo "  전체 μŠ€μΊ”      : /home/altablue/malware_scanner.sh --full"
echo "  νŠΉμ • 경둜 μŠ€μΊ” : /home/altablue/malware_scanner.sh --scan /path"
echo "  베이슀라인 κ°±μ‹ : /home/altablue/integrity_baseline.sh --update"
echo "  μ„€μ • λ³€κ²½      : nano /etc/security-watchdog/config"
echo ""
echo "  βš™οΈ  ν˜„μž¬ λͺ¨λ“œ: alert_only (μ•Œλ¦Όλ§Œ)"
echo "  πŸ”„ μžλ™κ²©λ¦¬ μ „ν™˜: config νŒŒμΌμ—μ„œ MODE=\"auto_quarantine\""
echo ""
echo "  πŸ“ 둜그 파일:"
echo "  ─────────────────────────────────────────"
echo "  파일 κ°μ‹œ : $LOG_DIR/file_integrity.log"
echo "  μ•…μ„±μ½”λ“œ  : $LOG_DIR/malware_scanner.log"
echo "  무결성    : $LOG_DIR/integrity.log"
echo "  FPM κ°μ‹œ  : $LOG_DIR/fpm_watchdog.log"
echo "  μ•Œλ¦Ό 이λ ₯ : $LOG_DIR/alert_history.log"
echo ""

Youez - 2016 - github.com/yon3zu
LinuXploit