Quiero encender mi sistema automáticamente todos los días. Así que uso el siguiente código en mi script Python, pero siempre sudo
me pide una contraseña:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
¿Cómo puedo ejecutar este script sin sudo
pedir la contraseña cada vez?
Respuestas:
La forma correcta de hacerlo para la configuración de
sudo
tal manera que soloecho date... > rtc...
se pueda ejecutar el comando específico que necesita, es decir , sin necesidad de la contraseña.Paso 1. Crea un script de shell con solo ese comando
gedit
(o tu editor favorito) y crea el script, por ejemplopydatertc.sh
Paso 2. Configure sudo para permitir
pydatertc.sh
ejecutar sin requerir una contraseñasudo visudo
en la terminal para abrir elsudoers
archivo sudo permissions ( )%sudo ALL=(ALL:ALL) ALL
username
está su nombre de usuario:Paso 3. Modifique su script de Python para llamar
pydatertc.sh
¡Ahora su script debería ejecutarse sin requerir una contraseña Y sin comprometer la seguridad de su cuenta, sus datos o su sistema!
Alternativa solo para
wakealarm
(¡no para uso general!):Solo en este caso específico , dado que el
/sys/class/rtc/rtc0/wakealarm
archivo solo controla la alarma de activación del sistema y es inofensivo, otra alternativa para evitar la contraseña es tomar posesión de ese archivochown
(si usted es el único usuario que configura la alarma) , o hacer que se pueda escribir en el mundo conchmod +666
; en ese caso, simplemente elimine elsudo
de su llamada a Python, dejándolosh -c "...."
intacto.fuente
sudo
, sin contraseña. Por lo tanto, es mucho más seguro colocar el script en un directorio que solo la raíz pueda alterar, por ejemplo: / usr / sbin o / root . De lo contrario, es LGTM.Si el script es solo para uso personal y lo ha colocado en un lugar seguro y no tiene miedo de que le roben su cuenta, entonces aquí hay una solución simple:
donde LOGINPASSWD es su contraseña de inicio de sesión (ejemplo: iloveponies) y COMMAND AQUÍ es su comando que viene después de sudo, como sh -c "echo da .. etc.
fuente
Si no le importa que el script se ejecute a una hora específica en la hora (o durante el día), colóquelo dentro del directorio de inicio de root (
/root
) y ejecute el script desde el sistema crontab (/etc/crontab
) como root. Entonces no tendrá que comprometer su seguridad.Consulte https://help.ubuntu.com/community/CronHowto para ver cómo agregar el script al crontab.
fuente
anacron
si que es un ordenador de sobremesa / portátil, que no se ejecutan 24x7Otra característica agradable relacionada de sudo que no se ha mencionado en las excelentes respuestas anteriores es la variable 'timestamp_timeout'. Es una variable sudo que puede aumentar para guardar en la escritura interactiva de contraseñas.
Ejemplo, en / etc / sudoers (o uno de los archivos incluidos) puede modificar el valor predeterminado:
Descripción completa de 'man sudoers':
Por supuesto, esto no puede ayudar en el caso específico de ejecutar el comando desde cron. Pero es bueno tener en cuenta.
fuente
Para probar si funciona, escriba:
Para ejecutar "sudo apt-get update" y aceptar la contraseña de las variables de entorno que creamos antes:
Ejecutar desde python (ejemplo, cambiar la propiedad del directorio de forma recursiva a username_here):
echo $ MY_SUDO_PASS get's password -S cambia la captura y pasa la contraseña a sudo
fuente