Quero ligar meu sistema automaticamente todos os dias. Então, eu uso o código abaixo no meu script Python, mas sempre sudo
solicita uma senha:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
Como posso executar esse script sem sudo
solicitar a senha todas as vezes?
Respostas:
A maneira correta de fazê-lo é a instalação, de
sudo
modo que apenas um comando específico de que você precisa, ou sejaecho date... > rtc...
, tenha permissão para ser executado SEM precisar da senha.Etapa 1. Crie um script de shell com apenas esse comando
gedit
(ou seu editor favorito) e crie o script, por exemplopydatertc.sh
Etapa 2. Configure o sudo para permitir
pydatertc.sh
a execução sem exigir uma senhasudo visudo
no terminal para abrir osudoers
arquivo sudo Permissions ( )%sudo ALL=(ALL:ALL) ALL
username
está o seu nome de usuário:Etapa 3. Modifique seu script python para chamar
pydatertc.sh
Agora, seu script deve ser executado sem exigir uma senha E sem comprometer a segurança de sua conta, seus dados ou seu sistema!
Alternativa apenas para
wakealarm
(não para uso geral!):Apenas neste caso específico , como o
/sys/class/rtc/rtc0/wakealarm
arquivo controla apenas o alarme de ativação do sistema e é inofensivo, outra alternativa para evitar a senha é se apropriar desse arquivochown
(se você é o único usuário que define o alarme) ou torná-lo gravável no mundochmod +666
; nesse caso, basta remover asudo
chamada de Python, deixandosh -c "...."
intacta.fonte
sudo
- sem uma senha. Portanto, é muito mais seguro colocar o script em um diretório que somente o root possa alterar, por exemplo: / usr / sbin ou / root . Caso contrário, é LGTM.Se o script é apenas para uso pessoal e você o colocou em um local seguro e não tem medo de sua conta ser roubada e tal, então aqui está uma solução simples:
onde LOGINPASSWD é sua senha de login (exemplo: iloveponies) e COMMAND HERE é seu comando que vem após o sudo, como sh -c "echo da .. etc
fonte
Se você não se importa com o script em execução em um horário específico da hora (ou durante o dia), coloque-o no diretório inicial do root (
/root
) e execute o script no sistema crontab (/etc/crontab
) como root. Então você não precisará comprometer sua segurança.Veja https://help.ubuntu.com/community/CronHowto para saber como adicionar o script ao crontab.
fonte
anacron
se for um desktop / laptop que não seja executado 24 horas porOutro recurso interessante relacionado ao sudo, que não foi mencionado nas excelentes respostas acima, é a variável 'timestamp_timeout'. É uma variável sudo que você pode aumentar para economizar na digitação de senha interativa.
Por exemplo, em / etc / sudoers (ou em um dos arquivos incluídos), você pode modificar o padrão:
Descrição completa de 'man sudoers':
Obviamente, isso não pode ajudar no caso específico de executar o comando a partir do cron. Mas é bom estar ciente.
fonte
Para testar se está funcionando, digite:
Para executar "sudo apt-get update" e aceitar a senha das variáveis de ambiente que criamos anteriormente:
Execute a partir do python (exemplo, alterando a propriedade do diretório recursivamente para username_here):
echo $ MY_SUDO_PASS get -S da senha do switch pegando-o e passando a senha para o sudo
fonte