Je veux allumer mon système automatiquement tous les jours. J'utilise donc le code ci-dessous dans mon script Python, mais sudo
me demande un mot de passe à chaque fois:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
Comment puis-je exécuter ce script sans sudo
demander le mot de passe à chaque fois?
Réponses:
La façon correcte de le faire pour configurer de
sudo
telle sorte que seule la commande spécifique dont vous avez besoin, à savoirecho date... > rtc...
, est autorisée à s'exécuter SANS avoir besoin du mot de passe.Étape 1. Créez un script shell avec cette commande uniquement
gedit
(ou votre éditeur préféré) et créez le script, par exemplepydatertc.sh
Étape 2. Configurez sudo pour permettre l’
pydatertc.sh
exécution sans mot de passesudo visudo
sur le terminal pour ouvrir lesudoers
fichier sudo permissions ( )%sudo ALL=(ALL:ALL) ALL
username
est votre nom d'utilisateur:Étape 3. Modifiez votre script python pour appeler
pydatertc.sh
Maintenant, votre script devrait fonctionner sans mot de passe ET sans compromettre la sécurité de votre compte, de vos données ou de votre système!
Alternative uniquement pour
wakealarm
(pas pour usage général!):Dans ce cas spécifique uniquement , étant donné que le
/sys/class/rtc/rtc0/wakealarm
fichier ne contrôle que l'alarme de réveil du système et qu'il est par ailleurs inoffensif, une autre alternative pour éviter le mot de passe consiste à s'approprier ce fichierchown
(si vous êtes le seul utilisateur à définir l'alarme). , ou le rendre accessible en écriture au monde avecchmod +666
; dans ce cas, supprimez simplement l’sudo
appel de votre appel Python, en le laissantsh -c "...."
intact.la source
sudo
- sans mot de passe. Il est donc beaucoup plus prudent de placer le script dans un répertoire que seule la racine peut modifier, par exemple: / usr / sbin ou / root . Sinon, c'est LGTM.Si le script est uniquement destiné à un usage personnel et que vous l'avez placé dans un endroit sûr et que vous ne craignez pas le vol de votre compte, par exemple, voici une solution simple:
où LOGINPASSWD est votre mot de passe de connexion (exemple: iloveponies) et COMMAND HERE est votre commande qui vient après sudo, comme sh -c "echo da .. etc
la source
Si cela ne vous dérange pas que le script s'exécute à une heure précise (ou au cours de la journée), insérez-le dans le répertoire de base de la racine (
/root
) et exécutez le script à partir de la commande système crontab (/etc/crontab
) en tant que racine. Dans ce cas, vous n'aurez pas à compromettre votre sécurité.Voir https://help.ubuntu.com/community/CronHowto pour savoir comment ajouter le script à la crontab.
la source
anacron
s'il s'agit d'un ordinateur de bureau / ordinateur portable qui ne fonctionne pas 24x7Une autre fonctionnalité intéressante de sudo qui n'a pas été mentionnée dans les excellentes réponses ci-dessus est la variable 'timestamp_timeout'. C'est une variable sudo que vous pouvez augmenter pour économiser sur la saisie de mots de passe interactive.
Par exemple, dans / etc / sudoers (ou l’un des fichiers qu’il contient), vous pouvez modifier la valeur par défaut:
Description complète de 'homme sudoers':
Bien sûr, cela ne peut pas aider dans le cas spécifique de l'exécution de la commande à partir de cron. Mais c'est une bonne chose à prendre en compte.
la source
Pour vérifier si cela fonctionne, tapez:
Pour exécuter "sudo apt-get update" et accepter le mot de passe des variables d'environnement que nous avions créé auparavant:
Exécuter à partir de python (par exemple, changer la propriété du répertoire de manière récursive en username_here):
Le mot de passe de echo $ MY_SUDO_PASS get -S le détecte et le passe à sudo
la source