Executar script + arquivo da área de trabalho como raiz sem prompt

0

Eu tenho dois arquivos, sendo um deles um arquivo de área de trabalho, o outro sendo um script de shell. O arquivo da área de trabalho destina-se a abrir o script de shell e executá-lo em uma GUI do xTerm como raiz, sem a necessidade de "senha do sudo".

Foi-me dito para remover sudo completamente do shell script, deixando este . Como o programa precisava de acesso root, eu editei meu / etc / sudoers para o seguinte:

david ALL=(ALL) NOPASSWD:/home/david/upgrade.sh
david ALL=(ALL) NOPASSWD:/home/david/Desktop/Upgrade.desktop

Como fui instruído, e a partir daí, configurei o arquivo da área de trabalho. Comecei com o seguinte:

xterm -e sudo sh -p /home/david/upgrade.sh

Mas quando executei o arquivo da área de trabalho, ele ainda solicitou minha senha. Eu pensei que o sudo no arquivo da área de trabalho poderia ser o problema, mas ao removê-lo, a janela xTerm não abre mais. Como posso executar este script de shell a partir do arquivo da área de trabalho sem digitar minha senha?

    
por David 03.10.2016 / 22:56

1 resposta

1

Primeiro, remova sua linha sobre o arquivo da área de trabalho de /etc/sudoers , não é necessário.

Segundo, você configurou o comando exato /home/david/upgrade.sh para ser executado com NOPASSWD , não sh -p /home/david/upgrade.sh , que você tenta executar na janela xterm . Você deve executar o comando configurado para lucrar com a configuração NOPASSWD :

xterm -e sudo /home/david/upgrade.sh

A propósito, o shebang do seu arquivo de script especifica /bin/bash como intérprete, mas você tentou executá-lo com /bin/sh . O resultado é o mesmo, desde que você não use recursos específicos do Bash, mas deve evitar tais contradições. Isso não tem nada a ver com sudo e NOPASSWD .

Como um doce adicional, pode ser bom se você puder chamar seu script diretamente sem sudo e ele elevar seus privilégios automaticamente se ainda não estiver sendo executado como root. Eu escrevi um pequeno trecho de Bash para esta vez, ele pode simplesmente ser adicionado ao topo de qualquer script Bash que precise ser executado como root:

#!/bin/bash
if test "$(id -u)" -ne 0 ; then
    sudo "$0" "$1"
    exit $?
fi

Isso testa se o ID de usuário efetivo é 0 (raiz) e, caso contrário, ele executa seu próprio arquivo de script com sudo e também passa seu código de saída ao terminar. Isso funciona bem em conjunto com uma configuração NOPASSWD para o arquivo de script.

    
por Byte Commander 04.10.2016 / 01:04