Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
puppet-os-hardening — Ce module Puppet fournit de nombreuses configurations liées à la sécurité, offrant une protection de base complète. | Kitploit
Outils/GitHubGitHub/dev-sec/puppet-os-hardening
Sécurité de l'Infrastructure CloudScanners de VulnérabilitésAudit de ConfigurationSécurité RéseauDevSecOpsAuthentification
GitHubdev-sec/puppet-os-hardening

puppet-os-hardening

Ce module Puppet fournit de nombreuses configurations liées à la sécurité, offrant une protection de base complète.

Voir le dépôt
29110014il y a 1 moisVérifié par Kitploit
Site web

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Durcissement du système d'exploitation Puppet

Puppet Forge Version Puppet Forge Downloads Puppet Forge Endorsement Build Status

Table des matières

  1. Description du module - Ce que fait le module et pourquoi il est utile
  2. Configuration - Les bases pour démarrer avec os_hardening
    • Exigences de configuration
    • Démarrage avec os_hardening
  3. Utilisation - Options de configuration et fonctionnalités supplémentaires
    • Important pour Puppet Enterprise
    • Paramètres
  • Utilisation de Hiera
  • Remarque sur les paquets souhaités/non souhaités et les services désactivés
  • Limitations - Compatibilité des systèmes d'exploitation, etc.
  • Développement - Guide pour contribuer au module
  • Tests - Critères de qualité pour vos modifications dans le code
    • Tests locaux
    • Tests PDK
    • Tests d'intégration (Docker)
    • Tests d'intégration (DigitalOcean)
    • Tests CI des PR et forks
  • Contactez-nous
  • Contributeurs + remerciements
  • Licence et auteur
  • Description du module

    Ce module Puppet fournit une configuration sécurisée de votre système d'exploitation de base avec durcissement et fait partie du DevSec Hardening Framework.

    Configuration

    Exigences de configuration

    • Puppet OpenSource ou Enterprise
    • Module stdlib
    • Module sysctl

    Démarrage avec os_hardening

    Après avoir ajouté ce module, vous pouvez utiliser la classe :

    root@kitploit:~
    class { 'os_hardening': }
    

    Tous les paramètres sont contenus dans la classe principale os_hardening, vous devez donc simplement les passer comme ceci :

    root@kitploit:~
    class { 'os_hardening':
      enable_ipv4_forwarding => true,
    }
    

    Utilisation

    IMPORTANT pour Puppet Enterprise

    Si vous utilisez ce module dans un environnement PE, vous devez définir pe_environment = true Sinon, Puppet générera une erreur (ressource en double) !

    Paramètres

    • system_environment = 'default' définit le contexte dans lequel le système fonctionne. Certaines options ne fonctionnent pas pour docker/lxc
    • pe_environment = false définissez ceci sur true si vous utilisez Puppet Enterprise IMPORTANT - voir ci-dessus
    • extra_user_paths = [] ajoute des chemins supplémentaires à la variable PATH de l'utilisateur (vide par défaut).
    • umask = undef umask utilisé pour la création de nouveaux répertoires personnels par useradd / newusers (par ex. '027')
    • maildir = undef chemin pour maildir (par ex. '/var/mail')
    • usergroups = true true si vous voulez des groupes séparés pour chaque utilisateur, false sinon
    • sys_uid_min = undef et sys_gid_min = undef remplace le paramètre par défaut pour login.defs
    • password_max_age = 60 âge maximal du mot de passe
    • password_min_age = 7 âge minimal du mot de passe (avant d'autoriser tout autre changement de mot de passe)
    • password_warn_age = 7 jours d'avertissement avant l'échéance du changement de mot de passe
    • login_retries = 5 le nombre maximal de tentatives de connexion si le mot de passe est incorrect (normalement remplacé par PAM / auth_retries)
    • login_timeout = 60 délai d'authentification en secondes, la connexion se terminera si ce temps est dépassé
    • chfn_restrict = '' quels champs peuvent être modifiés par les utilisateurs réguliers avec chfn
    • allow_login_without_home = false true pour autoriser les utilisateurs sans répertoire personnel à se connecter
    • allow_change_user = false si un utilisateur peut utiliser su pour changer sa connexion
    • ignore_users = [] tableau des comptes d'utilisateurs système qui ne doivent pas être durcis (mot de passe désactivé et shell défini sur /usr/sbin/nologin)
    • folders_to_restrict = ['/usr/local/games','/usr/local/sbin','/usr/local/bin','/usr/bin','/usr/sbin','/sbin','/bin'] dossiers pour lesquels il faut s'assurer que le groupe et les autres n'ont pas d'accès en écriture, ni sur le dossier ni sur son contenu
    • ignore_max_files_warnings = false true si vous ne voulez pas que Puppet journalise les avertissements max_files et de performance lors de la récursion des dossiers avec > 1000 fichiers, par ex. /bin /usr/bin
    • recurselimit = 5 profondeur de répertoire pour la vérification récursive des permissions
    • passwdqc_enabled = true true si vous voulez utiliser une vérification forte des mots de passe dans PAM avec passwdqc
    • auth_retries = 5 le nombre maximal de tentatives d'authentification, avant que le compte soit verrouillé pendant un certain temps
    • auth_lockout_time = 600 temps en secondes qui doit s'écouler, si le compte a été verrouillé en raison de trop nombreuses tentatives d'authentification échouées
    • passwdqc_options = 'min=disabled,disabled,16,12,8' définissez sur toute ligne d'options (sous forme de chaîne) que vous voulez passer à passwdqc
    • manage_pam_unix = false true si vous voulez que pam_unix soit géré par ce module
    • enable_pw_history = true true si vous voulez que pam_unix mémorise l'historique des mots de passe pour empêcher la réutilisation des mots de passe (nécessite manage_pam_unix = true)
    • pw_remember_last = 5 le nombre des derniers mots de passe (par ex. 5 empêchera l'utilisateur de réutiliser l'un de ses 5 derniers mots de passe)
    • only_root_may_su = false true lorsque seul root et les membres du groupe wheel peuvent utiliser su, doit être true pour la conformité CIS Benchmark
    • root_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6'] TTY enregistrés pour root
    • whitelist = [] tous les fichiers qui doivent conserver leurs bits SUID/SGID s'ils sont définis (seront combinés avec la liste blanche prédéfinie de fichiers)
    • blacklist = [] tous les fichiers dont les bits SUID/SGID doivent être supprimés s'ils sont définis (seront combinés avec la liste noire prédéfinie de fichiers)
    • remove_from_unknown = false true si vous voulez supprimer les bits SUID/SGID de tout fichier qui n'est pas explicitement configuré dans une blacklist. Cela fera rechercher à chaque exécution de Puppet les bits SUID/SGID dans les systèmes de fichiers montés qui ne sont pas configurés dans la liste noire par défaut et celle de l'utilisateur. S'il trouve un bit SUID/SGID, il sera supprimé, sauf si ce fichier est dans votre whitelist.
    • dry_run_on_unknown = false comme remove_from_unknown ci-dessus, sauf que les bits SUID/SGID ne sont pas supprimés. Il recherchera toujours les bits SUID/SGID dans les systèmes de fichiers mais les affichera uniquement dans votre journal. Cette option n'est recommandée que lorsque vous configurez d'abord remove_from_unknown pour les bits SUID/SGID, afin de pouvoir voir les fichiers qui sont modifiés et d'ajuster votre whitelist et votre blacklist.
    • enable_module_loading = true true si vous voulez être autorisé à modifier les modules du noyau une fois que le système est en cours d'exécution (par ex. modprobe, rmmod)
    • load_modules = [] charge ces modules via initramfs si enable_module_loading est false
    • disable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf'] tableau des systèmes de fichiers (modules du noyau) qui doivent être désactivés
    • cpu_vendor = 'intel' requis uniquement si enable_module_loading = false : définit le fabricant du CPU pour les modules à charger
    • icmp_ratelimit = '100' valeur par défaut '100', permet la surcharge, nécessite une chaîne
    • desktop_enabled = false true s'il s'agit d'un système de bureau, c'est-à-dire Xorg, KDE/GNOME/Unity, etc.
    • enable_ipv4_forwarding = false true si ce système nécessite le transfert de paquets en IPv4 (par ex. routeur), false sinon
    • manage_ipv6 = true true pour durcir la configuration IPv6, false pour ignorer complètement IPv6
    • enable_ipv6 = false false pour désactiver IPv6 sur ce système, true pour l'activer
    • enable_ipv6_forwarding = false true si ce système nécessite le transfert de paquets en IPv6 (par ex. routeur), false sinon
    • arp_restricted = true true si vous voulez que le comportement d'annonce et de réponse à ARP soit restreint, false sinon
    • arp_ignore_samenet = false true supprimera les paquets qui ne proviennent pas du même sous-réseau (arp_ignore = 2), false vérifiera uniquement l'IP cible (arp_ignore = 1)
    • enable_sysrq = false true pour activer la touche magique sysrq, false sinon
    • enable_core_dump = false false pour empêcher la création de fichiers core dump, true sinon
    • enable_stack_protection = true pour la randomisation de la disposition de l'espace d'adressage (ASLR). L'ASLR peut aider à contrer certains types d'attaques par débordement de tampon. L'ASLR peut placer la base, les bibliothèques, le tas et la pile à des positions aléatoires dans l'espace d'adressage d'un processus, ce qui rend difficile pour un programme attaquant de prédire l'adresse mémoire de la prochaine instruction.
    • enable_rpfilter = true true pour activer le filtrage du chemin inverse (rejeter les paquets frauduleux), false sinon
    • rpfilter_loose = false (uniquement si enable_rpfilter est true) mode souple (rp_filter = 2) si true, mode strict sinon
    • enable_log_martians = true true pour activer la journalisation des paquets réseau suspects / non routables, false sinon ATTENTION - cela peut générer d'énormes fichiers journaux !
    • unwanted_packages = [] paquets qui doivent être supprimés du système
    • wanted_packages = [] paquets qui doivent être ajoutés au système
    • disabled_services = [] services qui ne doivent pas être activés
    • enable_grub_hardening = false définissez sur true pour activer certaines règles de durcissement de grub
    • grub_user = 'root' le nom d'utilisateur grub qui doit être fourni lors de la modification de la configuration à l'invite grub
    • grub_password_hash = '' un hachage de mot de passe créé avec grub-mkpasswd-pbkdf2 qui est associé au grub_user
    • boot_without_password = true configure Grub pour qu'il ne demande un mot de passe que lors de la modification d'une entrée, pas lors du démarrage d'une entrée existante
    • system_umask = undef si cette variable est définie, configure l'umask pour tous les utilisateurs du système (par ex. '027')
    • manage_home_permissions = false définissez sur true pour gérer les permissions des fichiers et répertoires des utilisateurs locaux (g-w,o-rwx)
    • ignore_home_users = [] tableau des utilisateurs qui ne doivent pas être restreints par manage_home_permissions
    • manage_log_permissions = false définissez sur true pour gérer les permissions des fichiers journaux (g-wx,o-rwx)
    • restrict_log_dir = ['/var/log/'] définit le répertoire journal principal
    • ignore_restrict_log_dir = [] tableau pour exclure les répertoires journaux sous le répertoire journal principal
    • ignore_files_in_folder_to_restrict = [] tableau pour ignorer les fichiers à durcir dans les répertoires sous le tableau folder_to_restrict
    • manage_cron_permissions = false définissez sur true pour gérer les permissions des fichiers cron (og-rwx)
    • enable_sysctl_config = true définissez sur false pour désactiver la configuration sysctl
    • manage_system_users = true définissez sur false pour désactiver la gestion des utilisateurs système (mot de passe vide et définition du shell nologin)
    • shadow_group = undef remplace la propriété du groupe de /etc/shadow
    • shadow_mode = undef remplace les permissions de fichier de /etc/shadow

    Utilisation de Hiera

    Il est également possible de définir les paramètres dans Hiera comme ceci :

    root@kitploit:~
    os_hardening::password_max_age:  90
    os_hardening::password_min_age:  0
    os_hardening::password_warn_age: 14
    os_hardening::unwanted_packages: ['telnet']
    os_hardening::ignore_users:      ['git','githook','ansible','apache','puppetboard']
    

    Remarque sur les paquets souhaités/non souhaités et les services désactivés

    Comme le CIS Distribution Independent Linux Benchmark est un bon point de départ concernant le durcissement des systèmes, il a été jugé approprié d'implémenter un moyen simple de gérer les cas ponctuels pour lesquels on ne souhaite pas écrire un module entier.

    Par exemple, pour augmenter la conformité CIS DIL sur un système Debian, il faut définir ce qui suit :

    root@kitploit:~
    wanted_packages   => ['ntp'],
    unwanted_packages => ['telnet'],
    disabled_services => ['rsync'],
    

    Les paramètres par défaut de NTP sont en réalité assez bons pour la plupart des situations, il n'est donc pas immédiatement nécessaire d'implémenter un module. Cependant, si vous utilisez un module pour contrôler ces services, c'est bien sûr préférable.

    Limitations

    Ce module a été testé et devrait fonctionner sur la plupart des distributions Linux. Pour une liste exhaustive des systèmes d'exploitation pris en charge, consultez metadata.json

    Développement

    Si vous souhaitez contribuer, veuillez suivre notre guide de contribution.

    Tests

    Tests locaux

    Vous devez avoir un interpréteur Ruby installé sur votre système. Il peut être judicieux d'utiliser rvm à cette fin. En plus de cela, vous devez installer le Puppet Development Kit PDK et Docker Community Edition, car les tests d'intégration s'exécutent dans des conteneurs Docker.

    Pour tous nos tests d'intégration, nous utilisons test-kitchen. Si vous n'êtes pas familier avec test-kitchen, veuillez consulter leur guide.

    Tests PDK

    root@kitploit:~
    # Tests de syntaxe et de lint
    pdk validate
    
    # Tests unitaires
    pdk test unit
    

    Tests d'intégration (Docker)

    Par défaut, les tests d'intégration s'exécutent dans des conteneurs Docker - malheureusement, tous les tests ne peuvent pas s'exécuter dans des environnements conteneurisés (par ex. les paramètres sysctl).

    root@kitploit:~
    # Installation des dépendances
    gem install bundler
    bundle install
    
    # liste toutes les instances de test
    bundle exec kitchen list
    
    # test rapide sur une machine
    bundle exec kitchen test ubuntu-16-04-puppet5
    
    # test sur toutes les machines
    bundle exec kitchen test
    

    Tests d'intégration (DigitalOcean)

    Pour des tests d'intégration complets avec DigitalOcean, vous devez y créer un compte et configurer certaines variables d'environnement :

    • KITCHEN_LOCAL_YAML=kitchen.do.yml
    • DIGITALOCEAN_ACCESS_TOKEN - jeton d'accès pour DigitalOcean
    • DIGITALOCEAN_SSH_KEY_IDS - ID dans DigitalOcean de votre clé ssh, voir ceci pour plus d'informations

    La clé ssh doit être nommée ~/.ssh/do_ci et ajoutée à votre profil sur DigitalOcean. Après cela, vous êtes prêt à exécuter les tests comme décrit dans Tests d'intégration (Docker).

    Si vous souhaitez exécuter les tests d'intégration complets avec Github Actions dans votre fork, vous devrez ajouter ces variables d'environnement dans les paramètres de votre fork :

    • KITCHEN_LOCAL_YAML=kitchen.do.yml
    • DIGITALOCEAN_ACCESS_TOKEN - jeton d'accès pour DigitalOcean
    • CI_SSH_KEY - partie privée d'une clé ssh, disponible sur DigitalOcean pour vos instances, sous forme encodée en base64 (par ex. cat id_rsa | base64 -w0 ; echo)
    • DIGITALOCEAN_SSH_KEY_IDS - ID dans DigitalOcean de CI_SSH_KEY, voir ceci pour plus d'informations

    Tests CI des PR et forks

    Vos correctifs seront automatiquement testés via Github Actions. Le résumé des tests est visible sur Github dans votre PR, les détails se trouvent dans les tests liés.

    Contactez-nous

    Vous pouvez nous joindre de plusieurs manières :

    • @DevSecIO sur Twitter
    • Liste de diffusion pour les questions et discussions générales : [email protected] [s'abonner]
    • Liste de diffusion avec les annonces de versions (aucun message ne peut y être publié) : [email protected] [s'abonner]

    Contributeurs + remerciements

    • Dominik Richter arlimus
    • Edmund Haselwanter ehaselwanter
    • Christoph Hartmann chris-rock
    • Thomas Dütsch a-tom
    • Patrick Meier atomic111
    • Artem Sidorenko artem-sidorenko
    • Kurt Huwig kurthuwig
    • Matthew Haughton 3flex
    • Reik Keutterling spielkind
    • Daniel Dreier danieldreier
    • Timo Goebel timogoebel
    • Tristan Helmich fadenb
    • Michael Geiger mcgege
    • Timo Bergemann LooOOooM

    Pour le portage original de chef-os-hardening vers puppet :

    • Artem Sidorenko artem-sidorenko
    • Frank Kloeker eumel8

    Merci à tous !!

    Licence et auteur

    • Auteur:: Dominik Richter [email protected]
    • Auteur:: Deutsche Telekom AG

    Sous licence Apache License, Version 2.0 (la « Licence ») ; vous ne pouvez pas utiliser ce fichier sauf en conformité avec la Licence. Vous pouvez obtenir une copie de la Licence à l'adresse

    root@kitploit:~
      http://www.apache.org/licenses/LICENSE-2.0
    

    Sauf si requis par la loi applicable ou convenu par écrit, le logiciel distribué sous la Licence est distribué sur une base « EN L'ÉTAT », SANS GARANTIES NI CONDITIONS D'AUCUNE SORTE, expresses ou implicites. Voir la Licence pour le langage spécifique régissant les permissions et les limitations sous la Licence.

    Télécharger l’outil