Solicitar senha sudo e elevar programaticamente o privilégio no script bash?

43

Atualmente, estou trabalhando em um script básico que instala e configura vários programas em um sistema Linux padrão (atualmente, Ubuntu). Como ele instala programas e copia vários arquivos para várias pastas que exigem privilégios elevados, já fiz o padrão "Preciso de privilégios elevados" e saída.

No entanto, gostaria, se possível, de poder solicitar ao usuário sua senha sudo e elevar automaticamente os privilégios do script se o usuário não executasse o comando de script com o sudo (por exemplo, ativá-lo a partir do arquivo GUI gerente), sem que o usuário precise reiniciar o script.

Como isso é projetado para ser executado em instalações Linux, qualquer opção que modifique o sistema não funcionará para os meus propósitos. Todas as opções precisam estar contidas no próprio script.

Isso é possível no Bash? Se sim, qual é a melhor maneira (segura, mas concisa) de fazer isso?

    
por Shauna 10.01.2012 / 20:08

4 respostas

57

Eu corro sudo diretamente do script:

if [ $EUID != 0 ]; then
    sudo "$0" "$@"
    exit $?
fi
    
por 10.01.2012 / 20:35
16

Adicione isso como a primeira linha do script:

[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"

Altere sudo para gksu ou gksudo se você preferir um prompt gráfico.

    
por 10.01.2012 / 20:41
15

Sugiro:

#!/bin/bash

if (($EUID != 0)); then
  if [[ -t 1 ]]; then
    sudo "$0" "$@"
  else
    exec 1>output_file
    gksu "$0 $@"
  fi
  exit
fi

# some example stuff
ls -l /root
echo "app: $0"
for f; do
  echo ">$f<"
done
    
por 10.01.2012 / 20:51
0

script de exemplo eu não me importo de compartilhar ::

#!/bin/bash
[ "$UID" -eq 0 ] || exec sudo "$0" "$@" && echo -n "sudo bash what: "
read WHAT
sudo $WHAT

- IMP.TeK

    
por 24.01.2018 / 04:43

Tags