Ao salvar INTO OUTFILE do mysql em um sistema baseado em systemd, o arquivo de saída é capturado pelo systemd - por quê?

4

Eu regularmente executo relatórios simples a partir de um banco de dados mysql (na verdade, mariaDB):

MariaDB [acts]> SELECT resolution, title FROM acts ORDER BY resolution INTO OUTFILE '/tmp/acts-titles.txt';

Recentemente atualizei o servidor de banco de dados para um sistema baseado no linux 3.19 usando a versão 218-2 do systemd e fiquei surpreso ao descobrir que o arquivo de saída não entra diretamente no diretório / tmp como eu suspeitava, mas sim em uma pasta systemd privada em / tmp:

[root@www tmp]# pwd
/tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/tmp
[root@www tmp]# ls
acts-titles.txt
[root@www tmp]# ls -ld /tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/
drwx------ 3 root root 60 Mar 23 04:32 /tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/

Embora isso não seja trágico, é inconveniente, já que apenas o usuário root pode acessar esse diretório, exigindo que o administrador do mysql também tenha acesso root no sistema, o que não é necessariamente o que você deseja.

Alguém pode explicar por que o systemd está pegando o arquivo, e existe alguma maneira de contornar esse comportamento?

    
por pgoetz 25.03.2015 / 12:40

1 resposta

6

Você pode alterar esse comportamento se editar a opção tmp segura em /lib/systemd/system/mariadb.service.

systemctl stop mariadb

em seguida, edite /lib/systemd/system/mariadb.service ao alterar PrivateTmp para false:

# Place temp files in a secure directory, not /tmp
PrivateTmp=false  # default is true

e finalmente:

systemctl daemon-reload
systemctl start mariadb

Como mencionado nos comentários, uma solução melhor é não fazer alterações no arquivo mariadb.service, mas escolher um diretório diferente, dar direitos para que o usuário que está executando o mariadb possa acessá-lo e apontar seu OUTFILE para esse diretório.

Se a opção PrivateTmp estiver ativada, isso garantirá que o diretório / tmp que o serviço verá seja privado e isolado do sistema / tmp do host.
Um bom ponto de vista, você pode encontrar aqui .

    
por 25.03.2015 / 13:31