Je ne comprends vraiment pas comment tous ces privilèges fonctionnent sous Linux.
Pour démarrer le serveur MySQL, le programme mysqld
doit écrire ses fichiers .pid
dans le répertoire /var/run/mysqld/
. Mais nous savons d'après FHS (Filesystem Hierarchy Standard) que:
Les fichiers de ce répertoire doivent être effacés (supprimés ou tronqués selon le cas) au début du processus de démarrage.
Alors mysqld
doit créer le répertoire /mysqld
sous /var/run/
à chaque fois Le serveur MySQL est démarré.
Le propriétaire et le groupe de /var
est root
et /var
est:
drwxr-xr-x 13 root root 4096 may 20 23:41 var.
Et nous savons aussi de FHS (Filesystem Hierarchy Standard) que:
/ var/run devrait être non écrit pour les utilisateurs sans privilèges (root ou les utilisateurs exécutant des démons); C'est un problème de sécurité majeur si un utilisateur peut écrire dans ce répertoire.
Donc, mysqld
ne peut pas écrire dans le répertoire. En effet, lorsque je lance mysqld
pour démarrer le serveur MySQL, j'obtiens toujours une erreur:
user@user-desktop:~$ Sudo mysqld --console
130720 23:43:02 [ERROR] Can't start server : Bind on unix socket: Permission denied
130720 23:43:02 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
130720 23:43:02 [ERROR] Aborting
La question est: comment mysqld
peut écrire .pid
fichiers dans /var/run/mysqld/
si la norme interdit d'ouvrir ce répertoire pour l'écriture? C'est une contradiction claire, n'est-ce pas?
Ma question est la suivante: comment laisser mysqld
créer et écrire ses fichiers dans /var/run/mysqld/
sans modifier les autorisations du répertoire /var/run
? Pour l'instant je vois le seul moyen:
user@user-desktop:$ Sudo chmod a+w /var
Mais c'est interdit par la norme.
/var/run devrait être non lisible pour les utilisateurs sans privilège signifie que les comptes root et Sudo (en tant qu'utilisateurs privilégiés) sont autorisés à y écrire.
Le script de démarrage de MySQL est lancé en tant que root, puis il est autorisé à créer un fichier ou un répertoire dans /var/run
. Et ce fichier est créé avec l’autorisation définie dans la configuration. Cela devrait être /etc/my.cnf
et il aura quelque chose comme ça :
[mysqld]
user = mysql
socket = /var/lib/mysql/mysql.sock
Vous devriez avoir quelque chose lié à mysql dans /etc/init.d
Après avoir installé le serveur MySQL, je reçois ceci:
Êtes-vous sûr de ne pas avoir installé le client MySQL?