web-dev-qa-db-fra.com

Comment laisser MySQL (mysqld) créer et écrire dans le répertoire "/ var / run / mysqld"?

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.

3
Green

/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:

enter image description here

Êtes-vous sûr de ne pas avoir installé le client MySQL?

3
Rinzwind