Selinux está negando acesso ao mysqld

5

Eu tenho um script que despeja um banco de dados mysql. Em seguida, ele compacta o arquivo e isso é armazenado na minha pasta pessoal usando o cron. O problema é que eu estou recebendo uma mensagem de erro.

mysqldump: Couldn't execute 'show fields from 'auth_group'': Can't create/write to file '/tmp/#sql_151e_0.MYI' (Errcode: 13) (1) c2duo_db-22072011.sql

Agora, no final gráfico do meu servidor centos, ele diz que o selinx negou acesso ao mysqld. Claro que se eu desabilitar o selinux isso funciona bem. Mas eu preciso do selinux ativado. Existe uma maneira de contornar este problema?

cron

10 11 * * 5 /home/sh/mysqlbackup.sh

mysqlbackup.sh

  #!/bin/sh

    mysqldump -uroot -ppassword --opt c2duo_db > /home/sh/c2duo_db-'date +%d%m%Y'.sql

    cd /home/sh
    tar -zcvf c2duo_db.tgz *.sql

EDIT: Aqui o que recebo do comando grep mysqld /var/log/audit/audit.log | tail | audit2why .

type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file
        Was caused by:
                Missing or disabled TE allow rule.
                Allow rules may exist but be disabled by boolean settings; check boolean settings.
                You can see the necessary allow rules by running audit2allow with this audit message as input.

Além disso, meu servidor mysql já estava instalado nesta máquina. Então eu acho que é um repositório oficial.

    
por Shehzad009 22.07.2011 / 12:49

4 respostas

1

Você provavelmente tem um contexto de arquivo incorreto no diretório /tmp . Mostre-nos ls -ldZ /tmp .

Como é possível que o arquivo temporário dentro de /tmp tenha httpd_sys_content_t fcontext?

type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file
        Was caused by:
                Missing or disabled TE allow rule.
                Allow rules may exist but be disabled by boolean settings; check boolean settings.
                You can see the necessary allow rules by running audit2allow with this audit message as input.

No RHEL, é:

ls -ldZ /tmp
drwxrwxrwt. root root system_u:object_r:tmp_t:s0       /tmp

Com certeza, não tem nada a ver com o caminho para o seu arquivo de backup. Se fosse um problema de permissão, você teria algo assim:

# su -s /bin/bash nobody -c 'mysqldump -uroot -p123456 --opt test > /root/test-'date +%d%m%Y'.sql'
bash: /root/test-13112013.sql: Permission denied

Você pode usar strace -f -ff -o /tmp/strace mysqldump -uroot -ppassword --opt c2duo_db para ver quais arquivos ele tenta abrir, usar ...

    
por 13.11.2013 / 11:27
0

Parece que algo pode ser rotulado incorretamente. Você já tentou executar restorecon -R /var/lib/mysql ?

    
por 10.09.2011 / 13:35
-1

Acabei de executar o comando sugerido por audit2why :

% echo "type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file" | audit2allow 

Este comando retorna:

#============= mysqld_t ==============
allow mysqld_t httpd_sys_content_t:file write;

Esta é provavelmente a política do SeLinux que permite governar o que você precisa.

Mas eu não sei se permitir que esta regra seja segura ...

    
por 11.08.2011 / 11:13
-1

Razão por trás do problema:

A razão por trás do problema é que você colocou o arquivo de script de shell dentro de "/ home / sh /"

Parece que a pasta / sh / que reside na pasta / home / não é uma pasta gerada pelo sistema (criada durante a criação do usuário do sistema), mas sim criada manualmente. Assim, quando o cron é executado, o sistema restringe o acesso aos scripts dentro do arquivo de script de shell.

Nota: No acesso ao linux é restrito aos arquivos que residem dentro do diretório / home /. Mas os arquivos que residem em / home / [diretório criado pelo sistema para cada usuário do sistema] / tem acesso irrestrito

Solução:

Move the /sh/ folder along with the sh file inside a system generated folder under /home/ directory (or) create a system user named sh

Espero que isso ajude ...

    
por 14.06.2013 / 13:20