Por favor note: Qualquer método que envolva colocar sua senha de login em texto simples, em um comando ou em um arquivo, é inseguro e NÃO deve ser usado!
A maneira correta de fazer isso para configurar sudo
de modo que somente o comando específico que você precisa, ou seja, echo date... > rtc...
, seja permitido para ser executado SEM precisar do senha.
Etapa 1. Crie um script de shell apenas com esse comando
- Abra
gedit
(ou o seu editor favorito) e crie o script, por ex. %código% - Insira somente esta linha e salve-a, por exemplo seu diretório home:
echo date \'+%s\' -d \'+ 24 hours\' > /sys/class/rtc/rtc0/wakealarm
- Encerre o editor e, no terminal, torne o script executável e altere sua propriedade para root , caso contrário, outro usuário com acesso ao sistema poderá editá-lo e execute os comandos que quiser como root sem precisar da sua senha:
sudo chown root:root /home/username/pydatertc.sh sudo chmod 700 /home/username/pydatertc.sh
Etapa 2. Configure o sudo para permitir que pydatertc.sh
seja executado sem exigir uma senha
- Digite
pydatertc.sh
no terminal para abrir o arquivo de permissões sudo (sudo visudo
) - Na linha 25, você verá esta linha:
sudoers
-
Abaixo dessa linha , insira a seguinte linha, em que
%sudo ALL=(ALL:ALL) ALL
é seu nome de usuário:username ALL=(ALL) NOPASSWD: /home/username/pydatertc.sh
- Saia do editor ( Ctrl + X se nano )
Etapa 3. Modifique seu script python para chamar username
- Altere a linha para:
os.system('sudo /home/username/pydatertc.sh')
Agora, seu script deve ser executado sem a necessidade de uma senha AND sem comprometer a segurança de sua conta, seus dados ou seu sistema!
Alternativa apenas para pydatertc.sh
(não para uso geral!):
Em apenas neste caso específico , como o arquivo wakealarm
controla apenas o alarme de ativação do sistema e é inofensivo, outra alternativa para evitar a senha é apropriar-se disso arquivo com /sys/class/rtc/rtc0/wakealarm
(se você for o único usuário definindo o alarme) ou torná-lo gravável em todo o mundo com chown
; Nesse caso, basta remover o chmod +666
da sua chamada do Python, deixando sudo
intacto.