Um prompt pkexec - dois comandos

3

Alguém poderia me responder como fazer um prompt via pkexec quando eu tiver que usar dois comandos com autenticação? Meu script de amostra fácil:

pkexec virsh net-start default;
pkexec "/home/user/program";

Sou novo no ambiente linux, Obrigado :)

    
por Hamlet 04.02.2018 / 19:09

2 respostas

2

Resposta antiga .: Você pode tirar o pkexec do roteiro? Tente criar o próximo script onde você cola seu código (sem o pkexec) e execute-o via pkexec a partir do seu script. seu script: #!/bin/bash pkexec ./new_script novo script: #!/bin/bash your command:

Editar: nova resposta

Após sua conversa com o @Thrig, eu acho que você vai fazer. Você deseja executar os dois programas em permissões de raiz sem autenticação dupla (apenas uma vez). Estes dois programas são: "virsh" e "gnome-boxes". Minha solução anterior (acima) está ok, mas não neste caso. Você escreveu para @Thrig que você está pensando em usar "sudo". Por que não usar "pkexec" e "sudo" juntos? Com a conclusão adequada de "/ etc / sudoers" você não precisará autenticar quando usar o comando "sudo" no script. Eu me deixei melhorar sua ideia. Espero que você goste. Vou descrever tudo passo a passo.

1. Crie três scripts:

a) main.sh - configura a conexão, destrói a conexão, executa as caixas-gnome. tudo como root

b) net.sh - executa a ordem

c) die.sh - executa a ordem

a)

#!/Bin/bash
sudo /home/ham/..your..path../net.sh && pkexec /usr/bin/gnome-boxes;
sudo /home/ham/..your..path../die.sh;
exit

por que isso? descrição dos operadores

b)

#!/Bin/bash
virsh net-start default

c)

#!/Bin/bash
virsh net-destroy default

2. Edite o arquivo "sudoers" para criar o script: b) c) execute com privilégios de root:

$ sudo nano /etc/sudoers

%sudo ALL=(root) NOPASSWD: /home/..your..path../net.sh
%sudo ALL=(root) NOPASSWD: /home/..your..path../die.sh 

3. Altere o proprietário dos scripts b) c) para root:

$ sudo chown 700 /home/ham/..your..path../net.sh
$ sudo chown 700 /home/ham/..your..path../die.sh;

4. Crie uma regra no polkit para gnome-boxes. A resposta: "como fazer isso?" está aqui: simple_polkit_rule

5. Editar arquivos:

  • org.gnome.Boxes.service

    Exec=/home/..your..path../start.sh

  • org.gnome.Boxes.desktop

    Exec=/home/..your..path../start.sh

6. Agora, rode o aplicativo gnome-boxes clicando no seu ícone de atalho. Acabado. De mim mesmo eu adicionei auto desligar a conexão quando você fechar o aplicativo gnome-boxes.

    
por 04.02.2018 / 19:26
1

Muitos tiveram problemas semelhantes ao querer executar GUI com privilégios su. Mais recentemente, examinei a janela do terminal aberto e demorado. Depois de pesquisar isso é o que funcionou para mim.

  • meu uso está chamando GUI com SU do termo e / ou um script de shell de ~ / bin usando aliases.

O aumento de privilégios da GUI de "su" ou "sudo" não é recomendado e nunca deve ser feito sem o conhecimento dos riscos do que você está fazendo.

  • O

    pkexec pode ser obtido da seguinte forma:

    sudo apt install policykit-1
    
  • Edite a parte inferior deste arquivo de onde parece:

    sudo nano /usr/share/polkit-1/actions/org.freedesktop.policykit.policy
    
  • a sua deve ficar assim:

    <action id="org.freedesktop.policykit.lockdown">
    
      <description>Configure lock down for an action</description>
    
        <message>Authentication is required to configure lock down policy</message>
    
      <defaults>
    
        <allow_any>auth_admin</allow_any>
    
        <allow_inactive>auth_admin</allow_inactive>
    
        <allow_active>auth_admin</allow_active>
    
      </defaults>
    
      <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pklalockdown</annotate>
    
    </action>
    
  • Depois disso, tente:

    pkexec gedit 
    

Adicionando um caminho de caixa personalizada ao terminal: - O padrão é armazenar os programas shell dos usuários em

   /home/$USER/bin

ou

   ~/bin

* Estes são o mesmo local, o primeiro é o caminho completo para o arquivo, o segundo é o ponteiro curto para

    /home/$USER/bin
  • Para adicionar seu usuário / bin ao seu $ USER $ PATH, simplesmente

    mkdir /home/$USER/bin
    
  • O terminal

    agora reconhecerá seus scripts ou programas de shell localizados em

    ~/bin
    

Exemplo:

    $/path/to/file.sh 

Torna-se:

    $file.sh

ADICIONE isso a .bashrc

export PATH=$PATH:$HOME/bin

Where "$HOME/bin" is the directory I assume you want to add. This change is only temporary (it works only in the current session of the shell) to make it permanent add the previous line to your .bashrc file located in your home directory.

  • Eu prefiro esse método de escalonamento de privilégios para aplicativos de GUI, porque eu posso apenas pkexec em um script de shell para executar vários programas e ter a opção de salvar as credenciais temporariamente.

  • você pode tentar adicionar um alias a ~ / .bash_aliases:

    echo 'alias gedit="pkexec gedit"' >> ~/.bash_aliases 
    

/ PKEXEC / SU / GUI / GKsu / POLKIT / policykit-1

    
por 24.03.2018 / 05:57