PmaControl logo PmaControl
  • Accueil
  • PmaControl
    • Agents IA 13 agents on-premise
    • Nos offres Community, Cloud, On-Premise, Premium
    • Documentation Guides, API, architecture
    • Clients 28+ entreprises
    • FAQ 25 questions / 7 catégories
    Bases de données
    • MariaDB 30 articles
    • MySQL 10 articles
    • Galera Cluster 6 articles
    • MaxScale 3 articles
    • ProxySQL 2 articles
    • Amazon Aurora MySQL 0 article
    • Azure Database 0 article
    • ClickHouse 0 article
    • GCP CloudSQL 0 article
    • Percona Server 0 article
    • SingleStore 0 article
    • TiDB 0 article
    • Vitess 0 article
    Solutions
    • Support 24×7 Urgences MariaDB & MySQL
    • Observabilité SQL Monitoring, alertes, topologie
    • Haute disponibilité Réplication, failover, Galera
    • Disaster Recovery Backup, restore, RPO/RTO
    • Sécurité & conformité Audit, RGPD, SOC2
    • Migration & upgrade Zero downtime, pt-osc, gh-ost
  • Nos offres
  • Ressources
    • Documentation Guides techniques & API
    • FAQ 25 questions fréquentes
    • Témoignages Retours clients & cas d'usage
    • Blog Articles & insights
    • Roadmap Fonctionnalités à venir
    Domaines d'expertise
    • Observabilité SQL Monitoring, alertes, topologie Dot3
    • Haute disponibilité Réplication, failover, Galera
    • Sécurité & conformité Audit, RGPD, SOC2, ISO 27001
    • Disaster Recovery Backup, restore, RPO/RTO
    • Performance & optimisation Digests, EXPLAIN, tuning
    • Migration & upgrade Zero downtime, pt-osc
    Liens rapides
    • Wiki GitHub 26 pages — install, engine, plugins
    • Code source Repository GitHub officiel
    • Support 24×7 Urgences MariaDB & MySQL
    • Réserver une démo 30 min — architecture réelle
  • Support 24×7
  • Réserver une démo
Réserver une démo
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文
← Retour au blog

Cybersécurité MariaDB : round 2

Publié le 8 juin 2025 Par Sylvain ARBAUDIE
mariadb security hardening systemd selinux
Partager X LinkedIn Facebook Email PDF
Cybersécurité MariaDB : round 2

Au-delà des fondamentaux

Le premier round de sécurité MariaDB / MySQL couvre les bases : mots de passe forts, utilisateurs minimaux, TLS activé, pare-feu configuré. Le round 2 va plus loin. On entre dans le territoire du hardening avancé — des techniques que peu de DBA implémentent mais qui font la différence face à un attaquant déterminé.

init_file : le script silencieux

La variable init_file de MariaDB / MySQL permet de spécifier un fichier SQL qui sera exécuté automatiquement au démarrage du serveur. C'est un outil puissant pour le hardening :

[mysqld]
init_file = /etc/mysql/conf.d/init_security.sql

Le fichier init_security.sql peut contenir :

-- Désactiver les comptes par défaut
ALTER USER 'root'@'localhost' ACCOUNT LOCK;

-- Révoquer les privilèges excessifs
REVOKE ALL PRIVILEGES ON *.* FROM 'app_user'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%';

-- Supprimer les bases de test
DROP DATABASE IF EXISTS test;

-- Activer l'audit
INSTALL SONAME 'server_audit';
SET GLOBAL server_audit_logging = ON;

L'avantage : même si un attaquant modifie la base pendant une intrusion, le redémarrage du serveur restaure automatiquement la configuration sécurisée.

LUKS : chiffrement du filesystem

Les données MariaDB au repos doivent être chiffrées. InnoDB supporte le chiffrement de tablespace natif, mais LUKS (Linux Unified Key Setup) offre une protection plus complète : il chiffre tout le filesystem, y compris les logs, les fichiers temporaires et les fichiers de configuration.

# Créer un volume chiffré LUKS pour le datadir
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 mariadb_data
mkfs.ext4 /dev/mapper/mariadb_data
mount /dev/mapper/mariadb_data /var/lib/mysql

La clé LUKS ne doit jamais être stockée sur le même disque que les données. Utilisez un module TPM, un token USB, ou un service de gestion de clés externe (Vault, AWS KMS).

systemd : defaults-file et PrivateMounts

Le fichier unit systemd de MariaDB peut être renforcé de plusieurs façons :

--defaults-file explicite

[Service]
ExecStart=/usr/sbin/mariadbd --defaults-file=/etc/mysql/mariadb.cnf

Spécifier --defaults-file empêche MariaDB de lire d'autres fichiers de configuration (comme un ~/.my.cnf malveillant déposé par un attaquant).

PrivateMounts et namespaces

[Service]
PrivateMounts=yes
ProtectHome=yes
ProtectSystem=strict
ReadWritePaths=/var/lib/mysql /var/run/mysqld /tmp
NoNewPrivileges=yes
PrivateTmp=yes
  • PrivateMounts=yes : MariaDB voit son propre namespace de montage. Les modifications de montage faites par d'autres processus ne sont pas visibles.
  • ProtectHome=yes : Le répertoire /home est inaccessible.
  • ProtectSystem=strict : Le filesystem est en lecture seule sauf les chemins explicitement autorisés.
  • NoNewPrivileges=yes : Le processus MariaDB ne peut pas acquérir de nouveaux privilèges (pas de setuid).
  • PrivateTmp=yes : MariaDB a son propre /tmp isolé.

chattr : l'immutabilité

L'attribut +i (immutable) du filesystem ext4 empêche la modification d'un fichier, même par root :

# Rendre le fichier de configuration immutable
chattr +i /etc/mysql/mariadb.cnf
chattr +i /etc/mysql/conf.d/init_security.sql

# Vérifier
lsattr /etc/mysql/mariadb.cnf
# ----i--------e-- /etc/mysql/mariadb.cnf

Un attaquant qui obtient un accès root ne pourra pas modifier la configuration de MariaDB sans d'abord retirer l'attribut immutable — ce qui laisse des traces dans les logs d'audit.

Pour modifier le fichier légitimement :

chattr -i /etc/mysql/mariadb.cnf
# ... modifier le fichier ...
chattr +i /etc/mysql/mariadb.cnf
systemctl restart mariadb

SELinux : politiques personnalisées

SELinux en mode enforcing est la couche de sécurité la plus puissante et la plus négligée. MariaDB est livrée avec une politique SELinux par défaut, mais une politique personnalisée peut aller beaucoup plus loin.

Créer un type SELinux personnalisé

# Définir un type pour les fichiers de configuration sensibles
semanage fcontext -a -t sec_custom_path_t "/etc/mysql/conf.d(/.*)?"
restorecon -Rv /etc/mysql/conf.d/

Politique de module personnalisée

Créez un fichier .te (Type Enforcement) qui restreint les accès de MariaDB :

# mariadb_custom.te
module mariadb_custom 1.0;

require {
    type mysqld_t;
    type sec_custom_path_t;
    class file { read open getattr };
}

# MariaDB peut lire les configs mais pas les modifier
allow mysqld_t sec_custom_path_t:file { read open getattr };
# Pas d'écriture autorisée sur les configs

Compilez et installez :

checkmodule -M -m -o mariadb_custom.mod mariadb_custom.te
semodule_package -o mariadb_custom.pp -m mariadb_custom.mod
semodule -i mariadb_custom.pp

Avec cette politique, même si un attaquant compromet le processus MariaDB, il ne peut pas modifier les fichiers de configuration — SELinux bloque l'accès au niveau du noyau.

La défense en couches

Chaque technique présentée ici est une couche de défense. Aucune n'est suffisante seule. Ensemble, elles forment un blindage significatif :

Couche Protection Contre
init_file Restauration automatique Modifications de config en runtime
LUKS Chiffrement au repos Vol de disque physique
systemd namespaces Isolation du processus Escalade de privilèges
chattr +i Immutabilité des configs Modification par root compromis
SELinux Contrôle d'accès obligatoire Exploitation du processus MariaDB

Conclusion

Le hardening avancé de MariaDB demande du temps et de l'expertise. Chaque couche ajoutée rend l'attaque plus difficile, plus lente, et plus détectable.

La sécurité n'est pas un état binaire — c'est un spectre. L'objectif n'est pas d'être invulnérable (c'est impossible), mais de rendre l'attaque suffisamment coûteuse pour que l'attaquant passe à une cible plus facile.


Cet article a été initialement publié sur Medium.

Partager X LinkedIn Facebook Email PDF
← Retour au blog

Commentaires (0)

Aucun commentaire pour le moment.

Laisser un commentaire

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
Mentions légales GitHub Contact
N'attendez pas l'incident pour comprendre votre architecture. © 2014-2026 PmaControl — 68Koncept