Por que não consigo executar script com permissão somente de execução? [duplicado]

1

No momento eu estou brincando com o Linux no meu pi raspbery e estou tentando aprender como o sistema de permissão funciona.

Eu criei um grupo de dois usuários, um deles criou um script python em sua própria pasta de documentos com as permissões: -rwx--x--- .

O outro membro do grupo deve executar o arquivo com o comando python hello.py, mas ele diz que a permissão foi negada.

A única maneira é dar ao grupo também permissão de leitura: -rwxr-x---

Por que a permissão de execução não é suficiente para executar o script python?

    
por Hendrik Hoster 20.08.2017 / 12:55

2 respostas

1

As permissões de execução são suficientes para o kernel executar o arquivo.

Se o arquivo começar com #! , ele verá um script, analisará a linha para descobrir o caminho do interpretador e um argumento opcional e executará esse interpretador com esse argumento opcional e o caminho do arquivo como argumento.

Por exemplo, se o arquivo começar com:

#! /usr/bin/python -E

O kernel muda o execve("/path/to/the-script", ["the-script", "arg"], [envs]) para execve("/usr/bin/python", ["/usr/bin/python", "-E", "/path/to/the-script", "arg"], [envs]) .

Sem as permissões de execução, nunca teria chegado tão longe.

Agora, nesse ponto, o que importa é a permissão de execução do intérprete. É executáveis, então funciona normalmente.

No entanto, mais tarde, /usr/bin/python desejará abrir /path/to/the-script para ler e interpretar o código nele. E para isso, precisará de permissão de leitura para o arquivo. A menos que tenha mudado euid desde a última vez (por exemplo, se o arquivo /usr/bin/python tivesse o bit suid / sgid), se você não tinha permissões de leitura antes, você ainda não o tem.

Assim, você pode executar um script bem se tiver permissão de execução apenas para ele. É só que se o interpretador precisar abri-lo para ler seu conteúdo, ele falhará (e você verá que a mensagem de erro vem do interpretador, não do shell do qual você está tentando executar o script). Em um script como:

#! /bin/echo Here goes

Você verá que não ter permissão de leitura não importa, pois echo não está tentando abrir o arquivo para leitura.

    
por 20.08.2017 / 13:10
1

Os scripts não precisam de permissão "x" para serem executados. Do ponto de vista do kernel, eles são arquivos de texto simples, e não estão em execução, e sim o intérprete. Se você executar um script python, você inicia o binário python e não o seu something.py.

Mas você precisa do sinalizador r no script, porque o interpretador precisa ler o script para executá-lo.

E a maioria dos intérpretes não executará scripts sem um sinalizador de executável. Embora eles possam, é uma convenção de precaução de segurança.

Assim, para scripts, você precisa dos dois sinalizadores r e x para executá-los.

    
por 20.08.2017 / 13:07