Eu realmente não entendo como todos esses privilégios funcionam em Linuxes.
Para iniciar o servidor MySQL, o programa mysqld
tem que gravar seus arquivos .pid
no diretório /var/run/mysqld/
. Mas sabemos de FHS (Filesystem Hierarchy Standard) que:
Os arquivos nesse diretório devem ser limpos (removidos ou truncados, conforme apropriado) no início do processo de inicialização.
Portanto, mysqld
tem que criar o diretório /mysqld
sob /var/run/
todas as vezes servidor MySQL é iniciado.
O proprietário e o grupo de /var
são root
e /var
is:
drwxr-xr-x 13 root root 4096 may 20 23:41 var.
E também sabemos do FHS (Filesystem Hierarchy Standard) que:
/ var / run deve ser regravável para usuários sem privilégios (root ou usuários executando daemons); é um grande problema de segurança se qualquer usuário puder escrever nesse diretório.
Portanto, mysqld
não pode gravar no diretório. De fato, quando eu executo mysqld
para iniciar o servidor MySQL, sempre recebo um erro:
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
A pergunta é: como mysqld
pode gravar .pid
arquivos em /var/run/mysqld/
se o padrão proibir abrir este diretório para gravação? Esta é uma clara contradição, não é?
Minha pergunta é: como deixar mysqld
criar e gravar seus arquivos em /var/run/mysqld/
sem alterar as permissões do diretório /var/run
? Por enquanto eu vejo a única maneira:
user@user-desktop:$ sudo chmod a+w /var
Mas é proibido pelo padrão.