Comment exécuter une tâche cron à l'aide de la commande sudo

97

Est-il possible d’exécuter un travail cron nécessitant le commande sudo ?

Comme:

 sudo rm somefile
    
posée sayem siam 09.08.2012 - 19:51
la source

3 réponses

193

Je ne vais pas dire à quel point c'est une mauvaise idée; En termes simples, exécuter sudo dans crontab nécessite que votre mot de passe soit stocké quelque part en texte brut.

C'est une mauvaise idée.

Voici la méthode recommandée pour exécuter des tâches administratives via cron. Comme vous n'avez pas besoin d'écrire sudo dans la crontab, si vous modifiez la crontab de la racine.

Utiliser la crontab de la racine

Exécutez la commande suivante:

sudo crontab -e

Cela ouvre le crontab de root . sudo n'est pas nécessaire pour exécuter votre commande dans ce contexte, car il sera de toute façon appelé en tant que root .

Par conséquent, vous devez simplement ajouter les éléments suivants à la crontab de la racine.

@hourly rm somefile

Maintenant, si vous absolument voulez être dangereux et prenez des risques avec votre mot de passe, les éléments suivants exécuteront votre commande depuis votre propre crontab et entreront automatiquement votre mot de passe à l'invite de sudo .

Encore une fois, ce n'est pas recommandé .

Dans votre propre crontab, écrivez votre commande comme suit:

@hourly echo "password" | sudo -S rm somefile

L’inconvénient évident est que, si quelqu'un accède à votre crontab, votre mot de passe sera lisible en texte brut.

Vous ne devriez pas faire cela.

    
réponse donnée SirCharlo 09.08.2012 - 20:03
la source
25

Si vous placez le script depuis l'un des répertoires cron ( /etc/cron.* ), vous n'avez pas besoin d'utiliser sudo car il s'exécute en tant que root.

Si vous utilisez crontab, vous souhaiterez utiliser le crontab de root. Cela l'exécutera en tant que root et n'aura pas besoin de sudo.

sudo crontab -e
    
réponse donnée tgm4883 09.08.2012 - 20:02
la source
0

Exécuter la commande suivante dans le terminal

sudo visudo

Ajout de la ligne suivante à la fin du fichier:

vidyadhar  ALL= NOPASSWD: /bin/rm

Dans l'exemple ci-dessus, vidyadhar est le nom d'utilisateur et il ne demandera pas de mot de passe si vous exécutez la commande rm via vidyadhar.

    
réponse donnée Vidyadhar 09.08.2012 - 20:07
la source

Lire d'autres questions sur les étiquettes