Configurando a execução para o diretório inteiro - é boa ou má ideia?

3

Eu tenho um arquivo zip contendo muitos arquivos e diretórios para um determinado aplicativo que deve estar rodando no Linux. Alguns arquivos precisam ser definidos como executáveis, mas o formato de arquivo zip afaik não preserva os direitos de execução.

Eu preciso definir manualmente a execução diretamente nos arquivos depois de extrair o arquivo e (estou chegando nisso) minha pergunta é:

Se eu não sei quais arquivos precisam ser executáveis, é uma boa ideia adicionar a permissão de execução recursivamente ao diretório inteiro? Pode possuir algum risco de segurança? Alguém tem conhecimento de algum outro problema que possa causar?

    
por L.R. 11.11.2011 / 10:51

3 respostas

2

Não há nenhum risco direto de segurança ao tornar um arquivo executável, a menos que seja setuid ou setgid. É claro que existe o risco indireto de que algo que você espera que seja inerte - algum arquivo de dados que você normalmente abriria em um aplicativo - também pode ser executado diretamente em seu sistema, com consequências nefastas. Por exemplo, se você tem um arquivo chamado README que realmente contém um programa de rootkit, abri-lo em um editor de texto é seguro, mas é melhor não executá-lo.

Uma heurística razoável para reconhecer arquivos que devem ser executáveis é examinar seus primeiros bytes e reconhecer assinaturas executáveis. Isso é uma questão de conveniência e não de segurança, mas se você estiver disposto a tornar todos os arquivos executáveis de qualquer maneira, isso significa que você não tem uma preocupação de segurança, mas uma preocupação de usabilidade de qualquer maneira. Aqui está uma possível heurística:

for x in *; do
  case $(file - <"$x") in
    *executable*) chmod +x -- "$x";;
  esac
done

Aqui está outra heurística que deve diferir apenas nos casos de canto ( $'7' é a sintaxe ksh / bash / zsh, substitua-a por um caractere literal 0177 = 127 = 0x7f em outros shells).

for x in *; do
  case $(head -c 4 <"$x") in
    '#!'*|$'7'ELF) chmod +x -- "$x";;
  esac
done

Em ambos os casos, só porque um arquivo é reconhecido como executável não significa que você possa executá-lo em seu sistema; por exemplo, um binário para a arquitetura incorreta do processador será felizmente executado. Aqui está uma abordagem diferente que torna todos os scripts executáveis, mas binários vinculados dinamicamente somente se eles forem para a arquitetura correta e você tiver as bibliotecas necessárias e perder completamente binários estaticamente vinculados.

for x in *; do
  case $(head -c 2 <"$x") in
    '#!') chmod +x -- "$x";;
    *) if ldd -- "$x" >/dev/null 2>/dev/null; then chmod +x "$x"; fi;;
  esac
done
    
por 12.11.2011 / 00:31
6

Não é bonito nem elegante, mas adicionar o bit executável a um arquivo que não é qualquer tipo de executável com o qual o SO saiba o que fazer não é prejudicial - se você tentar, provavelmente obterá apenas cannot execute binary file

Um risco potencial seria arquivos de texto se, de alguma forma, as primeiras palavras acabarem sendo comandos válidos no shell, mas isso é difícil de prever (se improvável).

Eu pessoalmente errei no lado da cautela e mantive tudo não-executável, então escrevi um script rápido para classificar todos os arquivos com o comando file e virei o bit executável se ele for reconhecido como um script ou um ELF código binário - exato deixado como um exercício para o leitor.

    
por 11.11.2011 / 12:32
3

Resposta simples - sim, pode representar riscos de segurança - mas isso depende totalmente dos requisitos de controle de acesso específicos para os arquivos e diretórios envolvidos.

A sua melhor aposta é perguntar ao proprietário do aplicativo / desenvolvedor / etc se existem arquivos ou diretórios que exigem que as permissões sejam aplicadas, bem como se há algum que precise ser definido como executável. Deve ser o chamado deles, não o seu, então eu evitarei assumir a responsabilidade se você não souber os requisitos da inscrição!

Pode ser que os números sejam baixos, então se torna um processo simples. YMMV

    
por 11.11.2011 / 12:29