Para tornar um script de shell executável, parece haver três opções:
- Opção 1:
chmod +x script.sh
- Opção 2:
chmod a+x script.sh
- Opção 3:
chmod a+rx script.sh
Aqui estão duas perguntas.
Q1. O que realmente significa que a primeira e a segunda opções concedem permissão para executar, mas não concedem permissão para ler? Como isso é possível na vida real?
Q2. Qual dessas opções é recomendada para um caso geral? Ou, para tornar essa pergunta menos pessoal, quais são os prós e os contras de cada opção?
Com
+
, você adiciona bits de permissão.a
é a abreviação deugo
que significa o bit que ele adicionou às permissõesu
ser,g
roup eo
ther, o que significa que o arquivo acaba sendo executável por todos. Sem oa
, é o mesmo, exceto que está sujeito aumask
.Este último só é executável pelo seu proprietário.
Agora, você terá permissão para executar esse arquivo.
Se esse arquivo começar com
#! /bin/echo
, e você executar./file
, o sistema executará/bin/echo ./file
o que é normal.Mas se começar com
#! /bin/zsh -
, isso se transformará na execução de/bin/zsh - ./file
, mas enquanto/bin/echo
apenas exibe seus argumentos,/bin/zsh
como todos os intérpretes de linguagem tentarão abrir o arquivo fornecido como argumento e ler seu conteúdo para interpretar o código nele.Mas sem permissão de leitura , ele não pode fazer isso, então falhará.
Então você também precisa dar permissões de leitura aos usuários que você deseja permitir que executem esse script.
Permitirá que qualquer um execute o script. Ele não tocará nos outros bits das permissões (write, setuid, setgid, t bits) que podem ou não ser desejáveis.
Para que um script instalado em todo o sistema seja usado por todos, você, como administrador, deve ter certeza de que ele pertence a
root
, para que ninguém (além deroot
quem tem todos os direitos) possa alterar sua permissão e dar a permissão de gravação, no máximo, ao seu proprietário.Para um script que ninguém além dos membros de um determinado grupo pode executar:
Q1 é uma duplicata de (pelo menos) Permissão de arquivo executar somente
Q2 depende do caso de uso. Se você quiser criar um script que somente você pode acessar e executar, você pode usar
chmod u+rx {file}
. (A probabilidade é que você já tenhau=rw
permissões, então você provavelmente só precisaria adicionar execute com+x
. Mas para um script é uma boa prática adicionar read e execute, portanto+rx
.) Se você quisesse criar um script que você e outros membros do grupo pudessem acessar e executar, você poderia usarchmod ug+rx {file}
. Se você quisesse que qualquer pessoa pudesse acessar e executar o script, você poderia usarchmod a+rx {file}
.Notas
Todos esses comandos chmod assumem que o script é acessível ao público apropriado. Se você colocar o arquivo em um diretório que só pode ser acessado por você, não importa o quão relaxadas as permissões sejam - o arquivo não será acessível a ninguém além de você, de qualquer forma.
Não há nada que impeça você de usar permissões absolutas, como ou
chmod u=rwx,go= {file}
em vez de adicionar permissões a um conjunto existente.chmod u=rwx,g=rx,o= {file}
chmod u=rwx,go=rx {file}
Você pode usar permissões octais, mas elas geralmente são mais difíceis de entender. O mesmo conjunto de permissões do #2 seria então
chmod 700 {file}
,chmod 750 {file}
, echmod 755 {file}
.