a51d968185
- Complete security menu restructure (3-mode: Analysis/Actions/Live) - Intelligent cPHulk enablement with CSF whitelist import - Live network security monitoring dashboard - Multi-source threat detection and classification - 50+ organized security tools across 4-level menu hierarchy - System health diagnostics with cPanel/WHM integration - Reference database for cross-module intelligence sharing
438 lines
14 KiB
Bash
Executable File
438 lines
14 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#############################################################################
|
|
# System Detection Library
|
|
# Runtime detection of control panels, OS, paths, and system resources
|
|
# No persistent caching - detects fresh every time
|
|
#############################################################################
|
|
|
|
# Source common functions if not already loaded
|
|
if [ -z "$TOOLKIT_BASE_DIR" ]; then
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/common-functions.sh"
|
|
fi
|
|
|
|
# Global variables (session-only)
|
|
export SYS_CONTROL_PANEL=""
|
|
export SYS_CONTROL_PANEL_VERSION=""
|
|
export SYS_OS_TYPE=""
|
|
export SYS_OS_VERSION=""
|
|
export SYS_WEB_SERVER=""
|
|
export SYS_WEB_SERVER_VERSION=""
|
|
export SYS_DB_TYPE=""
|
|
export SYS_DB_VERSION=""
|
|
export SYS_LOG_DIR=""
|
|
export SYS_USER_HOME_BASE=""
|
|
export SYS_PHP_VERSIONS=()
|
|
export SYS_CLOUDFLARE_ACTIVE=""
|
|
|
|
#############################################################################
|
|
# CONTROL PANEL DETECTION
|
|
#############################################################################
|
|
|
|
detect_control_panel() {
|
|
print_info "Detecting control panel..."
|
|
|
|
# cPanel
|
|
if [ -f "/usr/local/cpanel/version" ]; then
|
|
SYS_CONTROL_PANEL="cpanel"
|
|
SYS_CONTROL_PANEL_VERSION=$(cat /usr/local/cpanel/version)
|
|
SYS_LOG_DIR="/var/log/apache2/domlogs"
|
|
SYS_USER_HOME_BASE="/home"
|
|
|
|
# Alternative log locations for cPanel
|
|
[ ! -d "$SYS_LOG_DIR" ] && SYS_LOG_DIR="/usr/local/apache/domlogs"
|
|
|
|
print_success "Detected cPanel v${SYS_CONTROL_PANEL_VERSION}"
|
|
return 0
|
|
fi
|
|
|
|
# Plesk
|
|
if [ -f "/usr/local/psa/version" ]; then
|
|
SYS_CONTROL_PANEL="plesk"
|
|
SYS_CONTROL_PANEL_VERSION=$(cat /usr/local/psa/version | head -1)
|
|
SYS_LOG_DIR="/var/www/vhosts/system"
|
|
SYS_USER_HOME_BASE="/var/www/vhosts"
|
|
|
|
print_success "Detected Plesk v${SYS_CONTROL_PANEL_VERSION}"
|
|
return 0
|
|
fi
|
|
|
|
# InterWorx
|
|
if [ -d "/usr/local/interworx" ] || [ -f "/etc/interworx/iworx.ini" ]; then
|
|
SYS_CONTROL_PANEL="interworx"
|
|
if [ -f "/usr/local/interworx/iworx/version.php" ]; then
|
|
SYS_CONTROL_PANEL_VERSION=$(grep -oP "VERSION = '\K[^']+" /usr/local/interworx/iworx/version.php 2>/dev/null || echo "Unknown")
|
|
fi
|
|
SYS_LOG_DIR="/home"
|
|
SYS_USER_HOME_BASE="/home"
|
|
|
|
print_success "Detected InterWorx v${SYS_CONTROL_PANEL_VERSION}"
|
|
return 0
|
|
fi
|
|
|
|
# No control panel detected
|
|
SYS_CONTROL_PANEL="none"
|
|
SYS_LOG_DIR="/var/log/httpd"
|
|
[ ! -d "$SYS_LOG_DIR" ] && SYS_LOG_DIR="/var/log/apache2"
|
|
SYS_USER_HOME_BASE="/home"
|
|
|
|
print_warning "No control panel detected (standalone server)"
|
|
return 1
|
|
}
|
|
|
|
#############################################################################
|
|
# OPERATING SYSTEM DETECTION
|
|
#############################################################################
|
|
|
|
detect_os() {
|
|
print_info "Detecting operating system..."
|
|
|
|
if [ -f /etc/os-release ]; then
|
|
source /etc/os-release
|
|
SYS_OS_TYPE="$ID"
|
|
SYS_OS_VERSION="$VERSION_ID"
|
|
|
|
# Normalize OS names
|
|
case "$SYS_OS_TYPE" in
|
|
rhel|centos|almalinux|rocky|cloudlinux)
|
|
SYS_OS_TYPE=$(echo "$NAME" | awk '{print tolower($1)}')
|
|
;;
|
|
esac
|
|
|
|
print_success "Detected $NAME $VERSION_ID"
|
|
elif [ -f /etc/redhat-release ]; then
|
|
local release_info=$(cat /etc/redhat-release)
|
|
SYS_OS_TYPE="centos"
|
|
SYS_OS_VERSION=$(echo "$release_info" | grep -oP '\d+\.\d+' | head -1)
|
|
print_success "Detected $release_info"
|
|
else
|
|
SYS_OS_TYPE="unknown"
|
|
SYS_OS_VERSION="unknown"
|
|
print_warning "Could not detect OS"
|
|
fi
|
|
|
|
# Check for CloudLinux
|
|
if [ -f /etc/sysconfig/cloudlinux ] || [ -f /usr/bin/cloudlinux-config ]; then
|
|
print_info "CloudLinux detected"
|
|
export SYS_CLOUDLINUX="yes"
|
|
fi
|
|
}
|
|
|
|
#############################################################################
|
|
# WEB SERVER DETECTION
|
|
#############################################################################
|
|
|
|
detect_web_server() {
|
|
print_info "Detecting web server..."
|
|
|
|
# Apache
|
|
if command_exists httpd; then
|
|
SYS_WEB_SERVER="apache"
|
|
SYS_WEB_SERVER_VERSION=$(httpd -v 2>/dev/null | grep -oP 'Apache/\K[\d.]+' | head -1)
|
|
print_success "Detected Apache ${SYS_WEB_SERVER_VERSION}"
|
|
return 0
|
|
elif command_exists apache2; then
|
|
SYS_WEB_SERVER="apache"
|
|
SYS_WEB_SERVER_VERSION=$(apache2 -v 2>/dev/null | grep -oP 'Apache/\K[\d.]+' | head -1)
|
|
print_success "Detected Apache ${SYS_WEB_SERVER_VERSION}"
|
|
return 0
|
|
fi
|
|
|
|
# Nginx
|
|
if command_exists nginx; then
|
|
SYS_WEB_SERVER="nginx"
|
|
SYS_WEB_SERVER_VERSION=$(nginx -v 2>&1 | grep -oP 'nginx/\K[\d.]+')
|
|
print_success "Detected Nginx ${SYS_WEB_SERVER_VERSION}"
|
|
return 0
|
|
fi
|
|
|
|
# LiteSpeed
|
|
if [ -f /usr/local/lsws/bin/lswsctrl ]; then
|
|
SYS_WEB_SERVER="litespeed"
|
|
SYS_WEB_SERVER_VERSION=$(/usr/local/lsws/bin/lswsctrl version 2>/dev/null | grep -oP 'LiteSpeed/\K[\d.]+' | head -1)
|
|
print_success "Detected LiteSpeed ${SYS_WEB_SERVER_VERSION}"
|
|
return 0
|
|
fi
|
|
|
|
# OpenLiteSpeed
|
|
if command_exists /usr/local/lsws/bin/openlitespeed; then
|
|
SYS_WEB_SERVER="openlitespeed"
|
|
SYS_WEB_SERVER_VERSION=$(cat /usr/local/lsws/VERSION 2>/dev/null)
|
|
print_success "Detected OpenLiteSpeed ${SYS_WEB_SERVER_VERSION}"
|
|
return 0
|
|
fi
|
|
|
|
SYS_WEB_SERVER="unknown"
|
|
print_warning "Could not detect web server"
|
|
return 1
|
|
}
|
|
|
|
#############################################################################
|
|
# DATABASE DETECTION
|
|
#############################################################################
|
|
|
|
detect_database() {
|
|
print_info "Detecting database server..."
|
|
|
|
if command_exists mysql; then
|
|
local version_output=$(mysql --version 2>/dev/null)
|
|
|
|
if echo "$version_output" | grep -qi "mariadb"; then
|
|
SYS_DB_TYPE="mariadb"
|
|
SYS_DB_VERSION=$(echo "$version_output" | grep -oP '\d+\.\d+\.\d+' | head -1)
|
|
print_success "Detected MariaDB ${SYS_DB_VERSION}"
|
|
else
|
|
SYS_DB_TYPE="mysql"
|
|
SYS_DB_VERSION=$(echo "$version_output" | grep -oP '\d+\.\d+\.\d+' | head -1)
|
|
print_success "Detected MySQL ${SYS_DB_VERSION}"
|
|
fi
|
|
return 0
|
|
fi
|
|
|
|
SYS_DB_TYPE="none"
|
|
print_warning "No MySQL/MariaDB detected"
|
|
return 1
|
|
}
|
|
|
|
#############################################################################
|
|
# PHP VERSION DETECTION
|
|
#############################################################################
|
|
|
|
detect_php_versions() {
|
|
print_info "Detecting PHP versions..."
|
|
|
|
SYS_PHP_VERSIONS=()
|
|
|
|
# Check default PHP
|
|
if command_exists php; then
|
|
local default_version=$(php -v 2>/dev/null | grep -oP '^PHP \K[\d.]+' | head -1)
|
|
[ -n "$default_version" ] && SYS_PHP_VERSIONS+=("$default_version")
|
|
fi
|
|
|
|
# Check EA-PHP versions (cPanel)
|
|
if [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
|
for php_bin in /opt/cpanel/ea-php*/root/usr/bin/php; do
|
|
if [ -x "$php_bin" ]; then
|
|
local version=$($php_bin -v 2>/dev/null | grep -oP '^PHP \K[\d.]+' | head -1)
|
|
[ -n "$version" ] && SYS_PHP_VERSIONS+=("$version")
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Check alt-php versions (CloudLinux)
|
|
for php_bin in /opt/alt/php*/usr/bin/php; do
|
|
if [ -x "$php_bin" ]; then
|
|
local version=$($php_bin -v 2>/dev/null | grep -oP '^PHP \K[\d.]+' | head -1)
|
|
[ -n "$version" ] && SYS_PHP_VERSIONS+=("$version")
|
|
fi
|
|
done
|
|
|
|
# Remove duplicates
|
|
SYS_PHP_VERSIONS=($(echo "${SYS_PHP_VERSIONS[@]}" | tr ' ' '\n' | sort -u))
|
|
|
|
if [ ${#SYS_PHP_VERSIONS[@]} -gt 0 ]; then
|
|
print_success "Detected PHP versions: ${SYS_PHP_VERSIONS[*]}"
|
|
else
|
|
print_warning "No PHP installations detected"
|
|
fi
|
|
}
|
|
|
|
#############################################################################
|
|
# CLOUDFLARE DETECTION
|
|
#############################################################################
|
|
|
|
detect_cloudflare() {
|
|
SYS_CLOUDFLARE_ACTIVE="no"
|
|
|
|
# Check for mod_cloudflare
|
|
if [ "$SYS_WEB_SERVER" = "apache" ]; then
|
|
if httpd -M 2>/dev/null | grep -q cloudflare; then
|
|
SYS_CLOUDFLARE_ACTIVE="yes"
|
|
print_info "Cloudflare module detected"
|
|
fi
|
|
fi
|
|
|
|
# Check for railgun
|
|
if systemctl is-active --quiet railgun 2>/dev/null || service railgun status 2>/dev/null | grep -q running; then
|
|
SYS_CLOUDFLARE_ACTIVE="yes"
|
|
print_info "Cloudflare Railgun detected"
|
|
fi
|
|
}
|
|
|
|
#############################################################################
|
|
# SYSTEM RESOURCES (Comprehensive - like user's example)
|
|
#############################################################################
|
|
|
|
get_system_resources() {
|
|
local resources_file="${TEMP_SESSION_DIR}/system_resources.tmp"
|
|
|
|
# CPU Information
|
|
local cores=$(nproc)
|
|
local load=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')
|
|
local cpu_line=$(top -bn1 | grep "Cpu(s)")
|
|
local cpu_idle=$(echo "$cpu_line" | awk '{print $8}' | sed 's/%id,//')
|
|
local cpu_iowait=$(echo "$cpu_line" | awk '{print $10}' | sed 's/%wa,//')
|
|
local cpu_used=$(awk "BEGIN {printf \"%.1f\", 100-$cpu_idle}")
|
|
local load_percent=$(awk "BEGIN {printf \"%.0f\", ($load/$cores)*100}")
|
|
|
|
# Memory Information
|
|
local mem_total=$(free -h | awk '/^Mem:/ {print $2}')
|
|
local mem_used=$(free -h | awk '/^Mem:/ {print $3}')
|
|
local mem_percent=$(free | awk '/^Mem:/ {printf "%.0f", $3/$2*100}')
|
|
local mem_available=$(free -h | awk '/^Mem:/ {print $7}')
|
|
|
|
# Swap Information
|
|
local swap_total=$(free -h | awk '/^Swap:/ {print $2}')
|
|
local swap_used=$(free -h | awk '/^Swap:/ {print $3}')
|
|
local swap_percent=0
|
|
if [ "$swap_total" != "0B" ] && [ -n "$swap_total" ]; then
|
|
swap_percent=$(free | awk '/^Swap:/ {if($2>0) printf "%.0f", $3/$2*100; else print "0"}')
|
|
fi
|
|
|
|
# Disk Information
|
|
local disk_root_total=$(df -h / | awk 'NR==2 {print $2}')
|
|
local disk_root_used=$(df -h / | awk 'NR==2 {print $3}')
|
|
local disk_root_percent=$(df -h / | awk 'NR==2 {print $5}')
|
|
|
|
# Uptime
|
|
local uptime_str=$(uptime -p)
|
|
|
|
# Save to session file
|
|
cat > "$resources_file" << EOF
|
|
CPU_CORES=$cores
|
|
CPU_USED=$cpu_used
|
|
CPU_IOWAIT=$cpu_iowait
|
|
LOAD_AVERAGE=$load
|
|
LOAD_PERCENT=$load_percent
|
|
MEM_TOTAL=$mem_total
|
|
MEM_USED=$mem_used
|
|
MEM_PERCENT=$mem_percent
|
|
MEM_AVAILABLE=$mem_available
|
|
SWAP_TOTAL=$swap_total
|
|
SWAP_USED=$swap_used
|
|
SWAP_PERCENT=$swap_percent
|
|
DISK_ROOT_TOTAL=$disk_root_total
|
|
DISK_ROOT_USED=$disk_root_used
|
|
DISK_ROOT_PERCENT=$disk_root_percent
|
|
UPTIME=$uptime_str
|
|
EOF
|
|
|
|
# Also export for immediate use
|
|
export CPU_CORES=$cores
|
|
export CPU_USED=$cpu_used
|
|
export CPU_IOWAIT=$cpu_iowait
|
|
export LOAD_AVERAGE=$load
|
|
export LOAD_PERCENT=$load_percent
|
|
export MEM_TOTAL=$mem_total
|
|
export MEM_USED=$mem_used
|
|
export MEM_PERCENT=$mem_percent
|
|
}
|
|
|
|
#############################################################################
|
|
# DISPLAY FUNCTIONS
|
|
#############################################################################
|
|
|
|
show_system_info() {
|
|
echo ""
|
|
print_banner "System Information"
|
|
|
|
# Control Panel
|
|
echo -e "${BOLD}Control Panel:${NC}"
|
|
if [ "$SYS_CONTROL_PANEL" != "none" ]; then
|
|
echo " Type: $SYS_CONTROL_PANEL"
|
|
echo " Version: $SYS_CONTROL_PANEL_VERSION"
|
|
else
|
|
echo " Type: Standalone (no control panel)"
|
|
fi
|
|
echo ""
|
|
|
|
# Operating System
|
|
echo -e "${BOLD}Operating System:${NC}"
|
|
echo " OS: $SYS_OS_TYPE $SYS_OS_VERSION"
|
|
echo " Kernel: $(uname -r)"
|
|
[ "${SYS_CLOUDLINUX:-}" = "yes" ] && echo " CloudLinux: Enabled"
|
|
echo ""
|
|
|
|
# Web Server
|
|
echo -e "${BOLD}Web Server:${NC}"
|
|
echo " Type: $SYS_WEB_SERVER"
|
|
echo " Version: $SYS_WEB_SERVER_VERSION"
|
|
[ "$SYS_CLOUDFLARE_ACTIVE" = "yes" ] && echo " Cloudflare: Active"
|
|
echo ""
|
|
|
|
# Database
|
|
echo -e "${BOLD}Database:${NC}"
|
|
if [ "$SYS_DB_TYPE" != "none" ]; then
|
|
echo " Type: $SYS_DB_TYPE"
|
|
echo " Version: $SYS_DB_VERSION"
|
|
else
|
|
echo " Type: Not installed"
|
|
fi
|
|
echo ""
|
|
|
|
# PHP
|
|
echo -e "${BOLD}PHP Versions:${NC}"
|
|
if [ ${#SYS_PHP_VERSIONS[@]} -gt 0 ]; then
|
|
for version in "${SYS_PHP_VERSIONS[@]}"; do
|
|
echo " - PHP $version"
|
|
done
|
|
else
|
|
echo " None detected"
|
|
fi
|
|
echo ""
|
|
|
|
# System Resources
|
|
echo -e "${BOLD}System Resources:${NC}"
|
|
echo " CPU Cores: $CPU_CORES"
|
|
echo " CPU Usage: ${CPU_USED}% (actual)"
|
|
echo " I/O Wait: ${CPU_IOWAIT}%"
|
|
echo " Load Average: $LOAD_AVERAGE (${LOAD_PERCENT}% of core capacity)"
|
|
echo ""
|
|
echo " RAM Total: $MEM_TOTAL"
|
|
echo " RAM Used: $MEM_USED (${MEM_PERCENT}%)"
|
|
echo " RAM Available: $MEM_AVAILABLE"
|
|
echo ""
|
|
echo " Swap Total: $SWAP_TOTAL"
|
|
echo " Swap Used: $SWAP_USED (${SWAP_PERCENT}%)"
|
|
echo ""
|
|
echo " Disk (/) Total: $DISK_ROOT_TOTAL"
|
|
echo " Disk (/) Used: $DISK_ROOT_USED (${DISK_ROOT_PERCENT})"
|
|
echo ""
|
|
echo " Uptime: $UPTIME"
|
|
echo ""
|
|
|
|
# Paths
|
|
echo -e "${BOLD}Important Paths:${NC}"
|
|
echo " Log Directory: $SYS_LOG_DIR"
|
|
echo " User Home Base: $SYS_USER_HOME_BASE"
|
|
echo ""
|
|
}
|
|
|
|
#############################################################################
|
|
# INITIALIZE ALL DETECTION
|
|
#############################################################################
|
|
|
|
initialize_system_detection() {
|
|
# Create temp session directory
|
|
create_temp_session
|
|
|
|
# Run all detections
|
|
detect_control_panel
|
|
detect_os
|
|
detect_web_server
|
|
detect_database
|
|
detect_php_versions
|
|
detect_cloudflare
|
|
get_system_resources
|
|
|
|
# Mark as initialized
|
|
export SYS_DETECTION_COMPLETE="yes"
|
|
}
|
|
|
|
# Auto-initialize if not already done (when sourced)
|
|
if [ -z "${SYS_DETECTION_COMPLETE:-}" ]; then
|
|
# Just run initialization - output suppression was breaking variable assignment
|
|
initialize_system_detection
|
|
fi
|