Guide de sécurité
<<<
Protéger MySQL contre les attaques Options de démarrage qui concernent la sécurité
>>>

5.3 Sécurité générale du serveur
5 Administration du serveur
 Manuel de Référence MySQL 4.1 : Version Française

Guide de sécurité
->Protéger MySQL contre les attaques
Options de démarrage qui concernent la sécurité
Problèmes de sécurité avec LOAD DATA LOCAL

5.3.2 Protéger MySQL contre les attaques

Lorsque vous vous connectez à MySQL, vous devriez avoir besoin d'un mot de passe. Ce mot de passe n'est pas transmis en texte clair sur le réseau. La gestion des mots de passe durant l'identification des utilisateurs a été améliorée en MySQL 4.1.1 pour être très sécurisée. Si vous utilisez une vieille version de MySQL, ou si vous utilisez toujours les mots de passe de type pre-4.1.1, l'algorithme de chiffrement n'est pas très fort, quelques efforts permettront à un pirate d'obtenir votre mot de passe s'il est capable de surveiller le trafic entre le client et le serveur. (Voyez Chiffrement des mots de passe en MySQL 4.1 pour une discussion des différentes méthodes de gestions des mots de passe). Si la connexion entre le client et le serveur utilise des réseaux non fiables, il est alors recommandé d'utiliser un tunnel SSH.

Toutes les autres informations sont transférées comme du texte clair, et quiconque surveille la connexion pourra les lire. Si vous souhaitez relever ce niveau de sécurité, il est recommandé d'utiliser le protocole compressé (avec les versions de MySQL 3.22 et plus récentes), pour compliquer considérablement le problème. Pour rendre la communication encore plus sûre, vous pouvez aussi utiliser ssh . Vous trouverez une version Open Source du client ssh sur le site http://www.openssh.org/ , et une version commerciale du client ssh sur le site de http://www.ssh.com/ . Avec eux, vous pouvez mettre en place une connexion TCP/IP chiffrée entre le serveur et le client MySQL.

Si vous utilisez MySQL 4.0, vous pouvez aussi utiliser le support OpenSSL interne. Utilisation des connexions sécurisées .

Pour rendre le système MySQL encore plus sûr, nous vous recommandons de suivre les suggestions suivantes :

  • Utilisez des mots de passe pour tous les utilisateurs MySQL. N'oubliez pas que tout le monde peut se connecter avec un nom d'utilisateur quelconque, simplement avec l'option mysql -u autre_utilisateur nom_de_base , si autre_utilisateur n'a pas de mot de passe. C'est un comportement classique pour les applications client/serveur que le client spécifie son nom d'utilisateur. Il sera plus difficile à un attaquant de pénétrer dans votre serveur si tous les comptes ont un mot de passe.

    Vous pouvez modifier les mots de passe de tous les utilisateurs en modifiant le script mysql_install_db avant de l'exécuter, ou vous pouvez modifier seulement le mot de passe du root MySQL comme ceci :

    
    shell> mysql -u root
    mysql> UPDATE mysql.user SET Password=PASSWORD('nouveau_mot_de_passe')
        -> WHERE User='root';
    mysql> FLUSH PRIVILEGES;
  • N'exécutez jamais le démon MySQL avec l'utilisateur Unix root . C'est très dangereux, car tout personne ayant le droit de FILE pour créer des fichiers au nom du root (par exemple, ~root/.bashrc ). Pour éviter cela, mysqld refusera de s'exécuter au nom de root à moins que soit précisé l'option --user=root .

    mysqld peut être exécuté avec un utilisateur ordinaire sans droits particuliers. Vous pouvez aussi créer un utilisateur Unix mysql pour rendre cela encore plus sûr. Si vous exécutez mysqld sous un autre utilisateur Unix, vous n'avez pas à changer le mot de passe root dans la table user , car les noms d'utilisateurs MySQL n'ont rien à voir avec les noms d'utilisateurs Unix. Pour démarrer mysqld sous un autre nom d'utilisateur Unix, ajoutez la ligne user , qui spécifie le nom de l'utilisateur, dans le fichier d'options de [mysqld] /etc/my.cnf ou dans le fichier my.cnf présent dans le dossier de données du serveur. Par exemple :

    
    [mysqld]
    user=mysql
    Cette ligne va forcer le serveur à démarrer en tant qu'utilisateur mysql , même si vous démarrez le serveur manuellement ou avec les scripts safe_mysqld , ou mysql.server . Pour plus de détails, voyez Comment faire tourner MySQL en tant qu'utilisateur normal .

    Exécuter mysql sous un autre compte Unix que root ne signifie pas que vous devez changer le nom de root dans la table user . Les comptes utilisateurs de MySQL n'ont rien à voir avec ceux du compte Unix.

  • N'autorisez pas l'utilisation de liens symboliques pour les tables. Cette fonctionnalité peut être désactivée avec l'option --skip-symbolic-links . C'est particulièrement important si vous utilisez mysqld comme root , car tout utilisateur a alors le droit d'écrire des données sur le disque, n'importe où sur le système!! Utiliser les liens symboliques pour les tables sous Unix .
  • Vérifiez que l'utilisateur Unix qui exécute mysqld est le seul utilisateur avec les droits de lecture et écriture dans le dossier de base de données.
  • Ne donnez pas le droit de PROCESS à tous les utilisateurs. La liste fournie par mysqladmin processlist affiche le texte des requêtes actuellement exécutées, ce qui permet à toute personne pouvant exécuter cette commande de lire des valeurs qui seraient en clair, comme : UPDATE user SET password=PASSWORD('not_secure') .

    mysqld réserve une connexion supplémentaire pour les utilisateurs qui ont le droit de PROCESS , afin que le root MySQL puisse toujours se connecter et vérifier que tout fonctionne bien, même s'il ne reste plus de connexions libres pour les autres utilisateurs.

    Le droit SUPER peut être utilisé pour fermer des connexions clients, changer les variables systèmes et contrôler la réplication.
  • Ne donnez pas le droit de FILE à tous les utilisateurs. Tout utilisateur qui possède ce droit peut écrire un fichier n'importe où sur le serveur, avec les droits hérités du démon mysqld ! Pour rendre cela plus sécuritaire, tous les fichiers générés par SELECT ... INTO OUTFILE sont lisibles par tous, mais personne ne peut les modifier. Le droit de FILE peut aussi être utilisé pour lire n'importe quel fichier accessible en lecture au démon qui fait tourner MySQL. Il devient donc possible, suivant les configurations, d'utiliser la commande LOAD DATA sur le fichier /etc/passwd pour tout mettre en table, et ensuite le relire avec la commande SELECT .
  • Si vous ne faites pas confiance à votre DNS, vos pouvez simplement utiliser des adresses IP au lieu des noms d'hôtes. Dans ce cas, soyez très prudents lors de la création de droits qui utilisent des caractères joker.
  • Si vous voulez restreindre le nombre de connexions d'un utilisateur, vous pouvez le faire en utilisant la variable max_user_connections de mysqld . La commande GRANT dispose aussi d'option de contrôle des ressources, pour limiter l'utilisation du serveur par un compte utilisateur.

<< Protéger MySQL contre les attaques >>
Guide de sécurité Sécurité générale du serveur Options de démarrage qui concernent la sécurité