A permissão de arquivo é executada apenas

11

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 o meu nome de usuário, mas eu não quero dar a senha. Eu tentei:

chmod 777 testfile
chmod a=x
chmod ugo+x

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

    
por c0mrade 13.07.2011 / 22:49

4 respostas

9

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
    
por 13.07.2011 / 23:19
11

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

Algum script que 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 $@

OPTIONAL STEP Crie um link simbólico para o somescript.sh em / bin /:

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

Verifique se o script da 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 exceção em / 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 PUDDING:

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::Crypto ou PAR::Filter::Crypto ou Acme::Bleach , que pode ser revertido por um determinado usuário. O mesmo vale para compilar seu script para binário. Deixe-me saber se você encontrar algo errado com este método. Para usuários mais avançados, você pode querer remover completamente a seção User_Alias e substituir o SCRIPTUSER por '% groupname'. Dessa forma, você pode gerenciar seus usuários de script com o comando usermod .

    
por 29.05.2013 / 19:04
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 a um depurador, como 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 interpretador precisa ler o script), mas isso não lhe dá nenhuma segurança.

Se você quiser que outros possam executar seu programa como uma caixa preta, sem permitir que eles vejam exatamente o que o programa está fazendo, você precisa dar privilégios elevados ao seu script: torná-lo setuid ao seu usuário. Apenas o root pode usar ferramentas de depuração em programas setuid. Note que escrever programas setuid seguros não é fácil, e a maioria dos idiomas não é adequada; consulte Permitir o setuid em scripts de shell para obter mais explicações. Se você for escrever um programa setuid, recomendo enfaticamente o Perl, que tem um modo (modo de corrupção) que é explicitamente destinado a tornar seguros os scripts setuid possíveis.

    
por 14.07.2011 / 01:32
-1

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

Primeiro, você decide se define permissões para o usuário (u), o grupo (g), os 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 permissão de execução (x). Por último, você dirá ao chmod quais permissões do 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 as 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 filename

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. Note, novamente, como você pode definir os dois de uma vez:

$ chmod ug-x filename

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

Esta é uma referência rápida para definir as 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
    
por 29.05.2013 / 19:26