Maneira alternativa de executar um comando sudo na inicialização

3

Estou tentando escrever um script para o meu sistema Ubuntu para hibernar, sempre que a quantidade de bateria restante for (digamos) de 5%. Este script será executado na inicialização.

Eu posso deixar a bateria usando

upower -d |grep perc

Então eu quero usar

sudo pm-hibernate

sempre que a bateria atingir < = 5%. Mas isso requer permissão de superusuário. E NÃO QUERO TIPO SENHA NOVAMENTE E NOVAMENTE DEPOIS DE CADA LOGIN.

Uma maneira é usar a seguinte linha em / etc / sudoers

yourlogin ALL=(ALL) NOPASSWD: command_here 

Mas a maioria das pessoas recomenda isso.

Outra maneira é adicionar um script de inicialização personalizado em /etc/init.d . Mas não tenho certeza se é uma escolha segura.

Além disso, existe alguma outra alternativa que seria melhor para o meu propósito?

    
por spiderbat 05.02.2015 / 05:16

4 respostas

3

Mais simples do que adicionar um script a init.d é escrever uma configuração Upstart. Eu preferiria isso acima de tudo. Crie um arquivo .conf em /etc/init (digamos, /etc/init/sleep-on-suspend.conf , contendo:

description "Automatic suspend"

start on runlevel [2345]
stop on runlevel [016]

exec /path/to/script

Isso será iniciado automaticamente na reinicialização.

Você pode até integrar o script nesse arquivo. Em vez da linha exec , use:

script
    while sleep 1; do
    upower -d | awk -F'[ %]*' '/perc/ && ($3 < 5) { exit 1 }' || pm-hibernate
    done
end script
    
por muru 05.02.2015 / 07:06
3

Execute sudo crontab -e -u root e anexe a linha @reboot /path/to/script à parte inferior do arquivo e, em seguida, o usuário root executará automaticamente seu script como root no login. E um lembrete amigável para garantir que ninguém além de você e do root possa acessar o script, caso contrário, as pessoas poderiam executar qualquer comando como root.

    
por John Cave 05.02.2015 / 06:50
1
% bl0ck_qu0te%

Se você realmente quer dizer isso, então já está falando sobre privilégios de root.

Como é o restante do seu script? Nós não podemos realmente julgar a segurança ou a falta dos mesmos de comandos isolados.

Uma alternativa seria executá-la, digamos, a cada 5 minutos de root ' crontab '. Se você tem medo das conseqüências de segurança, pode criar um usuário dedicado com privilégios limitados, exceto no gerenciamento de energia.

Adicione isto a um novo arquivo:

*/5 * * * * root /usr/local/sbin/hibernate-on-power-low

(onde talvez root possa ser substituído por um usuário dedicado, se desejar) e instale isso em /etc/cron.d/hibernate-maybe . Obviamente, o script que faz o trabalho real teria que ser instalado em /usr/local/sbin/hibernate-on-power-low e devidamente auditado para segurança e eficiência (provavelmente usando uma interface de kernel direta seria mais robusta e eficiente que grep ) e obviamente, se você rodar com privilégios adequados, você não precisa de sudo para executar pm-hibernate .

    
por tripleee 05.02.2015 / 06:59
0

Outra alternativa é usar sudo -S (o que também não é seguro).

A opção

-S de sudo lerá a senha de STDIN. Então, você pode usar como:

echo 'password' | sudo -S <command>
    
por heemayl 05.02.2015 / 05:21