Como contornar o sudo

2

Estou tentando criar scripts para uma instalação não-interativa do Meteor (JS Framework) e parte dos prompts de script para o sudo. Eu não consigo passar por isso com minhas habilidades de script.

A instalação é: curl https://install.meteor.com | /bin/sh

Em um ponto posterior do script, ele solicita a senha do Sudo. Eu quero que essa etapa falhe . E então eu posso rotear meu caminho em torno da resolução.

Nota: Não consigo adicionar o usuário ao arquivo sudoers, ele está sendo executado em um ambiente compartilhado que não permite acesso elevado do meu usuário.

    
por Mike Graf 08.08.2014 / 20:19

2 respostas

10

Isso substituirá qualquer instância da string "sudo" (sans quotes) por "sudo -n" (sem aspas):

curl https://install.meteor.com | sed 's/sudo/sudo -n/g' | /bin/sh

De o sudo manpage :

-n' The -n (non-interactive) option prevents sudo from prompting the user for a password. If a password is required for the command to run, sudo will display an error message and exit.

Vale ressaltar, no entanto, que este só funciona se você for solicitado a fornecer uma senha. Em outras palavras, se você executou sudo recentemente, e essas credenciais permitem que você execute o sudo sem inserir uma senha por 15 minutos (o padrão) e você o executa em 15 minutos, o comando acima ainda terá sucesso na execução do sudo. Ou se você nunca for solicitado normalmente por uma senha, isso também causará sucesso.

Para invalidar a sessão criada pela inserção recente de credenciais sudo, execute sudo -k . Mais uma vez, no manual:

-k [command]

When used alone, the -k (kill) option to sudo invalidates the user's cached credentials. The next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file. Not all security policies support credential caching.

When used in conjunction with a command or an option that may require a password, the -k option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.

Se isso não funcionar para você (se, por exemplo, sua política de segurança não solicitar uma senha), tente:

curl https://install.meteor.com | sed 's/sudo/sudo \/bin\/false/g' | /bin/sh

Se o programa sudo estava em execução falhou, o sudo falhará. E de a página de manual para false :

Exit with a status code indicating failure.

... é tudo falso.

O que isto significa é que, em vez de executar qualquer comando que esteja tentando executar com sudo, ele executará /bin/false , passando o nome do programa original destinado a ser executado em sudo como o primeiro argumento. / p>

OBSERVAÇÃO: Se você realmente quiser que toda a primeira linha contenha uma chamada sudo para falhar, essas soluções não (necessariamente) farão isso acontecer. A própria chamada sudo falhará, mas se seus argumentos forem criados em uma sub-shell, ou se houver comandos anteriores na mesma linha, eles funcionarão normalmente. Então, se o comando original fosse:

sudo exterminate "$(ls /humans)"

Isso se tornaria:

sudo /bin/false exterminate "$(ls /humans)"

E ls /humans ainda seria executado. Provavelmente óbvio, e provavelmente não importa, mas apenas no caso, eu pensei em mencionar.

    
por 08.08.2014 / 21:27
0

Por que não modificar o script antes de usá-lo: curl https://install.meteor.com > /tmp/script , modifique-o em / tmp / script e execute-o /bin/sh /tmp/script

Editar: ou se a senha for solicitada, basta digitar três vezes uma senha incorreta e você será rejeitado

    
por 08.08.2014 / 20:23

Tags