Archives Posts
Sécurité mysqld
Définition du mot de passe root mysql :
mysql> SET PASSWORD FOR root@localhost=PASSWORD(‘new_password’);
Query OK, 1 row affected (0.00 sec)
Lors de l’installation mysqld créée deux users avec » en nom de user et » en password il faut les supprimer.
mysql> DELETE FROM mysql.user WHERE user= » or pass »;
Suppression des utilisateurs inutiles :
mysql> DELETE FROM user WHERE Host=’monhost’ AND User=’monuser’;
Query OK, 1 row affected (0.00 sec)
Ainsi que les mots de passe vides :
mysql> DELETE FROM user WHERE Password= »;
Query OK, 2 rows affected (0.00 sec)
La base de donné test créée par mysql à l’installation est inutile.
mysql> DROP DATABASE test;
Query OK, 0 rows affected (0.00 sec)
Par défaut, la base test et toutes les bases commençant par « test_ » sont accessibles par tous.
mysql> DELETE FROM db WHERE db=’test’ OR db=’test\_%’;
Query OK, 2 rows affected (0.00 sec)
Afin d’activé les modifications il est nécessaire de recharger les privilèges
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Privilèges
Afin de garantir la confidentialité des données et des utilisateurs. Il faut autoriser les différents utilisateurs à se connecter et à modifier uniquement leurs bases de données. Nous utilisons la commande GRANT.
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROP ON userdb.* TO someuser@ »% » IDENTIFIED BY « pwd »;
Lister les bases de données
A l’aide de la commande SHOW DATABASES, un utilisateur lister toutes les bases de données du serveur.
mysql -u someuser -p
Enter password:
mysql> show databases;
+——————–+
| Database |
+——————–+
| mysql |
| someuserdb |
+——————–+
Il est possible de désactiver cette commande. Cependant il serait judicieux d’autoriser l’utilisateur à lister que les bases de données sur lesquelles il a des droits. Dans le fichier my.cnf, dans la section mysqld, ajouter safe-show-database.
mysql -u someuser -p
Enter password:
mysql> show databases;
+———-+
| Database |
+———-+
| someuserdb |
+———-+
Restriction réseau
Afin de limiter l’écoute du deamon mysql à une interface, utilisez bind-address.
netstat -lataupen |grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 27 19963 7045/mysqld
Si aucune connexion réseau n’est requise, on peux la supprimer avec –skip-networking.
Chrooter Mysql
Malgré toutes ces modifications, nous ne sommes pas à l’abri d’un exploit sur le service mysqld. Il apparait donc nécessaire de chrooter mysqld. Ceci fait, mysqld ne pourra pas accéder à l’ensemble du disque. Il restera dans sa nouvelle racine.
Nous allons donc créer l’arborescence :
mkdir -p /chroot/mysql/var/lib/
cd /chroot/mysql
mkdir -p var/run etc tmp
chmod 1777 tmp
Ensuite nous allons recréer l’environnement de mysql et les bases nécessaires
grep « mysql: » /etc/passwd > etc/passwd
mv /var/lib/mysql var/lib/
ln -s /chroot/mysql/var/lib/mysql/ /var/lib/mysql
mv /var/run/mysqld var/run
ln -s /chroot/mysql/var/run/mysqld/ /var/run/mysqld
Enfin, nous ajoutons les librairies de mysqld.
[root@localhost mysql]# ldd /usr/libexec/mysqld
librt.so.1 => /lib64/librt.so.1 (0×0000003d59200000)
libz.so.1 => /usr/lib64/libz.so.1 (0×0000003d58600000)
libdl.so.2 => /lib64/libdl.so.2 (0×0000003d57a00000)
libssl.so.6 => /lib64/libssl.so.6 (0×0000003d65400000)
libcrypto.so.6 => /lib64/libcrypto.so.6 (0×0000003d61600000)
libpthread.so.0 => /lib64/libpthread.so.0 (0×0000003d58200000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0×0000003d6a000000)
libnsl.so.1 => /lib64/libnsl.so.1 (0×0000003d5b200000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0×0000003d69c00000)
libm.so.6 => /lib64/libm.so.6 (0×0000003d57e00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0×0000003d69800000)
libc.so.6 => /lib64/libc.so.6 (0×0000003d57600000)
/lib64/ld-linux-x86-64.so.2 (0×0000003d57200000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0×0000003d63400000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0×0000003d63800000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0×0000003d5e200000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0×0000003d5fa00000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0×0000003d5fe00000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0×0000003d64000000)
libresolv.so.2 => /lib64/libresolv.so.2 (0×0000003d5ce00000)
libselinux.so.1 => /lib64/libselinux.so.1 (0×0000003d58e00000)
libsepol.so.1 => /lib64/libsepol.so.1 (0×0000003d58a00000)
mkdir -p lib64/ usr/lib64
cp /lib64/librt.so.1 /lib64/libdl.so.2 /lib64/libcrypto.so.6 /lib64/libpthread.so.0 /lib64/libcrypt.so.1 /lib64/libnsl.so.1 /lib64/libm.so.6 /lib64/libgcc_s.so.1 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 /lib64/libcom_err.so.2 /lib64/libkeyutils.so.1 /lib64/libresolv.so.2 /lib64/libselinux.so.1 /lib64/libsepol.so.1 lib64/
cp /usr/lib64/libz.so.1 /usr/lib64/libstdc++.so.6 /usr/lib64/libgssapi_krb5.so.2 /usr/lib64/libkrb5.so.3 /usr/lib64/libk5crypto.so.3 /usr/lib64/libkrb5support.so.0 usr/lib64/
Il faut aussi ajouter les librairies nécessaires à la résolution de noms
cp /lib/libnss_compat.so.2 /lib/libnss_files.so.2 lib64
Il nous reste à compléter la nouvelle racine dans le fichier my.cnf
/etc/my.cnf: chroot=/chroot/mysql
