v0.7.0 : instance unique, handshake ré-affiché, sudoers fiabilisé, À propos refaite
- Instance unique : un second lancement réveille l'instance active. - Autostart et reconnexion auto activés par défaut (nouvelle installation). - Page « À propos » refaite en 5 onglets (contenu séparé dans app_info.py). - Corrige le handshake/RX-TX qui ne s'affichaient plus (wg show sans élévation). - Corrige le diagnostic sudo trompeur (sondes qui ne matchaient jamais les règles). - Corrige make setup-sudoers bloqué hors session graphique (pkexec -> sudo), idempotent. - Corrige le README : Kill Switch inexistant retiré, ordre d'élévation réel documenté.
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
## ──────────────────────────────────────────────
|
||||
|
||||
APP := wgsecure
|
||||
VERSION := 0.6.0
|
||||
VERSION := 0.7.0
|
||||
VENV := .venv
|
||||
PYTHON := $(VENV)/bin/python3
|
||||
PIP := $(VENV)/bin/pip
|
||||
@@ -193,12 +193,20 @@ print() if not rows else print(chr(10) + ' ⚠️ → lancez make setup-su
|
||||
@echo ""
|
||||
|
||||
# ── Droits sudo wg-quick sans dialogue de mot de passe ───────────────────────
|
||||
# `pkexec` (utilisé jusqu'ici) exige un agent d'authentification polkit
|
||||
# graphique : absent d'un terminal simple (SSH, tmux, session sans agent), il
|
||||
# reste bloqué en attente d'une réponse qui n'arrive jamais. `sudo` n'a pas ce
|
||||
# problème : lancé depuis un terminal, il y invite directement le mot de
|
||||
# passe, avec ou sans polkit. La cible est idempotente : elle recalcule les
|
||||
# règles à chaque lancement et n'invite pour un mot de passe que si le
|
||||
# contenu déjà installé diffère (donc jamais lors d'une relance sans
|
||||
# changement).
|
||||
setup-sudoers:
|
||||
@echo ""
|
||||
@echo " 🔧 Configuration sudoers (wg-quick + nettoyage réseau, sans mot de passe)…"
|
||||
@$(PYTHON) -c "\
|
||||
import os, subprocess, tempfile, shutil; \
|
||||
user = os.environ.get('USER', os.path.basename(os.path.expanduser('~'))); \
|
||||
user = os.environ.get('SUDO_USER') or os.environ.get('USER') or os.path.basename(os.path.expanduser('~')); \
|
||||
w = lambda n: shutil.which(n) or ''; \
|
||||
cmds = [c for c in ( \
|
||||
w('wg-quick'), \
|
||||
@@ -209,14 +217,19 @@ cmds = [c for c in ( \
|
||||
w('install') + ' -D -m 600 -o root -g root * /etc/wireguard/*' if w('install') else '', \
|
||||
) if c]; \
|
||||
rules = ''.join(user + ' ALL=(ALL) NOPASSWD: ' + c + chr(10) for c in cmds); \
|
||||
fd, tmp = tempfile.mkstemp(prefix='wgsecure_sudoers_', dir=os.path.expanduser('~')); \
|
||||
dest = '/etc/sudoers.d/wgsecure'; \
|
||||
current = subprocess.run(['sudo', '-n', 'cat', dest], capture_output=True, text=True); \
|
||||
already_ok = current.returncode == 0 and current.stdout == rules; \
|
||||
print(' ✅ Déjà configuré pour ' + user + ' — rien à faire.') if already_ok else None; \
|
||||
import sys; sys.exit(0) if already_ok else None; \
|
||||
fd, tmp = tempfile.mkstemp(prefix='wgsecure_sudoers_'); \
|
||||
os.write(fd, rules.encode()); os.close(fd); os.chmod(tmp, 0o600); \
|
||||
chk = subprocess.run(['visudo', '-cqf', tmp], capture_output=True); \
|
||||
ok = chk.returncode == 0; \
|
||||
r = subprocess.run(['pkexec', 'bash', '-c', 'install -m 440 -o root -g root ' + tmp + ' /etc/sudoers.d/wgsecure']) if ok else None; \
|
||||
r = subprocess.run(['sudo', 'install', '-m', '440', '-o', 'root', '-g', 'root', tmp, dest]) if ok else None; \
|
||||
os.unlink(tmp); \
|
||||
print(' ❌ Règles sudoers invalides, rien installé : ' + chk.stderr.decode().strip()) if not ok else \
|
||||
print(' ✅ /etc/sudoers.d/wgsecure configuré — plus de dialogue admin.' if r.returncode == 0 else ' ❌ Échec.')"
|
||||
print(' ✅ ' + dest + ' configuré pour ' + user + ' — plus de dialogue admin.' if r.returncode == 0 else ' ❌ Échec.')"
|
||||
@echo ""
|
||||
|
||||
# ── Réinitialisation du mot de passe administrateur ──────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user