Um script pode ser executável, mas não legível?

Um script pode ser executável, mas não legível?

É possível executar um script se não houver permissão para lê-lo? No modo root, criei um script e quero que o outro usuário execute esse script, mas não o leia. Fiz chmodpara proibir leitura e escrita mas permitir execução, porém em modo usuário, vi a mensagem que diz: permissão negada.

Responder1

A questão é que o script não é o que está rodando, mas o interpretador ( bash, perl, python, etc.). E o intérprete precisa ler o roteiro. Isso é diferente de um programa "normal", como o ls, porque o programa é carregado diretamente no kernel, como faria o interpretador. Como o próprio kernel está lendo o arquivo do programa, ele não precisa se preocupar com o acesso de leitura. O intérprete precisa ler o arquivo de script, como um arquivo normal precisaria ser lido.

Responder2

Isso é possível apenas para binários.

$ chown foo:foo bar
$ chmod 701 bar

Como usuário sem privilégios:

$ ls -lha bar
-rwx-----x 1 foo foo 7.0K 2012-03-15 03:06 bar

$ cat bar
cat: bar: Permission denied

$ ./bar
baz

Agora, aqui está o chute. Embora o arquivo seja ilegível por meios convencionais, você não pode impedir a leitura do arquivo. Na verdade, este é um desafiohttp://smashtestack.org/(nível 13). Existe um utilitário bem conhecido chamado hktraceque permite ler o arquivo usando a extensão ptrace.

Responder3

Há uma meia verdade nas afirmações anteriores. Você pode configurar um script para que ele não seja legível pelo usuário, mas ainda seja executável. O processo é um pouco demorado, mas é possível abrindo uma exceção em /etc/sudoer para que o usuário possa executar o script como você mesmo temporariamente, sem ser solicitada uma senha. Este método: - contorna o patch setuid para outras distros. - permite conceder permissões elevadas temporariamente para um script específico sem conceder ao usuário direitos sudo para tudo.

Siga as instruções desta postagem: Permissão de arquivo somente execução

Responder4

Você pode, eu acho, fazer isso com setuid.

Exceto que você não pode, porque a maioria das distros (aparentemente) foi setuiddesativada porque é uma enorme falha de segurança. Está desabilitado no meu, então não sei se essa resposta vai funcionar, estou postando mesmo assim porque acho que simdeve.

De qualquer forma, se eu quisesse fazer o que você queria - e eu tivesse uma distro setuidhabilitada para scripts - eu faria algo como:

$ chmod 700 myscript
$ cat > myscript-nonroot
#!/bin/sh
bash myscript
^D
$ sudo chown root:root myscript-nonroot
$ sudo chmod 4755 myscript-nonroot # make SURE this isn't world-writable!

O que quer dizer que eu escreveria outro script cujo único propósito é chamar o script root-read-only, alterá-lo para pertencer ao root e dar-lhe a permissão setuid. (Juntamente com o status não gravável por todos os outros.)

Como a função myscript-nonroot é legível por todos, ela pode ser lida e executada, e no momento em que você obtém duas linhas onde você realmente executa seu script ( bash myscript), ele está sendo executado como root (ou quem mais você quiser, o usuário exato não importa, desde que o arquivo wrapper pertença ao mesmo usuário.)

informação relacionada