Eu tenho um script que pode ser executado como sudo script.sh
oupkexec script.sh
Seria muito melhor do ponto de vista do usuário se o script pedisse a senha do usuário ao executá-lo apenas pelo nome script.sh
.
Como posso "incorporar" a solicitação pkexec
ou sudo
a execução de todo o script com privilégios de root?
Observe que executar tudo com sudo sh -c
pode não ser a melhor solução, pois tenho funções no script.
command-line
bash
scripts
Sergiy Kolodyazhnyy
fonte
fonte
exec
- chamada em si, mas ao mesmo tempo de processo de substituição, por isso fazemos várias instâncias não desova do script"$@"
expandirá para várias palavras, uma para cada parâmetro.Se você quiser um diálogo bonito, tente algo assim. Eu retirei isso de outra coisa que escrevi, então tem coisas extras que você pode não precisar ou querer, mas mostra a ideia geral:
Isso usa whiptail, que você pode instalar se ainda não o tiver:
fonte
exec echo [PASSWORD]
! Irá gerar um processo com a senha na linha de comando que qualquer usuário pode ver. Use o comando interno (echo
force a versãobuiltin echo
interna com ) ou o basismo<<<
(assim :)sudo ... <<< "$pass"
; Sh e outras conchas têm aqui documentos para esses casos. Além disso, cite a senha, caso ela contenha caracteres especiais.whiptail
comando em um script separado e use algo comoSUDO_ASKPASS=/path/to/askpass-with-whiptail.sh sudo -A -p "My password prompt" -- "$0" "$@"
parasudo
lidar com o prompt de senha personalizado.A resposta de blade19899 é realmente o caminho a percorrer, no entanto, também se pode chamar
sudo bash
o shebang:A ressalva óbvia é que isso funcionará apenas enquanto o script for chamado
./script
e falhará assim que o script for chamadobash script
.fonte
bash script
na linha de comando para chamar um script. Se o script especificar algo diferentebash
da#!
linha, a chamada combash script
falhará. Se eu tentasse invocar um script python usandobash script.py
ele também falharia.perl script
, no entanto. O Perl, em um esforço para ser realmente muito bom, verifica a linha shebang e, se não está invocando o perl, executa o programa correto.Prefácio os comandos dentro do script que precisam de acesso root
sudo
- se o usuário ainda não obteve permissões, o script solicita uma senha nesse ponto.exemplo
Este script pode ser executado como
sudo <scriptname>
ou como<scriptname>
. Nos dois casos, ele solicitará a senha apenas uma vez.fonte
sudo
25 comandos diferentes redundantes - é mais fácil chamar sudo uma vez. Aqui, no entanto, o motivo pelo qual o script chama sudo apenas uma vez é porque o sudo tem um tempo de 15 minutos - comandos que demoram mais do que isso precisam ser re-solicitados. Seu caminho funciona apenas. . . não da maneira que eu preciso para funcionar.Parece que ninguém mais abordou a preocupação óbvia aqui. A inserção do
sudo
script que você distribui promove maus hábitos do usuário . (Suponho que você esteja distribuindo porque menciona "do ponto de vista do usuário".)A verdade é que há uma diretriz no uso de aplicativos e scripts semelhante ao princípio de segurança do banco: Nunca forneça suas informações pessoais a alguém que ligue para você e diga que está ligando "do seu banco" e que exista por razões semelhantes.
A regra para aplicativos é:
Nunca digite sua senha quando solicitado, a menos que tenha certeza do que está sendo feito. Isso se aplica triplamente a qualquer pessoa com
sudo
acesso.Se você estiver digitando sua senha porque executou
sudo
na linha de comando, ótimo. Se você está digitando porque executou um comando SSH, tudo bem. Se você está digitando quando faz login no seu computador, ótimo, é claro.Se você acabou de executar um script estrangeiro ou executável e digitar sua senha de forma discreta quando solicitado, não terá idéia do que o script está fazendo com ele. Poderia estar armazenando-o em um arquivo temporário em texto sem formatação, pelo que você sabe, e pode até falhar na limpeza depois de si próprio.
Obviamente, existem preocupações separadas e adicionais sobre a execução de um conjunto desconhecido de comandos
root
, mas o que estou falando aqui é manter a segurança da própria senha . Mesmo supondo que o aplicativo / script não seja malicioso, você ainda deseja que sua senha seja manipulada com segurança para impedir que outros aplicativos o sigam e usem maliciosamente.Portanto, minha resposta pessoal a isso é que a melhor coisa a ser inserida no seu script se ele precisar de privilégios de root é:
fonte
sudo script_name
é vulnerável, é o mesmo. Talvez essa idéia promova maus hábitos - não vou dizer nada sobre isso. Mas a chave é saber o que um programa faz, e isso é responsabilidade do usuário. Essa é a idéia por trás do software de código aberto. Quanto ao meu próprio roteiro, bem. . . um script é texto simples - os usuários podem lê-lo se eles querem saber o que ele fazEu fiz assim:
fonte