Propósito de permissões como 0111 ou 0333

16

Qual é o objetivo das permissões do Linux, como 111 ou 333 (ou seja, o usuário pode executar , mas não pode ler o arquivo), se a capacidade de execução não implicam automaticamente a capacidade de ler?

    
por trolley813 07.07.2015 / 00:54

3 respostas

23

Eu brinquei com ele e, aparentemente, as permissões de execução não implicam em permissões de leitura. Os binários podem ser executáveis sem serem legíveis:

$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw 
hello world
$ cat hw
/bin/cat: hw: Permission denied

Não consigo executar scripts, a menos que eles tenham bits de permissão de leitura e execução em:

$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh 
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
    
por 07.07.2015 / 01:08
15

faz sentido para diretórios, por exemplo, se você mantém executáveis (secretos) em um diretório específico e permite que os usuários chamem esses arquivos sem poder ver o conteúdo do diretório (mas sabendo que um arquivo específico está lá depois que você os informou !) 333 comparado ao 111 permite gravar / excluir arquivos de / para esses diretórios sem poder ver o conteúdo do diretório.

    
por 07.07.2015 / 01:08
5

Obviamente, nem todas as combinações são úteis, mas para usar aquela que você mencionou especificamente ... Você realmente não precisa de read permissão para executar um arquivo - somente execute permission - a menos que o arquivo em questão é um script (por exemplo, um script shell ( .sh ), um script perl ( .pl ) e assim por diante). Binários normais podem ser executados com apenas a permissão execute . Em * BSD-systmes, vários executáveis fornecem a permissão execute sem read permisson, especialmente em comandos "importantes para a segurança" - por exemplo, su .

Então, por que não dar aos usuários read -permission (e apenas execute -permisson)? Como um arquivo que não pode ser lido por um usuário, não pode ser copiado por esse usuário também! A remoção da permissão read impede que os usuários criem suas próprias cópias "pessoais" de executáveis, o que, posteriormente, podem abusar (por exemplo, obter SUID=root on ).

E não ter write -permission, impede que um arquivo seja excluído acidentalmente.

Lembre-se de que não dar nem read -nor write -permissão para o proprietário é um pouco incomum, mas às vezes pode ser uma boa idéia impedir que até mesmo o owner exclua apenas um arquivo. É claro que o owner - para não mencionar root - pode sempre contornar tais medidas, se não de outras maneiras, então simplesmente chmod a permissão no arquivo.

    
por 07.07.2015 / 12:20