O que é um caso de uso válido para uma permissão de arquivo “executar apenas”?

20

Eu estava lendo chmod e seus modos octal . Eu vi que 1 é apenas executado. O que é um caso de uso válido para uma permissão somente de execução? Para executar um arquivo, normalmente seria necessário ler e executar a permissão.

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo
    
por amorphid 10.03.2017 / 21:20

4 respostas

41

Scripts de shell exigem que a permissão de leitura seja executada, mas arquivos binários não:

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission

Exibir o conteúdo de um arquivo e executá-lo são duas coisas diferentes. Com scripts de shell, essas coisas são relacionadas porque são "executadas" por "leitura" em um novo shell (ou o atual), se você perdoar a simplificação. É por isso que você precisa lê-los. Binários não usam esse mecanismo.

Para diretórios, a permissão de execução é um pouco diferente; isso significa que você pode fazer coisas com arquivos dentro desse diretório (por exemplo, ler ou executá-los). Então, digamos que você tenha um conjunto de ferramentas em /tools que você queira que as pessoas possam usar, mas somente se elas souberem sobre elas. %código%. Então, executáveis em chmod 711 /tools podem ser executados explicitamente (por exemplo, /tools ), mas /tools/mytool será negado. Da mesma forma, os documentos poderiam ser armazenados em ls /tools/ , o que poderia ser lido se e somente se os nomes dos arquivos fossem conhecidos.

    
por 10.03.2017 / 21:38
3

No Gentoo, os programas executáveis que são setuid (definidos para serem executados com as permissões de seu proprietário em vez de seu invocador) são negados acesso de leitura (modo 4711). Isso é para adicionar uma camada de proteção contra a exploração de bugs para ajudar na escalação de privilégios.

Se um invasor sem privilégios puder ler um arquivo setuid e souber de um bug que permita um return-to-libc Ao mesmo tempo, eles podem usar o conteúdo do arquivo para prever onde determinadas funções ou bibliotecas úteis provavelmente serão colocadas na memória quando o programa for invocado.

Sistemas modernos geralmente incluem proteções adicionais que são mais eficazes, como ASLR , mas as restrições presentes em 32 bits plataformas podem deixá-las mais facilmente exploráveis.

    
por 11.03.2017 / 03:26
1

Parece que o valor de "apenas executar" não tem muito uso para um arquivo, mas pode ser usado para impedir que alguém leia o conteúdo de um diretório.

$ mkdir foo
$ touch foo/bar
$ ls foo/
bar
$ chmod 100 foo
$ ls foo/
ls: cannot open directory foo/: Permission denied
    
por 10.03.2017 / 21:27
0

Você precisa ter permissões de leitura e execução para executar um script. Ler o conteúdo de um script é o que permite que ele seja executado, então você precisa ser capaz de read and execute . Caso contrário, você não pode executar um script sem ele.

What is a valid use case for an execute only permission?

Segurança. Alguns podem querer proteger seus arquivos e impedir que outros os executem ou usem.

    
por 10.03.2017 / 21:30