Arquivo de inicialização em chamadas init.d usando sudo em script.sh fornece erro sudo: no tty presente e nenhum programa askpass especificado

1

Eu estou tentando fazer um script que é iniciado na inicialização para se conectar à minha VPN pessoal.

Eu tenho um arquivo init: /etc/init.d/vpnstartup

que chama meu script vpnon.sh na inicialização com os comandos:

case "" in
    start)
        su username -c $VPN_DIR/vpnon.sh
        ;;

no meu script vpnon.sh existem comandos que precisam de permissões de root para serem executados:

sudo iptables -A INPUT -i pptp -j ACCEPT
sudo iptables -A OUTPUT -o pptp -j ACCEPT

Eu concedo permissões do arquivo init vpnstartup e do script vpnon.sh com chmod 775 quando eu tento o meu arquivo init chamando-o usando ./vpnstartup start

Eu recebo o seguinte erro quando o comando sudo iptables é chamado

sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified

O que eu acho que está acontecendo é que o comando sudo requer uma senha de entrada, mas não tem como obtê-la.

A única solução que encontrei foi adicionar o NOPASSWD :ALL option para o arquivo sudoers sob o meu nome de usuário.

Eu não quero fazer esse método por motivos de segurança se houver uma solução melhor.

Por favor, deixe-me saber se você pode me ajudar com este problema; Eu passei muitas horas nisso.

    
por tritium_3 18.03.2015 / 05:54

1 resposta

1

Eu encontrei a solução para o problema.

Eu removi todos os comandos individuais do sudo no meu script vpnon.sh e passei o sudo de fora do script.

No meu arquivo /etc/init.d/vpnstartup, alterei o su username -c para sudo $VPN_DIR/vpnon.sh que se parece com isso agora:

case "" in
    start)
        sudo $VPN_DIR/vpnon.sh
        ;;

então chamado sudo update-rc.d vpnstartup defaults e agora a VPN se conecta na inicialização! :)

    
por tritium_3 19.03.2015 / 08:14