Script de inicialização com sudo no Ubuntu 16.10

5

Eu preciso iniciar um script e um arquivo binário de /usr/bin na inicialização com privilégios sudo / root. Eu tentei muitos guias deste fórum, mas nada funcionou ( rc.local e systemd style, Upstart) - talvez eu esteja fazendo algo errado. Meu sistema operacional é o Ubuntu GNOME 16.10.

O script seria algo assim

#!/bin/bash
sudo ./usr/bin/myprogram
sudo bash /home/USER/script.bash

O script e o programa são executáveis. Eu simplesmente não conheço a maneira ideal de iniciá-los com o sudo na inicialização.

Por favor, seja gentil. Sou um novo usuário.

    
por bhunter 05.03.2017 / 00:16

2 respostas

6

Para aplicativos de linha de comando que não exigem GUI, basta colocar a chamada para eles em /etc/rc.local , que já é executado como raiz, portanto, não precisa de sudo . Abaixo está o exemplo do meu próprio /etc/rc.local , que eu uso para iniciar dois scripts de monitoramento.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/xieerqi/bin/batmon.sh &
/home/xieerqi/bin/sh/temperature.sh  &
 exit 0

Para aplicativos GUI, você precisaria ter uma abordagem diferente. Você precisaria abrir o aplicativo Startup Applications e adicionar o seguinte comando:

bash -c "sleep 10;gksu /usr/bin/my_vpn_program"

O que isto faz é dar à GUI tempo suficiente para iniciar, 10 segundos, depois abrir a caixa de diálogo de senha e se você inserir a senha corretamente, iniciará seu comando. Efetivamente este é um script mini-bash. Você pode usar pkexec , e alguns podem até dizer que pkexec é recomendado em vez de gksu .

Como alternativa, se você não quiser inserir a senha todas as vezes, poderá permitir que o usuário execute esse comando específico com privilégios de root sem autenticação. Para isso você precisa editar o arquivo /etc/sudoers . AVISO : recomenda-se usar sudo visudo para editar o arquivo do terminal. Abaixo está um exemplo de como eu uso a mesma configuração com o comando pm-suspend :

# Allow using pm-suspend for my user without password
xieerqi ALL = NOPASSWD: /usr/sbin/pm-suspend

Esta linha deve ser anexada ao final do arquivo /etc/sudoers e salva. Note que você ainda precisa anexar sudo ou gksu ao início de cada comando que você configurou. Assim, você precisaria usar o mesmo comando bash que mostrei anteriormente.

    
por Sergiy Kolodyazhnyy 05.03.2017 / 09:08
1

A solução é tão simples que você perdeu. :) Como o rc.local é executado pelo root, o sudo do seu arquivo é totalmente desnecessário.

Em outras palavras, coloque-o em rc.local conforme sugerido, mas omita o sudo do seu script. Eles são totalmente desnecessários, pois o rc.local já é executado como root.

Espero que isso ajude!

    
por anonymous2 05.03.2017 / 00:55