Um arquivo executável pode ser lido?

9

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

Tom
fonte
Não há maneira padrão que eu possa dizer.
Tim

Respostas:

18

Um arquivo com -rwx-wx-wxpermissões possui 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 um #!na primeira linha), não poderá ser executado por outras pessoas, porque a execução de um script realmente executa o intérprete, que deve ser capaz de ler o script. (O intérprete deve ser um binário, não outro script.) (Na verdade, isso não é verdade para todos os sistemas; o Ubuntu, com um kernel do Linux 3.2.0, permite que o próprio intérprete seja um script interpretado. Parece haver um limite de cerca de quatro níveis. Não é provável que seja relevante para esta pergunta.)

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

Obviamente, 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 enquanto ele está sendo executado, mas duvido que você possa reconstruir o arquivo executável binário. E se o executável estiver configurado, você não poderá examinar a memória do processo (a menos que tenha acesso à conta na qual está executando).

Aliás, -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.

Keith Thompson
fonte
Apenas uma pergunta aleatória abstrata: as ferramentas de criação de perfil / depuração funcionariam em executivos com apenas permissões executáveis?
Sairam
Lavar: Experimento diz que não: chmod 111 hello ; gdb ./hellodiz ./hello: Permission denied.; rdizNo executable file specified.
Keith Thompson
Para um não executável, algo como -rw - w - w- pode ser útil para algo como um arquivo de log em que você deseja que as pessoas possam escrever informações no log sem poder lê-las. Obviamente, eles poderiam apenas esvaziar o arquivo, mas isso é uma questão separada.
Dave
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 nesse caso implica em poder lê-lo), mas podem gravar nele 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
cjc
fonte
4
Um script de shell requer leitura e acesso EXECUTE para executar. No entanto, um binário compilado NÃO. Assim, um binário compilado com as permissões acima pode ser executado por qualquer pessoa!
Mdpc
1
Suponho que isso levanta a questão sobre o que o OP está tentando realizar, ou seja, por que o binário compilado seria gravável? O conjunto de permissões (733) levou um momento para eu descobrir, pois é muito fora do padrão.
CJC
2

A resposta simples é não : somente o execsyscall pode ler um arquivo sem exigir acesso de leitura (embora exija o acesso de execução ). Um opencom O_RDONLYou O_RDWRdeve falhar.

yrk
fonte
1

Obviamente, qualquer arquivo pode ser lido pelo usuário root.

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

Os possíveis furos na divulgação de conteúdo executável podem ser o arquivo / proc para o processo, os arquivos principais ou o uso de um depurador.

mdpc
fonte
isso só é verdade se um chmod| chownfoi executada
warren