4.0 KiB
4.0 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Commandes de développement
# Lancer l'application (mode interactif, demande sudo automatiquement)
python3 -m securecheck
# Lancer sans sudo (pour tester sans élévation)
SECURECHECK_SKIP_SUDO=1 python3 -m securecheck
# Mode non interactif
python3 -m securecheck --dry-run --tasks system_update,lynis_audit
python3 -m securecheck --scenario baseline_workstation --run
python3 -m securecheck --list-scenarios
# Avec sudo (recommandé pour les tâches système réelles)
sudo -E python3 -m securecheck
# Installation locale
pip install .
# Build du binaire autonome (nécessite .venv avec pyinstaller)
python3 -m venv .venv
.venv/bin/pip install pyinstaller
./build_executable.sh
# Résultat dans dist/securecheck
Architecture
Flux d'exécution principal
__main__.py:main() orchestre tout :
ensure_root()— ré-exécute automatiquement avecsudo -Esi non root (saufSECURECHECK_SKIP_SUDO=1)detect_system()— détecte distro, gestionnaire de paquets, user invocanttask_catalog()+builtin_scenarios()— charge tâches et scénarios- En mode interactif :
SecureCheckTUI→ sélection →execute_tasks()→RunSummaryTUI - En mode non interactif : résolution des tâches via
--tasks/--scenario→execute_tasks()→ affichage terminal
Modules clés
models.py— dataclasses centrales :TaskDefinition,TaskResult,Scenariocatalog.py— registre de toutes les tâches (task_catalog()) et scénarios builtin (builtin_scenarios()). Utilisebind()pour attacher les handlers.tasks.py— implémentation de chaque tâche (une fonction par tâche). Chaque fonction reçoit(context: ExecutionContext, task: TaskDefinition)et retourneTaskResult.executor.py—ExecutionContext(contexte partagé par toutes les tâches) etCommandRunner(abstraction pour toutes les opérations système : paquets, fichiers, services, shell).execute_tasks()itère sur les tâches et capture les exceptions.app.py— TUI curses :SecureCheckTUI(menu principal) etRunSummaryTUI(résumé post-exécution)config.py—AppPathsetbuild_paths(): résolution XDG des chemins (config, state, logs). Logs dans/var/log/securechecksi root, sinon~/.local/state/securecheck/logs.storage.py—ScenarioStore: lecture/écriture des scénarios utilisateur dans~/.config/securecheck/scenarios.jsonsystem_info.py—SystemInfo+detect_system(): détecte OS, package manager, user réel (viaSUDO_USER), home, uid/gidstatus.py—collect_status(): sonde les services/composants pour le tableau d'état LEDassets.py— accès aux fichiers embarqués danssecurecheck/assets/(banner.txt, p10k.zsh, icônes)
Ajouter une nouvelle tâche
- Écrire la fonction dans
tasks.pyavec la signature(context: ExecutionContext, task: TaskDefinition) -> TaskResult - Enregistrer dans
catalog.py: ajouter unTaskDefinitiondanstask_catalog()et mapper son handler danshandlers - L'ajouter optionnellement à un
builtin_scenarios()existant
Conventions importantes
CommandRunnerest le seul point d'entrée pour les opérations système (jamaissubprocessdirectement danstasks.py)context.runner.write_text_file()est idempotent : ne réécrit pas si le contenu est identiquecontext.runner.update_package_index()est appelé une seule fois par exécution (flag_package_index_updated)- Le
target_userdansSystemInfoest l'utilisateur réel ayant lancésudo, pas root --dry-run: toutes les opérations système sont simulées, les commandes sont loggées sans être exécutées
Emplacements runtime
- Scénarios :
~/.config/securecheck/scenarios.json - Logs :
/var/log/securecheck/(root) ou~/.local/state/securecheck/logs/ - Rapports par exécution :
<log_dir>/run-YYYYMMDD-HHMMSS.log - Rapports tâches (lynis, rootkits) :
<log_dir>/reports/