admin_guard.py (1536B)
1 #!/usr/bin/env python3 2 """ 3 Proteção comum para scripts administrativos do runv.club. 4 5 Regra: 6 - só operadores administrativos autorizados podem executar os entrypoints protegidos 7 - a conta root directa também é aceite 8 - a lista de operadores pode ser ajustada com RUNV_ADMIN_USERS=nome1,nome2 9 """ 10 11 from __future__ import annotations 12 13 import getpass 14 import os 15 import sys 16 from typing import Final 17 18 DEFAULT_ALLOWED_ADMIN_USERS: Final[tuple[str, ...]] = ("pmurad-admin",) 19 20 21 def resolve_allowed_admin_users() -> set[str]: 22 raw = os.environ.get("RUNV_ADMIN_USERS", "").strip() 23 if not raw: 24 return set(DEFAULT_ALLOWED_ADMIN_USERS) 25 names = {part.strip() for part in raw.split(",") if part.strip()} 26 return names or set(DEFAULT_ALLOWED_ADMIN_USERS) 27 28 29 def resolve_operator_user() -> str: 30 sudo_user = os.environ.get("SUDO_USER", "").strip() 31 if sudo_user: 32 return sudo_user 33 user = os.environ.get("USER", "").strip() 34 if user: 35 return user 36 return getpass.getuser().strip() 37 38 39 def ensure_admin_cli(*, script_name: str, dry_run: bool = False) -> str: 40 operator = resolve_operator_user() or "root" 41 if operator == "root": 42 return operator 43 allowed = resolve_allowed_admin_users() 44 if operator in allowed: 45 return operator 46 allowed_list = ", ".join(sorted(allowed)) 47 print( 48 f"Acesso negado em {script_name}: operador {operator!r} não está autorizado. " 49 f"Permitidos: root, {allowed_list}.", 50 file=sys.stderr, 51 ) 52 raise SystemExit(1)