Compare commits
6 Commits
dev
...
5fb3640004
| Author | SHA1 | Date | |
|---|---|---|---|
| 5fb3640004 | |||
| 9942296714 | |||
| aa432a08bd | |||
| 3126944905 | |||
| e5979a501e | |||
| eabddb553d |
+44
-14
@@ -53,7 +53,7 @@ run_module() {
|
||||
echo ""
|
||||
echo -e "${RED}✗ Module not found: $category/$module${NC}"
|
||||
echo ""
|
||||
read -p "Press Enter to continue..."
|
||||
read -p "Press Enter to continue..." < /dev/tty 2>/dev/null || true
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -74,7 +74,7 @@ run_module() {
|
||||
echo -e "${RED}✗ Exited with code: $exit_code${NC}"
|
||||
fi
|
||||
echo ""
|
||||
read -p "Press Enter to continue..."
|
||||
read -p "Press Enter to continue..." < /dev/tty 2>/dev/null || true
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
@@ -135,7 +135,9 @@ show_threat_analysis_menu() {
|
||||
handle_threat_analysis_menu() {
|
||||
while true; do
|
||||
show_threat_analysis_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "security" "bot-analyzer.sh" ;;
|
||||
@@ -169,7 +171,9 @@ show_live_monitoring_menu() {
|
||||
handle_live_monitoring_menu() {
|
||||
while true; do
|
||||
show_live_monitoring_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "security" "live-attack-monitor.sh" ;;
|
||||
@@ -201,7 +205,9 @@ show_log_viewers_menu() {
|
||||
handle_log_viewers_menu() {
|
||||
while true; do
|
||||
show_log_viewers_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "security" "tail-apache-access.sh" ;;
|
||||
@@ -232,7 +238,9 @@ show_security_actions_menu() {
|
||||
handle_security_actions_menu() {
|
||||
while true; do
|
||||
show_security_actions_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "security" "enable-cphulk.sh" ;;
|
||||
@@ -266,7 +274,9 @@ show_security_menu() {
|
||||
handle_security_menu() {
|
||||
while true; do
|
||||
show_security_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) handle_threat_analysis_menu ;;
|
||||
@@ -314,7 +324,9 @@ show_website_menu() {
|
||||
handle_website_menu() {
|
||||
while true; do
|
||||
show_website_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "website" "website-error-analyzer.sh" ;;
|
||||
@@ -367,7 +379,9 @@ show_performance_menu() {
|
||||
handle_performance_menu() {
|
||||
while true; do
|
||||
show_performance_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "performance" "mysql-query-analyzer.sh" ;;
|
||||
@@ -473,7 +487,9 @@ show_acronis_menu() {
|
||||
handle_backup_menu() {
|
||||
while true; do
|
||||
show_backup_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) handle_acronis_menu ;;
|
||||
@@ -488,7 +504,9 @@ handle_backup_menu() {
|
||||
handle_acronis_menu() {
|
||||
while true; do
|
||||
show_acronis_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "backup" "acronis-install.sh" ;;
|
||||
@@ -542,7 +560,9 @@ show_email_menu() {
|
||||
handle_email_menu() {
|
||||
while true; do
|
||||
show_email_menu
|
||||
read -r choice
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "email" "email-diagnostics.sh" ;;
|
||||
@@ -573,6 +593,11 @@ init_directories() {
|
||||
}
|
||||
|
||||
startup_detection() {
|
||||
# Initialize system detection first (required for proper reference database)
|
||||
if [ -z "${SYS_DETECTION_COMPLETE:-}" ]; then
|
||||
initialize_system_detection
|
||||
fi
|
||||
|
||||
if ! db_is_fresh; then
|
||||
clear
|
||||
print_banner "Server Management Toolkit - Initializing"
|
||||
@@ -608,7 +633,7 @@ startup_detection() {
|
||||
print_success "Detection complete! Cached for 1 hour."
|
||||
echo ""
|
||||
|
||||
read -p "Press Enter to continue..."
|
||||
read -p "Press Enter to continue..." < /dev/tty 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -622,7 +647,12 @@ main() {
|
||||
|
||||
while true; do
|
||||
show_main_menu
|
||||
read -r choice
|
||||
|
||||
# Read from terminal (use /dev/tty directly for interaction)
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
# No terminal available, return from function gracefully
|
||||
return 0
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) run_module "diagnostics" "system-health-check.sh" ;;
|
||||
|
||||
@@ -169,8 +169,7 @@ show_terminal_info() {
|
||||
# Create temporary session directory
|
||||
create_temp_session() {
|
||||
export SESSION_ID=$$
|
||||
export TEMP_SESSION_DIR="/tmp/server-toolkit-${SESSION_ID}"
|
||||
mkdir -p "$TEMP_SESSION_DIR"
|
||||
export TEMP_SESSION_DIR=$(mktemp -d -t server-toolkit.XXXXXX)
|
||||
|
||||
# Cleanup on exit
|
||||
trap '[ -n "$TEMP_SESSION_DIR" ] && rm -rf "$TEMP_SESSION_DIR" 2>/dev/null' EXIT INT TERM
|
||||
|
||||
+6
-3
@@ -162,8 +162,8 @@ build_databases_section() {
|
||||
# Build MySQL command with credentials if needed
|
||||
local mysql_cmd="mysql"
|
||||
if [ "$SYS_CONTROL_PANEL" = "plesk" ] && [ -f /etc/psa/.psa.shadow ]; then
|
||||
local plesk_mysql_pass=$(cat /etc/psa/.psa.shadow)
|
||||
mysql_cmd="mysql -uadmin -p${plesk_mysql_pass}"
|
||||
export MYSQL_PWD=$(cat /etc/psa/.psa.shadow)
|
||||
mysql_cmd="mysql -uadmin"
|
||||
fi
|
||||
|
||||
local total_dbs=$($mysql_cmd -Ns -e "SHOW DATABASES" 2>/dev/null | grep -v "^information_schema$\|^mysql$\|^performance_schema$\|^sys$" | wc -l)
|
||||
@@ -180,7 +180,7 @@ build_databases_section() {
|
||||
|
||||
local size_mb=$($mysql_cmd -Ns -e "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2)
|
||||
FROM information_schema.TABLES
|
||||
WHERE table_schema='$db'" 2>/dev/null)
|
||||
WHERE table_schema=\`$db\`" 2>/dev/null)
|
||||
[ -z "$size_mb" ] && size_mb=0
|
||||
|
||||
local table_count=$($mysql_cmd -Ns "$db" -e "SHOW TABLES" 2>/dev/null | wc -l)
|
||||
@@ -190,6 +190,9 @@ build_databases_section() {
|
||||
|
||||
finish_progress
|
||||
echo "" >> "$SYSREF_DB"
|
||||
|
||||
# Clean up password environment variable
|
||||
unset MYSQL_PWD
|
||||
}
|
||||
|
||||
# Check domain HTTP/HTTPS status codes
|
||||
|
||||
@@ -8,6 +8,14 @@
|
||||
# Scan scope: Single domain, user account, or entire server
|
||||
################################################################################
|
||||
|
||||
# Color definitions (matching launcher.sh)
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m'
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
|
||||
# Source required libraries (warn if missing, but allow graceful degradation)
|
||||
@@ -32,6 +40,7 @@ validate_required_functions() {
|
||||
local required_functions=(
|
||||
"confirm"
|
||||
"print_header"
|
||||
"print_banner"
|
||||
"select_user_interactive"
|
||||
"get_user_domains"
|
||||
)
|
||||
@@ -91,13 +100,9 @@ detect_scanners() {
|
||||
available_scanners+=("rkhunter")
|
||||
fi
|
||||
|
||||
if [ ${#available_scanners[@]} -eq 0 ]; then
|
||||
echo -e "${RED}No malware scanners detected!${NC}"
|
||||
echo ""
|
||||
show_scanner_installation_guide
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Note: If no scanners are found, available_scanners array will be empty
|
||||
# Menu option 9 allows installation, so we don't exit here
|
||||
# Just return success to allow menu to display
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -823,10 +828,51 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
# If no scanners found, show installation guide and exit gracefully
|
||||
if [ ${#AVAILABLE_SCANNERS[@]} -eq 0 ]; then
|
||||
log_message "ERROR: No scanners found!"
|
||||
log_message "WARNING: No scanners found on this system"
|
||||
echo ""
|
||||
echo -e "${RED}No malware scanners detected!${NC}"
|
||||
exit 1
|
||||
echo ""
|
||||
echo -e "${YELLOW}Available Malware Scanners:${NC}"
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}ImunifyAV${NC} - FREE real-time malware scanner"
|
||||
echo " Status: Not installed"
|
||||
echo " Installation (cPanel):"
|
||||
echo " yum install imunify-antivirus imunify-antivirus-cpanel"
|
||||
echo " /opt/alt/python35/share/imunify360/scripts/av-userside-plugin.sh"
|
||||
echo " Installation (manual):"
|
||||
echo " wget https://repo.imunify360.cloudlinux.com/defence360/imav-deploy.sh"
|
||||
echo " bash imav-deploy.sh"
|
||||
echo " Docs: https://docs.imunify360.com/imunifyav/"
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}ClamAV${NC} - Open source antivirus engine"
|
||||
echo " Status: Not installed"
|
||||
echo " Installation:"
|
||||
echo " yum install clamav clamav-update # RHEL/CentOS"
|
||||
echo " apt-get install clamav clamav-daemon # Debian/Ubuntu"
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}Maldet (LMD)${NC} - Linux Malware Detect"
|
||||
echo " Status: Not installed"
|
||||
echo " Installation:"
|
||||
echo " cd /tmp && wget http://www.rfxn.com/downloads/maldetect-current.tar.gz"
|
||||
echo " tar -xzf maldetect-current.tar.gz && cd maldetect-*"
|
||||
echo " ./install.sh"
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}Rootkit Hunter${NC} - Rootkit/backdoor/exploit scanner"
|
||||
echo " Status: Not installed"
|
||||
echo " Installation:"
|
||||
echo " yum install epel-release rkhunter # RHEL/CentOS"
|
||||
echo " apt-get install rkhunter # Debian/Ubuntu"
|
||||
echo ""
|
||||
|
||||
echo -e "${YELLOW}Recommendation:${NC} Install at least ClamAV + RKHunter (both free)"
|
||||
echo ""
|
||||
exit 0
|
||||
fi
|
||||
|
||||
log_message "Found ${#AVAILABLE_SCANNERS[@]} scanner(s): ${AVAILABLE_SCANNERS[*]}"
|
||||
@@ -2181,20 +2227,33 @@ delete_standalone_sessions() {
|
||||
|
||||
# Main scan menu
|
||||
show_scan_menu() {
|
||||
# Ensure print_banner is available before calling it
|
||||
if ! declare -f "print_banner" &>/dev/null; then
|
||||
echo "ERROR: print_banner function not found" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Build reference database once for the entire menu session
|
||||
if command -v build_reference_database &>/dev/null; then
|
||||
echo "Building system reference database..."
|
||||
build_reference_database 2>/dev/null || true
|
||||
clear
|
||||
fi
|
||||
|
||||
while true; do
|
||||
print_banner "Malware Scanner"
|
||||
# Call print_banner - MUST succeed
|
||||
print_banner "Malware Scanner" || {
|
||||
echo "ERROR: print_banner failed" >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
echo "Available Scanners:"
|
||||
for scanner in "${available_scanners[@]}"; do
|
||||
echo " • ${scanner^}"
|
||||
done
|
||||
if [ ${#available_scanners[@]} -eq 0 ]; then
|
||||
echo " (None currently installed)"
|
||||
else
|
||||
for scanner in "${available_scanners[@]}"; do
|
||||
echo " • ${scanner^}"
|
||||
done
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}Create New Scan:${NC}"
|
||||
@@ -2540,10 +2599,17 @@ generate_client_report() {
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
if ! detect_scanners; then
|
||||
exit 1
|
||||
# Detect scanners (populate available_scanners array)
|
||||
# Don't exit if none found - menu option 9 allows installation
|
||||
detect_scanners || true
|
||||
|
||||
# Verify show_scan_menu exists and is callable
|
||||
if ! declare -f "show_scan_menu" &>/dev/null; then
|
||||
echo "ERROR: show_scan_menu function not found" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Call the menu function
|
||||
show_scan_menu
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user