true]; $cloud = bg_config_read(bg_config_catalog()['cloud']); $cloudParsed = is_array($cloud['parsed'] ?? null) ? $cloud['parsed'] : []; $scannerRead = bg_config_read(bg_config_catalog()['scanner']); $scannerParsed = is_array($scannerRead['parsed'] ?? null) ? $scannerRead['parsed'] : []; $output = ''; $defaultWatch = []; if (!empty($scannerParsed['scan_path'])) { foreach (preg_split('/[;\r\n]+/', (string)$scannerParsed['scan_path']) as $p) { $p = trim($p); if ($p !== '') $defaultWatch[] = $p; } } if (!$defaultWatch) { $du = bg_detect_desktop_user(); $rec = $du ? bg_user_record($du) : null; $candidates = []; if ($rec && !empty($rec['home'])) { $home = rtrim($rec['home'], '/'); $candidates[] = $home . '/Downloads'; $candidates[] = $home . '/public_html'; $candidates[] = $home . '/www'; } foreach (['/home','/var/www','/var/www/html','/srv/http','/srv/www','/tmp'] as $p0) $candidates[] = $p0; foreach ($candidates as $p0) { if (is_dir($p0) && !in_array($p0, $defaultWatch, true)) $defaultWatch[] = $p0; } if (!$defaultWatch) $defaultWatch[] = '/home'; } $monitorPaths = bg_read_json('scan_inotify_paths.json', ['paths'=>$defaultWatch]); if (empty($monitorPaths['paths']) || !is_array($monitorPaths['paths'])) $monitorPaths['paths'] = $defaultWatch; if ($_SERVER['REQUEST_METHOD'] === 'POST') { csrf_validate(); $action = $_POST['action'] ?? 'scan'; if ($action === 'save') { $scanCfg['auto_scan_enabled'] = !empty($_POST['auto_scan_enabled']); $r1 = bg_config_save_key('scan_config', json_encode($scanCfg, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)."\n"); $vtKey = trim($_POST['virustotal_key'] ?? ''); $cloudContent = 'malware_bazaar_api_key=' . $vtKey . "\n"; $r2 = bg_config_save_key('cloud', $cloudContent); $ok = (($r1['code'] ?? 1) === 0) && (($r2['code'] ?? 1) === 0); bg_flash($ok ? 'success' : 'warning', $ok ? bg_t('scan_settings_saved') : trim(($r1['output'] ?? '') . "\n" . ($r2['output'] ?? ''))); bg_redirect('scan.php'); } elseif ($action === 'scan') { $path = trim($_POST['path'] ?? ''); if ($path === '' && !empty($_FILES['upload']['tmp_name'])) { $tmpDir = bg_data_dir() . '/uploads'; if (!is_dir($tmpDir)) bg_safe_mkdir($tmpDir,0750); $dest = $tmpDir . '/' . time() . '-' . bg_safe_basename($_FILES['upload']['name']); if (@move_uploaded_file($_FILES['upload']['tmp_name'], $dest)) $path = $dest; } if ($path === '') $output = bg_t('no_path_or_file_specified'); else { $res = bg_scan_path_privileged($path); $output = ($res['output'] ?? '') . "\n\n" . bg_t('exit_code') . ": " . ($res['code'] ?? '?'); } } elseif ($action === 'monitor-save') { $paths = bg_normalize_lines($_POST['watch_paths'] ?? ''); if (!$paths) $paths = $defaultWatch; bg_write_json('scan_inotify_paths.json', ['paths'=>$paths]); $saveRes = bg_inotify_monitor_save($paths); $msg = bg_language()==='en' ? 'Realtime inotify paths saved.' : 'Percorsi inotify salvati.'; if (($saveRes['code'] ?? 1) !== 0) $msg .= ' ' . trim((string)($saveRes['output'] ?? '')); bg_flash(($saveRes['code'] ?? 1) === 0 ? 'success' : 'warning', $msg); bg_redirect('scan.php#inotify'); } elseif ($action === 'monitor-start') { $paths = bg_normalize_lines($_POST['watch_paths'] ?? ''); if (!$paths) $paths = $monitorPaths['paths']; bg_write_json('scan_inotify_paths.json', ['paths'=>$paths]); $res = bg_inotify_monitor_start($paths); bg_flash(($res['code'] ?? 1) === 0 ? 'success' : 'warning', $res['output'] ?: bg_t('command_executed')); bg_redirect('scan.php#inotify'); } elseif ($action === 'monitor-stop') { $res = bg_inotify_monitor_stop(); bg_flash(($res['code'] ?? 1) === 0 ? 'success' : 'warning', $res['output'] ?: bg_t('command_executed')); bg_redirect('scan.php#inotify'); } } $paths = bg_clamd_paths(); $clamonacc = bg_service_status(['clamav-clamonacc.service','clamonacc.service']); $monStatus = bg_inotify_monitor_status(); $monEvents = bg_inotify_monitor_events(120); include 'includes/header.php'; include 'includes/sidebar.php'; ?>
= bg_e(bg_t('scan_page_subtitle')) ?>
sudo bash scripts/install-webui-helpers.sh "$USER". = bg_e(bg_t('scan_uses')) ?> /usr/local/sbin/bastionguard-webui-admin scan-path-b64; = bg_e(bg_t('realtime_monitor_runs_root')) ?> bastionguard-webui-inotify.service = bg_e(bg_t('and_uses')) ?> inotifywait, clamdscan and BastionGuard-ransomware-realtime = bg_e(bg_t('when_installed')) ?>.= bg_e(bg_t('paths_allowed_by_helper')) ?>: /home, /home/*, /var/www, /srv, /mnt, /media, /run/media, WebUI upload and /tmp.
Config: = bg_e(bg_config_catalog()['scan_config']['path']) ?> and = bg_e(bg_config_catalog()['cloud']['path']) ?>.
= bg_e($p) ?>= bg_e(bg_t('no_onaccess_path')) ?>
= bg_e(bg_t('status')) ?>: = bg_e(trim($monStatus['output'] ?? 'unknown')) ?>
= bg_e(bg_t('requires')) ?> inotify-tools. = bg_e(bg_t('events_scanned_immediately')) ?> BastionGuard-ransomware-realtime = bg_e(bg_t('per_file_ransomware_scanner_when_available')) ?> = bg_e(bg_t('recommended_monitored_roots_include')) ?> /tmp, = bg_e(bg_t('user_web_roots_under')) ?> /home, = bg_e(bg_t('webserver_roots_such_as')) ?> /var/www or /srv/http. = bg_e(bg_t('malware_ransomware_create_alerts')) ?> = bg_e(bg_t('keep_monitor_active_after_logout')) ?> sudo systemctl enable --now bastionguard-webui-inotify.service.
= bg_e(trim($monEvents['output'] ?? '') ?: bg_t('no_realtime_events_yet')) ?>