Um arquivo que é executável pode ser lido?

8

Se um arquivo tiver permissões -rwx-wx-wx , ele poderá ser lido por outros usuários e por grupos ou será executado e gravado somente? Existe alguma maneira de ler um arquivo executável, executando-o?

    
por Tom 19.01.2012 / 22:06

4 respostas

17

Um arquivo com -rwx-wx-wx permissões tem permissões de leitura / gravação / execução para o proprietário e permissões de gravação / execução (mas não leitura) para todos os outros.

Se for um script (geralmente um arquivo de texto com #! na primeira linha), então não pode ser executado por outros, porque a execução de um script realmente executa o intérprete, que deve ser capaz de ler o roteiro. (O interpretador deve ser um binário, não outro script.) (Na verdade, isso não é verdade para todos os sistemas; o Ubuntu, com um kernel Linux 3.2.0, permite que o próprio intérprete seja um script interpretado. Parece haver um limite de cerca de 4 níveis. Não é provável que seja relevante para esta questão.)

Se for um executável binário, ele pode ser executado diretamente, mas seu conteúdo não pode ser lido. Isso significa, por exemplo, que alguém além do proprietário pode executá-lo como um comando, mas não pode pegar uma cópia do executável.

É claro que a execução requer leitura, mas é lida pelo kernel, não pelo usuário. Você pode obter algumas informações sobre o conteúdo do executável examinando a memória do processo durante a execução, mas duvido que você possa reconstruir o arquivo executável binário. E se o executável for setuid, você não poderá examinar a memória do processo (a menos que tenha acesso à conta na qual está sendo executado).

Por acaso, -rwx-wx-wx é um conjunto muito estranho de permissões; ele protege o arquivo de ser lido por qualquer pessoa que não seja o proprietário, mas permite que qualquer pessoa o modifique. Não consigo pensar em um caso em que isso faria sentido.

    
por 19.01.2012 / 22:55
6

Com essas permissões, somente o proprietário do arquivo pode executá-lo.

Outros usuários podem gravar nele, mas não executá-lo (como a execução, neste caso, implica poder lê-lo), mas podem escrever para ele como uma espécie de caixa preta:

user1:~$ cd /tmp
user1:/tmp$ echo "hostname" > testfile.sh
user1:/tmp$ chmod +x testfile.sh 
user1:/tmp$ ./testfile.sh  
server.example.com

user1:/tmp$ chmod 733 testfile.sh 
user1:/tmp$ ls -l testfile.sh 
-rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh

user1:/tmp$ sudo su - user2
user2:~$ cd /tmp
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied
user2:/tmp$ cat testfile.sh 
cat: testfile.sh: Permission denied

user2:/tmp$ echo 'echo hello' >> testfile.sh 
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied

user2:/tmp$ logout

user1:/tmp$ ./testfile.sh
server.example.com
hello
    
por 19.01.2012 / 22:15
2

A resposta simples é no : somente exec syscall pode ler um arquivo sem exigir acesso read (embora obrigando executar acesso). Um open com O_RDONLY ou O_RDWR falhará.

    
por 19.01.2012 / 22:55
1

É claro que qualquer arquivo pode ser lido pelo usuário root.

Além disso, o carregador do sistema, o gerenciamento de memória, o swapper, etc .... lerão um arquivo com permissão 'x', caso contrário ele não poderá ser executado.

Possíveis falhas na divulgação de conteúdo executável podem ser o arquivo / proc para o processo, arquivos principais ou usando um depurador.

    
por 19.01.2012 / 22:13