= 3) { $group_name = $parts[0]; $gid = (int)$parts[2]; $users = $parts[3] ?? ''; // Пользователи через запятую // Фильтруем системные группы, оставляем root (GID 0), wheel и кастомные (GID >= 1000) if ($gid === 0 || $gid === 998 || $gid >= 1000) { // Исключаем технического nobody if ($group_name !== 'nobody') { $groupsList[] = [ 'name' => $group_name, 'gid' => $gid, 'users' => empty($users) ? '—' : str_replace(',', ', ', $users), 'status' => 'Normal' ]; } } } } } echo json_encode($groupsList, JSON_UNESCAPED_UNICODE); exit; } // --- ОБРАБОТКА ИЗМЕНЕНИЙ (POST) --- if ($_SERVER['REQUEST_METHOD'] === 'POST') { $group_name = preg_replace('/[^a-z0-9_-]/', '', $input['group_name'] ?? ''); if (empty($group_name)) { echo json_encode(['success' => false, 'error' => 'Некорректное имя группы']); exit; } switch ($input['action']) { case 'create': // Создание группы через systemd-run наружу от root $cmd = "sudo /usr/bin/systemd-run -G /usr/bin/bash -c " . escapeshellarg("groupadd {$group_name}") . " 2>&1"; exec($cmd, $output, $return_var); if ($return_var === 0) { echo json_encode(['success' => true]); } else { $err = implode(' ', $output); echo json_encode(['success' => false, 'error' => "Ошибка создания группы: {$err}"]); } break; case 'delete': if ($group_name === 'root' || $group_name === 'wheel') { echo json_encode(['success' => false, 'error' => 'Удаление системных групп запрещено']); exit; } // Удаление группы $cmd = "sudo /usr/bin/systemd-run -G /usr/bin/bash -c " . escapeshellarg("groupdel {$group_name}") . " 2>&1"; exec($cmd, $output, $return_var); if ($return_var === 0) { echo json_encode(['success' => true]); } else { $err = implode(' ', $output); echo json_encode(['success' => false, 'error' => "Ошибка удаления группы: {$err}"]); } break; default: echo json_encode(['success' => false, 'error' => 'Неизвестная операция']); break; } exit; }