Gravar mas não ler permissão em um arquivo no linux

3

É possível ter permissão de gravação, mas não de leitura, em um arquivo no Linux? Que tal executar mas não ler e escrever permissão?

    
por Hanna 22.04.2013 / 20:41

4 respostas

6

Sim, embora a permissão de execução sem permissão de leitura seja insignificante em um arquivo não binário (desde que você precise ler um script para executá-lo). Em um diretório, executar sem ler significa que você pode percorrer o diretório, mas não listá-lo ou fazer qualquer outra coisa com seu conteúdo. Considere o seguinte caminho:

/home/user/foo/bar

Se o diretório foo tiver o modo 0711 (permissão total para proprietário, executar apenas para grupo e mundo), enquanto o diretório bar possui o modo 0755 (permissão total para proprietário, leitura e execução para todos os outros), que user pode cd /home/user/foo/bar e descobre que bar se comporta como qualquer diretório comum; no entanto, enquanto cd /home/user/foo funcionará, ls e qualquer outro comando nesse diretório falharão devido a permissões insuficientes (ou seja, você não poderá ler o diretório para listar seu conteúdo).

A permissão de gravação sem permissão de leitura em um arquivo faz exatamente o que isso implica: você pode escrever no arquivo, mas não pode ler de volta o que escreveu. Isso pode ser útil em um caso em que processos sob várias contas gravam em um único arquivo de log, mas um processo pertencente a um usuário não deve ser capaz de ler as entradas de log (presumivelmente sensíveis) de um processo pertencente a outro usuário.

    
por 22.04.2013 / 20:49
8
[benji@laptop ~]$ ./hello
Hello world!
[benji@laptop ~]$ chmod 000 hello #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello #make it executable
[benji@laptop ~]$ cat hello #try to read it, but can't
cat: hello: Permission denied
[benji@laptop ~]$ ./hello #try to run it, it works!
Hello world!
[benji@laptop ~]$

[benji@laptop ~]$ cat hello.sh
#!/usr/bin/bash
echo 'Hello world!'
[benji@laptop ~]$ chmod 000 hello.sh #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello.sh #make it executable
[benji@laptop ~]$ cat hello.sh #try to read it; FAIL
cat: hello.sh: Permission denied
[benji@laptop ~]$ ./hello.sh #try to run it, but the shell interpreter (bash) cannot read it; FAIL
/usr/bin/bash: ./hello.sh: Permission denied
[benji@laptop ~]$ 

É possível ter permissões de execução somente se o arquivo não for um script de shell; um script de shell precisa ser lido (e, portanto, precisa de permissões de leitura) pelo interpretador de shell. Caso contrário, para arquivos executáveis binários, as permissões de leitura não são necessárias; apenas execute permissões.

[benji@laptop ~]$ echo hello >file
[benji@laptop ~]$ chmod 000 file #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +w file #write-only permissions
[benji@laptop ~]$ cat file #cannot read it
cat: file: Permission denied
[benji@laptop ~]$ echo hello again >file #but *can* write it

Então, sim, é possível ter permissões de gravação, mas não de leitura, em um arquivo.

    
por 22.04.2013 / 20:45
2

As permissões de leitura, gravação e execução no Unix geralmente são totalmente independentes.

O Unix distinbguishes entre permissões de usuário (para o proprietário do arquivo), permissões de grupo (para anybpdy pertencente ao grupo do arquivo) e outros. As permissões são verificadas estritamente nesta ordem; ou seja, se o usuário tentar acessar, as permissões do usuário se aplicam e nada mais é verificado; se não for o usuário, mas pertencer ao grupo, serão aplicadas permissões de grupo; se nenhuma das opções acima, outras permissões se aplicam.

As permissões são mostradas por ls(1) como rwx thrice (usuário, grupo, outros). Portanto, r-- significa somente leitura, rw- é leitura-gravação e --x é somente de execução. O comando chown(1) é normalmente alimentado com números octal que fornecem as permissões, mas você também pode usar a notação acima, ou seja, chown u+r,g-x,o=rw somefile significa "adicionar r para usuário, subtrair x para grupo, definir r e w exatamente para os outros ".

    
por 22.04.2013 / 20:51
1

Uma maneira de abordar o chmod é usar o método chmod onde read = 4 write = 2 execute = 1. o posicionamento do número que você quer vai na ordem U = usuário G = grupo O = Outros o comando 'chmod UGO' irá definir permissões.

Se você quiser que o usuário tenha permissões completas, ele será lido (4) + write (2) + execute (1) = 7

Se você quiser que o grupo tenha leitura e execução, ele será lido (4) + execute (1) = 5

Se você quiser que outro não tenha acesso, ele será 0

o comando para definir essas permissões seria: chmod 750 file

    
por 22.04.2013 / 21:02