Vérifier les permissions de crontab
Garantit que /etc/crontab appartient à root et n'est ni modifiable ni lisible par le groupe ou les autres et ne porte aucun bit setuid/setgid/sticky ni exécution, afin que seul root puisse éditer la crontab système.
Vérifié sur le contenu d’un fichier de configuration persistant, la source de vérité qui survit aux redémarrages.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
/etc/crontab est la crontab système dont les entrées sont exécutées par le démon cron en tant qu'utilisateur indiqué sur chaque ligne, généralement root. S'il est modifiable par le groupe ou les autres, un attaquant peut y ajouter une ligne exécutant n'importe quelle commande en tant que root, compromission directe du système. S'il est lisible par le groupe/les autres, la planification ainsi que les chemins ou identifiants éventuellement présents sont exposés à la reconnaissance. Le restreindre au propriétaire empêche à la fois les modifications non autorisées et la divulgation.
Ce que vérifie Pavois
Pavois lit l'inode réel via file('/etc/crontab') et vérifie l'absence de lecture/écriture groupe/autres, de bit d'exécution et de setuid/setgid/sticky, avec une garde only_if qui l'ignore en cas d'absence. Inspecter les permissions effectives sur le disque détecte les dérives dues aux mises à jour de paquets, à un chmod manuel ou à des restaurations de sauvegarde, ce qu'une hypothèse sur un modèle de configuration manquerait.
only_if { file('/etc/crontab').exist? }
describe file('/etc/crontab') do
it { should_not be_executable.by('owner') }
it { should_not be_setuid }
it { should_not be_executable.by('group') }
it { should_not be_writable.by('group') }
it { should_not be_readable.by('group') }
it { should_not be_setgid }
it { should_not be_executable.by('other') }
it { should_not be_writable.by('other') }
it { should_not be_readable.by('other') }
it { should_not be_sticky }
endComment vérifier qu’elle est appliquée
Exécutez stat -c '%a %U %G' /etc/crontab. Attendu : mode 600 (ou plus strict), propriétaire root, groupe root, aucune lecture/écriture pour group ni other, aucun bit d'exécution, et aucun bit setuid/setgid/sticky.
Inspecter et investiguer
Aucun journal de service ne s'applique ; inspectez avec stat /etc/crontab ou ls -l /etc/crontab. Pour détecter une altération, ajoutez une surveillance auditd (auditctl -w /etc/crontab -p wa -k cron) et recherchez key="cron" dans /var/log/audit/audit.log.
Remédiation
Aucune remédiation automatique n'est définie ; appliquez-la manuellement : chown root:root /etc/crontab && chmod 600 /etc/crontab. Relancez le scan pour confirmer que la règle passe.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| group | root |
|---|---|
| mode | 0600 |
| owner | root |
| path | /etc/crontab |
| resource | file |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Risque si laissé mal configuré : un /etc/crontab modifiable par le groupe/les autres est un vecteur direct d'exécution de commandes root et de persistance ; lisible, il divulgue la planification et tout secret présent dans les lignes de tâches. Précautions : restreindre à root:root 600 est sans danger, le démon cron le lit en tant que root. Le changement est sans impact ; gardez simplement le propriétaire root:root pour que root puisse continuer à l'éditer.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| CIS | 2.2.6, 2.4.1.2 | direct | per OS, see the benchmark table | haute |
| NIST | AC-6(1), CM-6(a) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| PCI DSS | 2.2.6 | support | 4.0.1 | moyenne |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.