linux:rewinged
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| linux:rewinged [2026/09/12 08:41] – root | linux:rewinged [2026/09/18 17:40] (Version actuelle) – [13.2 Règles personnalisées] root | ||
|---|---|---|---|
| Ligne 130: | Ligne 130: | ||
| Restart=on-failure | Restart=on-failure | ||
| RestartSec=5 | RestartSec=5 | ||
| + | |||
| + | # Journalisation vers fichier, pour collecte Wazuh en JSON natif | ||
| + | StandardOutput=append:/ | ||
| + | StandardError=append:/ | ||
| # Durcissement | # Durcissement | ||
| Ligne 141: | Ligne 145: | ||
| MemoryDenyWriteExecute=true | MemoryDenyWriteExecute=true | ||
| ReadOnlyPaths=/ | ReadOnlyPaths=/ | ||
| - | ReadWritePaths=/ | + | ReadWritePaths=/ |
| [Install] | [Install] | ||
| Ligne 148: | Ligne 152: | ||
| <code bash> | <code bash> | ||
| + | mkdir -p / | ||
| + | chown rewinged: | ||
| + | |||
| systemctl daemon-reload | systemctl daemon-reload | ||
| systemctl enable --now rewinged | systemctl enable --now rewinged | ||
| systemctl status rewinged | systemctl status rewinged | ||
| </ | </ | ||
| + | |||
| + | Rotation du journal : | ||
| + | |||
| + | <file - / | ||
| + | / | ||
| + | daily | ||
| + | rotate 30 | ||
| + | compress | ||
| + | missingok | ||
| + | notifempty | ||
| + | copytruncate | ||
| + | su rewinged rewinged | ||
| + | } | ||
| + | </ | ||
| ===== 4. Pare-feu de la VM ===== | ===== 4. Pare-feu de la VM ===== | ||
| Ligne 290: | Ligne 311: | ||
| if [ " | if [ " | ||
| - | logger -t winget-sync " | + | |
| + | if ! git verify-commit HEAD >/ | ||
| + | logger -t winget-sync -p auth.crit \ | ||
| + | " | ||
| + | git reset --hard " | ||
| + | exit 1 | ||
| + | fi | ||
| + | | ||
| fi | fi | ||
| exit 0 | exit 0 | ||
| </ | </ | ||
| + | |||
| + | Le bloc '' | ||
| + | clé publique du signataire est présente dans le trousseau du compte | ||
| + | '' | ||
| + | est ce qui rend la détection Wazuh exploitable (13.3). | ||
| <code bash> | <code bash> | ||
| Ligne 479: | Ligne 512: | ||
| clients. Sans conséquence sur l' | clients. Sans conséquence sur l' | ||
| - | ==== 9.4 Alternative | + | ==== 9.4 Alternative |
| - | RustDesk Server Pro permet d' | + | Le paquet par client existe parce que le mot de passe non-surveillé est |
| - | mot de passe **après** installation, | + | préconfiguré dans le MSI. Ce mot de passe peut aussi être posé **après** |
| + | installation, | ||
| - | <code> | + | === Ce qui n'est pas possible === |
| - | RustDesk.exe --assign --token | + | |
| - | --address_book_name " | + | Le mot de passe permanent **ne se propage pas par API ni par stratégie**. |
| - | --address_book_alias | + | C'est un secret local à la machine. La demande d'en faire un paramètre de |
| - | </code> | + | stratégie Pro est ouverte depuis 2023 et n'a pas abouti. |
| + | |||
| + | Ne pas confondre trois objets distincts : | ||
| + | |||
| + | ^ Élément ^ Où il vit ^ Comment il se pose ^ | ||
| + | | Mot de passe permanent | Sur la machine, haché localement | '' | ||
| + | | Mot de passe du carnet | Côté serveur Pro | '' | ||
| + | | Stratégie Pro | Côté serveur Pro | Réglages client, **hors** mot de passe | | ||
| + | |||
| + | Le premier authentifie les connexions entrantes. Le second est celui que le | ||
| + | client technicien utilise pour remplir automatiquement le champ. | ||
| + | |||
| + | === Le flux en deux temps === | ||
| + | |||
| + | Le secret naît sur la machine, puis remonte vers le serveur. | ||
| + | |||
| + | <file powershell onboard-rustdesk.ps1> | ||
| + | $rd = " | ||
| + | |||
| + | # 1. Generer un mot de passe propre a CETTE machine | ||
| + | $pw = -join ((48..57)+(65..90)+(97..122) | Get-Random -Count 20 | % {[char]$_}) | ||
| + | |||
| + | # 2. Le poser localement | ||
| + | & $rd --password $pw | ||
| + | |||
| + | # 3. Recuperer l'ID attribue | ||
| + | $id = (& $rd --get-id).Trim() | ||
| + | |||
| + | # 4. Rattacher au carnet du client et y stocker le mot de passe | ||
| + | & $rd --assign | ||
| + | | ||
| + | --address_book_name " | ||
| + | --address_book_alias | ||
| + | --address_book_password $pw | ||
| + | |||
| + | # 5. Archiver dans Vaultwarden (ID + mot de passe) | ||
| + | </ | ||
| + | |||
| + | === Ce que cela change === | ||
| + | |||
| + | * **Un seul manifest** RustDesk pour l' | ||
| + | * **Un mot de passe par machine** au lieu d'un par client : la fuite d'un | ||
| + | secret n' | ||
| + | * Plus de régénération de MSI à chaque release | ||
| + | * Prérequis : Server Pro 1.5.8 et client 1.4.1 pour '' | ||
| + | |||
| + | === À valider avant de basculer === | ||
| + | |||
| + | <WRAP center round important> | ||
| + | Un dysfonctionnement de '' | ||
| + | signalé en mai 2025 : la commande retourne sans effet. Tester sur un poste | ||
| + | témoin, service arrêté puis démarré, avant de bâtir l' | ||
| + | </WRAP> | ||
| - | Cette voie autorise un paquet unique pour tout le parc, la différenciation | + | Vérifier également que le token API utilisé porte les seules permissions |
| - | passant | + | '' |
| - | 1.4.1 minimum. À réévaluer si la charge | + | script |
| + | Vaultwarden au moment | ||
| ===== 10. Extraction des codes MSI ===== | ===== 10. Extraction des codes MSI ===== | ||
| Ligne 632: | Ligne 719: | ||
| ===== 13. Surveillance Wazuh ===== | ===== 13. Surveillance Wazuh ===== | ||
| - | ==== 13.1 FIM ==== | + | Trois sources distinctes : l' |
| + | rewinged, et l' | ||
| - | <file xml ossec.conf> | + | ==== 13.1 Configuration de l' |
| - | <syscheck> | + | |
| - | < | + | <file xml / |
| - | / | + | <ossec_config> |
| - | | + | |
| - | < | + | |
| - | / | + | < |
| - | | + | < |
| - | < | + | < |
| - | / | + | |
| - | </ | + | <!-- Manifests : decident de ce que le parc installe --> |
| - | </ | + | |
| + | tags=" | ||
| + | |||
| + | <!-- Installeurs : les binaires servis aux postes --> | ||
| + | | ||
| + | tags=" | ||
| + | |||
| + | <!-- Binaire rewinged et script de synchronisation --> | ||
| + | | ||
| + | tags=" | ||
| + | |||
| + | <!-- Unites systemd du service --> | ||
| + | < | ||
| + | | ||
| + | |||
| + | <!-- Bruit git interne --> | ||
| + | <ignore type=" | ||
| + | | ||
| + | |||
| + | <!-- Journal applicatif rewinged, deja en JSON --> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <!-- Etat des services, toutes les 5 minutes --> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | </ | ||
| </ | </ | ||
| - | ==== 13.2 Réduction du bruit ==== | + | Le journal de '' |
| + | collecté par la configuration Wazuh par défaut. | ||
| - | La FIM se déclenche à chaque | + | ==== 13.2 Règles personnalisées ==== |
| - | légitime | + | |
| + | <file xml / | ||
| + | <group name=" | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | <field name=" | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | <field name=" | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | <field name=" | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | <field name=" | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | <field name=" | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <rule id=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important> | ||
| + | Les identifiants 100600–100631 sont donnés à titre indicatif. Les adapter à | ||
| + | la numérotation des règles personnalisées déjà en place. | ||
| + | </ | ||
| + | |||
| + | ==== 13.3 Traiter le bruit FIM ==== | ||
| + | |||
| + | La FIM se déclenche à chaque | ||
| + | nativement « alerter sauf si précédé de tel événement », il faut donc déplacer | ||
| + | le contrôle plutôt que tenter de corréler. | ||
| + | |||
| + | **Approche retenue** : la signature GPG des commits est le contrôle réel. | ||
| + | |||
| + | - Les commits | ||
| + | dans le trousseau du compte | ||
| + | - '' | ||
| + | d' | ||
| + | - La FIM sur '' | ||
| + | elle n' | ||
| + | - L' | ||
| + | |||
| + | Une modification de manifest effectuée directement sur le serveur ne passe pas | ||
| + | par un commit, donc ne déclenche pas 100611 — mais elle sera écrasée au | ||
| + | prochain '' | ||
| + | |||
| + | Les installeurs et les binaires, eux, ne changent pas hors publication : leurs | ||
| + | règles restent à niveau élevé. | ||
| + | |||
| + | ==== 13.4 Mise en place de la signature ==== | ||
| + | |||
| + | Côté poste de publication : | ||
| + | |||
| + | <code bash> | ||
| + | git config --global user.signingkey < | ||
| + | git config --global commit.gpgsign true | ||
| + | gpg --export --armor < | ||
| + | </ | ||
| + | |||
| + | Côté serveur rewinged : | ||
| + | |||
| + | <code bash> | ||
| + | sudo -u rewinged gpg --import mis-publication.pub | ||
| + | sudo -u rewinged gpg --edit-key < | ||
| + | sudo -u rewinged git -C /srv/winget verify-commit HEAD | ||
| + | </ | ||
| - | * signer les commits en GPG et vérifier | + | Idéalement |
| - | avant application — un fichier modifié sans commit signé devient alors une | + | l' |
| - | alerte non ambiguë | + | |
| - | * à défaut, corréler | + | |
| - | ==== 13.3 Alertes complémentaires | + | ==== 13.5 Ce qui reste non couvert |
| - | * arrêt du service | + | * **Publication légitime mais erronée** — un mauvais |
| - | * échecs répétés | + | ou un SHA256 incorrect signé |
| - | | + | Le garde-fou est la revue de la PR, pas la détection. |
| - | * volumétrie anormale de téléchargements sur ''/ | + | * **Compromission du poste de publication** |
| - | * saturation | + | utilisable par un attaquant, la chaîne entière est valide de son point de |
| + | | ||
| + | * **Saturation | ||
| + | | ||
| ===== 14. Points ouverts ===== | ===== 14. Points ouverts ===== | ||
| Ligne 673: | Ligne 914: | ||
| | Server 2019/2022 | Inventorier la proportion dans le parc | | | Server 2019/2022 | Inventorier la proportion dans le parc | | ||
| | Upgrade RustDesk | Vérifier que la mise à jour préserve '' | | Upgrade RustDesk | Vérifier que la mise à jour préserve '' | ||
| + | | '' | ||
| | Rétention LFS | Définir une politique de purge des anciennes versions d' | | Rétention LFS | Définir une politique de purge des anciennes versions d' | ||
| | Quota Forgejo | Dimensionner le stockage LFS et surveiller sa croissance | | | Quota Forgejo | Dimensionner le stockage LFS et surveiller sa croissance | | ||
linux/rewinged.1789202518.txt.gz · Dernière modification : de root
