| 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 : |
#!/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 ""