From fd63d2d2fa0380fda6db087e0194b40cd479c97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Wed, 6 May 2026 20:54:43 +0900 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20Cockpit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/fix_cockpit_auth.sh | 81 +++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 scripts/fix_cockpit_auth.sh diff --git a/scripts/fix_cockpit_auth.sh b/scripts/fix_cockpit_auth.sh new file mode 100644 index 0000000..cef9d1a --- /dev/null +++ b/scripts/fix_cockpit_auth.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Virtuality Cockpit auth helper +# Checks Linux user password state and required groups for Cockpit/libvirt access. + +USER_NAME="${1:-${VIRTUALITY_USER:-${SUDO_USER:-root}}}" + +ESC="\033" +RESET="${ESC}[0m" +BOLD="${ESC}[1m" +GREEN="${ESC}[32m" +YELLOW="${ESC}[33m" +RED="${ESC}[31m" +CYAN="${ESC}[36m" +GRAY="${ESC}[90m" + +ok() { echo -e "${GREEN}✓${RESET} $*"; } +warn() { echo -e "${YELLOW}!${RESET} $*"; } +fail() { echo -e "${RED}✗${RESET} $*"; exit 1; } + +if [[ "$EUID" -ne 0 ]]; then + fail "Запусти от root: sudo bash scripts/fix_cockpit_auth.sh [user]" +fi + +clear 2>/dev/null || true +cat </dev/null 2>&1; then + fail "Пользователь ${USER_NAME} не найден" +fi +ok "Пользователь найден: ${USER_NAME}" + +HASH="$(getent shadow "$USER_NAME" | cut -d: -f2 || true)" +if [[ -z "$HASH" || "$HASH" == "!" || "$HASH" == "*" || "$HASH" == "!!" ]]; then + warn "У пользователя ${USER_NAME} пароль не задан или заблокирован" + echo + echo -e "${BOLD}Для входа в Cockpit задай пароль:${RESET}" + if [[ "$USER_NAME" == "root" ]]; then + echo " passwd root" + else + echo " sudo passwd ${USER_NAME}" + fi +else + ok "У пользователя ${USER_NAME} есть пароль" +fi + +if [[ "$USER_NAME" != "root" ]]; then + usermod -aG sudo "$USER_NAME" || true + usermod -aG libvirt "$USER_NAME" || true + usermod -aG kvm "$USER_NAME" || true + ok "Пользователь ${USER_NAME} добавлен в группы sudo/libvirt/kvm" + warn "Для применения групп нужно выйти из SSH и войти снова" +else + ok "root не требует добавления в группы" +fi + +systemctl enable --now cockpit.socket >/dev/null 2>&1 || fail "Не удалось запустить cockpit.socket" +ok "cockpit.socket включён и запущен" + +if command -v ufw >/dev/null 2>&1; then + ufw allow 9090/tcp >/dev/null 2>&1 || true + ok "UFW правило 9090/tcp добавлено/проверено" +fi + +systemctl restart cockpit.socket >/dev/null 2>&1 || true +ok "cockpit.socket перезапущен" + +SERVER_IP="$(hostname -I | awk '{print $1}')" + +echo +echo -e "${GREEN}${BOLD}Готово.${RESET}" +echo -e "${BOLD}Cockpit:${RESET} https://${SERVER_IP}:9090" +echo -e "${BOLD}Login:${RESET} ${USER_NAME}" +echo -e "${BOLD}Password:${RESET} пароль Linux-пользователя ${USER_NAME}" +echo