A permissão de arquivo é executada apenas

12

Como posso definir o arquivo para ser executável apenas para outros usuários, mas não legível / gravável, a razão para isso estou executando algo com meu nome de usuário, mas não quero fornecer a senha. Eu tentei :

chmod 777 testfile
chmod a=x
chmod ugo+x

Ainda recebo permissão negada ao executar como outro usuário.

c0mrade
fonte
E quando executá-lo NÃO como outro usuário? E isso é um script ou um programa binário? Os scripts devem ser lidos pelo intérprete.
13138 psusi
Você tem um shebang na parte superior do arquivo? #! / bin / sh
J Baron

Respostas:

10

Você precisa de permissões de leitura e execução em um script para poder executá-lo. Se você não conseguir ler o conteúdo do script, também não poderá executá-lo.

tony@matrix:~$ ./hello.world
hello world
tony@matrix:~$ ls -l hello.world
-rwxr-xr-x 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ chmod 100 hello.world
tony@matrix:~$ ls -l hello.world
---x------ 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ ./hello.world
bash: ./hello.world: Permission denied
EightBitTony
fonte
De fato, atualizado para refletir que é verdade para scripts que, considerando a pergunta original, é o que suspeito ser o caso.
EightBitTony
12

Há meia verdade nas declarações anteriores. Você pode configurar um script para que não seja legível pelo usuário, mas ainda executável. O processo é um pouco demorado, mas é possível abrir uma exceção no / etc / sudoer, para que o usuário possa executar o script como você mesmo temporariamente sem ser solicitada uma senha. Exemplo abaixo:

Algum script que eu quero compartilhar com um usuário:

me@OB1:~/Desktop/script/$ chmod 700 somescript.pl
me@OB1:~/Desktop/script/$ ls -l somescript.pl
-rwx------ 1 me me 4519 May 16 10:25 somescript.pl

Crie um script de shell que chame 'somescript.pl' e salve-o em / bin /:

me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me: 
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@

ETAPA OPCIONAL Crie um link simbólico para somescript.sh em / bin /:

sudo ln -s /bin/somescript.sh /bin/somescript

Verifique se o script do shell é legível / executável para o usuário (sem acesso de gravação):

sudo chmod 755 /bin/somescript.sh
me@OB1:/bin$ ls -l somescript*
lrwxrwxrwx 1 root root  14 May 28 16:11 somescript -> /bin/somescript.sh
-rwxr-xr-x 1 root root 184 May 28 18:45 somescript.sh

Faça uma exceção no / etc / sudoer adicionando estas linhas:

# User alias specification
User_Alias  SCRIPTUSER = me, someusername, anotheruser

# Run script as the user 'me' without asking for password
SCRIPTUSER ALL = (me) NOPASSWD: /home/me/Desktop/script/somescript.pl

PROVA NO PUDIM:

someuser@OB1:~$ somescript
***You can run me, but can't see my private parts!***

someuser@OB1:~$ cat /home/me/Desktop/script/somescript.pl
cat: /home/me/Desktop/script/somescript.pl: Permission denied

Esse método deve ser melhor do que tentar ofuscar com Filter::Cryptoou PAR::Filter::Cryptoou Acme::Bleachque pode ser revertido por um determinado usuário. O mesmo vale para compilar seu script em binário. Deixe-me saber se você encontrar algo errado com este método. Para usuários mais avançados, convém remover completamente a seção User_Alias ​​e substituir SCRIPTUSER por '% groupname'. Dessa forma, você pode gerenciar seus usuários de script com o usermodcomando

santana
fonte
6

Se você permitir que outros usuários executem um programa, eles poderão saber tudo o que o programa está fazendo, se o arquivo do programa é legível ou não. Tudo o que eles precisam fazer é apontar um depurador (ou um programa semelhante ao depurador strace). Um executável binário pode ser executado se for executável e não legível (um script não pode, porque o intérprete precisa ser capaz de ler o script), mas isso não oferece nenhuma segurança.

Se você deseja que outras pessoas possam executar seu programa como uma caixa preta, sem permitir que eles vejam exatamente o que o programa está fazendo, você precisa conceder privilégios elevados ao seu script: torne-o definido para o usuário. Somente o root pode usar ferramentas de depuração em programas setuid. Observe que escrever programas seguros de setuid não é fácil e a maioria dos idiomas não é adequada; consulte Permitir setuid em scripts de shell para obter mais explicações. Se você estiver escrevendo um programa setuid, recomendo vivamente o Perl, que possui um modo (modo de contaminação) explicitamente destinado a tornar possíveis scripts seguros de setuid.

Gilles 'SO- parar de ser mau'
fonte
-1

Você pode definir permissões de arquivo com o comando chmod. O usuário root e o proprietário do arquivo podem definir permissões de arquivo. O chmod possui dois modos, simbólico e numérico.

Primeiro, você decide se define permissões para o usuário (u), o grupo (g), outros (o) ou todos os três (a). Em seguida, adicione uma permissão (+), remova-a (-) ou limpe as permissões anteriores e adicione uma nova (=). Em seguida, você decide se define a permissão de leitura (r), permissão de gravação (w) ou executa a permissão (x). Por último, você dirá ao chmod quais permissões de arquivo você deseja alterar.

Aqui estão alguns exemplos.

Limpe todas as permissões, mas adicione permissão de leitura para todos:

$ chmod a=r filename

Após o comando, as permissões do arquivo seriam -r - r - r--

Adicione permissões de execução para o grupo:

$ chmod g+x filename

Agora, as permissões do arquivo seriam -r - r-xr--

Adicione permissões de gravação e execução para o proprietário do arquivo. Observe como você pode definir mais de uma permissão ao mesmo tempo:

$ chmod u + wx nome do arquivo

Depois disso, as permissões do arquivo serão -rwxr-xr--

Remova a permissão de execução do proprietário e do grupo do arquivo. Observe, novamente, como você pode definir os dois ao mesmo tempo:

Nome do arquivo $ chmod ug-x

Agora, as permissões são -rw-r - r--

Esta é uma referência rápida para definir permissões de arquivo no modo simbólico:

Which user?
u   user/owner
g   group
o   other
a   all
What to do?
+   add this permission
-   remove this permission
=   set exactly this permission
Which permissions?
r   read
w   write
x   execute
J Baron
fonte
É evidente pela pergunta que o OP entende como usar chmod. Isso não responde à pergunta.
1818 Scott Scott