82 строки
2.6 KiB
Bash
82 строки
2.6 KiB
Bash
#!/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 <<EOF
|
|
${CYAN}${BOLD}Virtuality Cockpit auth check${RESET}
|
|
${GRAY}User:${RESET} ${USER_NAME}
|
|
EOF
|
|
|
|
echo
|
|
|
|
if ! id "$USER_NAME" >/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
|