diff --git a/modules/security/malware-scanner.sh b/modules/security/malware-scanner.sh index 0d8d306..ad86996 100755 --- a/modules/security/malware-scanner.sh +++ b/modules/security/malware-scanner.sh @@ -257,99 +257,83 @@ install_all_scanners() { if ! is_maldet_installed; then echo -e "${CYAN}[2/4] Installing Maldet...${NC}" - cd /tmp || { echo -e "${RED}✗ Cannot access /tmp${NC}"; return 1; } + ( + cd /tmp || { echo -e "${RED}✗ Cannot access /tmp${NC}"; return 1; } - # Download Maldet - echo " → Downloading Maldet..." - if ! wget -q http://www.rfxn.com/downloads/maldetect-current.tar.gz; then - echo -e "${RED}✗ Download failed - check internet connectivity${NC}" - return 1 - fi - - if [ -f maldetect-current.tar.gz ]; then - echo " → Extracting archive..." - if ! tar -xzf maldetect-current.tar.gz 2>/dev/null; then - echo -e "${RED}✗ Extraction failed - archive may be corrupted${NC}" - rm -f maldetect-current.tar.gz + # Download Maldet + echo " → Downloading Maldet..." + if ! wget -q http://www.rfxn.com/downloads/maldetect-current.tar.gz; then + echo -e "${RED}✗ Download failed - check internet connectivity${NC}" return 1 fi - # Find the extracted directory - local maldet_dir=$(find /tmp -maxdepth 1 -type d -name "maldetect-*" 2>/dev/null | head -1) - if [ -z "$maldet_dir" ]; then - echo -e "${RED}✗ Cannot find extracted directory${NC}" - echo " Available directories in /tmp:" - ls -la /tmp | grep maldetect | sed 's/^/ /' - cd /tmp - rm -rf "maldetect-"* - return 1 - fi + if [ -f maldetect-current.tar.gz ]; then + echo " → Extracting archive..." + if ! tar -xzf maldetect-current.tar.gz 2>/dev/null; then + echo -e "${RED}✗ Extraction failed - archive may be corrupted${NC}" + rm -f maldetect-current.tar.gz + return 1 + fi - # Change to extracted directory - if ! cd "$maldet_dir"; then - echo -e "${RED}✗ Cannot access directory: $maldet_dir${NC}" - cd /tmp - rm -rf "maldetect-"* - return 1 - fi + # Find the extracted directory + local maldet_dir=$(find /tmp -maxdepth 1 -type d -name "maldetect-*" 2>/dev/null | head -1) + if [ -z "$maldet_dir" ]; then + echo -e "${RED}✗ Cannot find extracted directory${NC}" + cd /tmp + rm -rf "maldetect-"* + return 1 + fi - # Run installation with error capture - echo " → Running installation script..." - local install_log="/tmp/maldet-install-$$.log" - if ./install.sh > "$install_log" 2>&1; then - install_exit=0 - else - install_exit=$? - fi + # Change to extracted directory + if ! cd "$maldet_dir"; then + echo -e "${RED}✗ Cannot access directory: $maldet_dir${NC}" + cd /tmp + rm -rf "maldetect-"* + return 1 + fi - # Cleanup - cd /tmp - rm -rf "maldetect-"* - - # Check if installation succeeded - if is_maldet_installed; then - echo -e "${GREEN}✓ Maldet installed${NC}" - rm -f "$install_log" - - # Update malware signatures immediately - echo " → Updating malware signatures..." - if maldet -u 2>&1 | grep -qE "update completed|signatures"; then - echo -e " ${GREEN}✓${NC} Signatures updated" + # Run installation with error capture + echo " → Running installation script..." + local install_log="/tmp/maldet-install-$$.log" + if ./install.sh > "$install_log" 2>&1; then + install_exit=0 else - echo -e " ${YELLOW}⚠${NC} Signature update status unclear (continuing with current definitions)" + install_exit=$? fi + + # Cleanup + cd /tmp + rm -rf "maldetect-"* + + # Check if installation succeeded + if is_maldet_installed; then + echo -e "${GREEN}✓ Maldet installed${NC}" + rm -f "$install_log" + + # Update malware signatures immediately + echo " → Updating malware signatures..." + if maldet -u 2>&1 | grep -qE "update completed|signatures"; then + echo -e " ${GREEN}✓${NC} Signatures updated" + else + echo -e " ${YELLOW}⚠${NC} Signature update status unclear (continuing with current definitions)" + fi + else + echo -e "${RED}✗ Maldet installation failed${NC}" + + # Show diagnostic information + if [ -f "$install_log" ]; then + echo -e "${YELLOW}Installation output (last 10 lines):${NC}" + tail -10 "$install_log" | sed 's/^/ /' + echo "" + echo -e "${YELLOW}Full log saved to: $install_log${NC}" + fi + fi + return 0 else - echo -e "${RED}✗ Maldet installation failed${NC}" - - # Show diagnostic information - if [ -f "$install_log" ]; then - echo -e "${YELLOW}Installation output (last 10 lines):${NC}" - tail -10 "$install_log" | sed 's/^/ /' - echo "" - echo -e "${YELLOW}Full log saved to: $install_log${NC}" - fi - - # Check for common Plesk issues - if command -v plesk >/dev/null 2>&1; then - echo -e "${YELLOW}Detected Plesk system - checking for conflicts...${NC}" - - # Check if cron is accessible - if [ ! -w /var/spool/cron ] && [ ! -w /etc/cron.d ]; then - echo " → Cron directory permissions may be restricted" - fi - - # Check if required directories exist - if [ ! -d /usr/local/sbin ]; then - echo " → /usr/local/sbin does not exist (required for maldet)" - fi - fi - - return 1 + echo -e "${RED}✗ Download failed - maldetect-current.tar.gz not found${NC}" + return 0 fi - else - echo -e "${RED}✗ Download failed - maldetect-current.tar.gz not found${NC}" - return 1 - fi + ) || true else echo -e "${GREEN}✓ Maldet already installed${NC}" fi