Permissões negadas nos arquivos apesar do modo 777

4

Estou recebendo um erro de permissão negada no CentOS 6.10 de 64 bits

Por favor, note que o "#" indica um prompt de usuário no nível da raiz.

# cd /tmp
# chmod 777 file*
# /bin/ls -l file*
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_00.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_01.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_02.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_03.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_04.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_05.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_06.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_07.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_08.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_09.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_10.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_11.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_12.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_13.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_14.dat
-rwxrwxrwx 1 apache apache     1 Sep 17 17:15 file_15.dat
# cat file* > file.dat
cat: file_00.dat: Permission denied
cat: file_02.dat: Permission denied
# /bin/ls -l file.dat
-rw-rw-r-- 1 root   root   10713 Sep 17 17:32 file.dat

O tamanho do arquivo completo é 10713, que é 824 * 13 + 1, significando que ele foi copiado com sucesso todos os arquivos, exceto os arquivos "00" e "02". Uma cópia bem-sucedida deve ter 12361 bytes, 824 * 15 + 1. No entanto, não há nada diferente nesses dois arquivos, exceto que a máquina se recusa a deixar que eu os leia.

O comando "chmod 777" é redundante, apenas para enfatizar a situação. Antes de executar esse comando, as permissões estavam todas no formato "-rw-r - r--", o que ainda significa que eu não deveria receber um erro de permissão negada.

Não há "." sobre as permissões, então, teoricamente, o Selinux não deveria estar envolvido, mas mesmo que esteja envolvido, por que ele está escolhendo apenas dois arquivos?

Posso repetir o processo que cria esses arquivos e escolher um conjunto diferente de arquivos para ficar ilegível. Alguém tem uma explicação e correção para isso?

ATUALIZAÇÃO:

Eu modifiquei o processo que cria os arquivos. Anteriormente, estava recebendo os dados de um cliente JavaScript que quebrou um arquivo XLSX em partes para permitir o upload de planilhas de tamanho grande. O servidor receberia os fragmentos como base64, decodificaria cada fragmento para binário e salvaria em um arquivo temporário para ser concatenado em um arquivo XLSX final.

O que ele faz agora é salvar cada bloco temporário como base64 (100% ASCII). Depois que todos os fragmentos são carregados, ele lê cada arquivo, então o decodifica para binário e o acrescenta ao arquivo XLSX final.

Funciona bem. Acho que vamos deixar assim.

Como teste, escrevi um programa rápido de 3 linhas para ler um dos blocos base64, decodificá-lo para binário e salvá-lo. Então eu tentei ler o resultado. Adivinha? Permissão negada no arquivo binário.

Então, aparentemente, o que torna o arquivo ilegível é algum padrão de dados dentro do arquivo.

Usar este método resolve o problema, mas eu ainda gostaria de saber como um padrão de dados binários dentro de um arquivo cria um erro de "Permissão negada" no fora .

    
por UncaAlby 18.09.2018 / 16:14

2 respostas

2

ATUALIZAÇÃO FINAL

Acontece que nosso provedor de serviços tinha um programa antivírus Red-Hat Linux em execução. Que, obviamente, eu não sabia.

Desative o antivírus e todos os arquivos se tornam legíveis. Volte a ligá-lo e alguns arquivos selecionados correspondem a algumas assinaturas de vírus.

O antivírus deve estar à procura de arquivos executáveis. (os arquivos eram originalmente o modo 644 quando o problema apareceu)

deve ser uma mensagem de erro diferente.

Oh bem. Doravante, vamos codificar os arquivos em Base64, problema resolvido.

Obrigado novamente a todos que ajudaram.

    
por 20.09.2018 / 16:25
1

Pode ser que um atributo de arquivo tenha sido definido. Tente listar com o comando lsattr . Então você pode cancelar a configuração com os atributos de ativação com chattr -[acdeijstuADST] filename .

Você pode encontrar mais informações em man chattr .

    
por 18.09.2018 / 17:28