Como permitir que o MySQL (mysqld) crie e grave no diretório “/ var / run / mysqld”?

2

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.

    
por Green 20.07.2013 / 23:17

1 resposta

3

/ var / run deve ser regravável para usuários sem privilégios significa que as contas root e sudo (pois são usuários privilegiados) têm permissão para gravar nele.

O script upstart para o MySQL é iniciado como root e depois é permitido criar um arquivo ou diretório em /var/run . E esse arquivo é criado com a permissão definida na configuração. Isso deve ser /etc/my.cnf e terá algo assim :

[mysqld]
user   = mysql
socket = /var/lib/mysql/mysql.sock

Você deve ter algo relacionado ao mysql em /etc/init.d Depois que eu instalei o MySQL Server eu recebo isto:

Tem certeza de que não instalou o cliente MySQL?

    
por Rinzwind 21.07.2013 / 00:45