Question Comment exécuter un travail cron en utilisant la commande sudo


Est-il possible de lancer un cron travail qui a besoin de la sudo commander?

Comme:

 sudo rm somefile

98
2017-08-09 17:51


origine


Bienvenue Sayem Siam, Regardez les réponses à cette question askubuntu.com/questions/2368/how-do-i-setup-cron-job. comme je pense que votre question a été posée avant ici sur AU - stephenmyall
J'essaie d'exécuter sudo qui a besoin d'un mot de passe, mais comment puis-je giv mot de passe du fichier cron - sayem siam
@sayemsiam vous n'avez pas besoin de mettre sudo, éditez simplement la crontab racine. - Braiam
Voir cette réponse. - sampablokuper


Réponses:


Je ne vais pas dire à quel point c'est une mauvaise idée; simplement mis en marche sudoDans crontab, votre mot de passe doit être stocké quelque part en texte brut.

C'est une mauvaise idée.


Voici la méthode préférée pour exécuter des tâches administratives via cron. Puisque vous n'avez pas vraiment besoin d'écrire sudo dans la crontab, si vous modifiez la crontab de root.

Utiliser la crontab de la racine

Exécutez la commande suivante:

sudo crontab -e

Cela ouvre rootcrontab. sudo n'est pas nécessaire d'exécuter votre commande dans ce contexte, car il sera appelé comme root en tous cas.

Par conséquent, vous ajouteriez simplement les éléments suivants à la crontab de root.

@hourly rm somefile

Maintenant si vous absolument voulez être dangereux et prendre des risques avec votre mot de passe, les éléments suivants exécuteront votre commande à partir de votre propre crontab, et entrez votre mot de passe automatiquement lorsque vous y êtes invité par sudo.

Encore, 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 ça.


195
2017-08-09 18:03



Je l'ai eu, merci beaucoup - sayem siam
Content que ça marche! Méfiez-vous des trous de sécurité que vous laissez derrière vous. Ils pourraient revenir plus tard pour vous hanter. - SirCharlo
@SirCharlo Pourquoi utiliser rootl'utilisateur crontab au lieu de la crontab à l'échelle du système /etc/crontab? - Eliah Kagan
@Elijah pourquoi pas? - SirCharlo
Cette réponse passe à côté de la note car elle dépasse les subtilités disponibles dans votre sudoers fichier, comme les groupes sudo sans condition de mot de passe. - brent


Si vous mettez le script d’un des répertoires cron (/etc/cron.*) alors vous n'avez pas besoin d'utiliser sudo car cela fonctionne en tant que root.

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

sudo crontab -e

26
2017-08-09 18:02



Je placerais également la commande dans /etc/cron.hourly/something. C'est à quoi servent ces répertoires. - John S Gruber
Vous pouvez le mettre dans /etc/cron.SOMETHING/SCRIPT, mais je ne ferais pas les deux. Les deux donneraient à peu près la même fonction, bien que l'utilisation de crontab vous donnerait un peu plus de puissance sur la fréquence / le fonctionnement des choses. - tgm4883
J'aurais dû préciser que je voulais dire cela comme une alternative. Merci. - John S Gruber


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.


0
2017-08-09 18:07



Hmm .. Alors toute commande malveillante, comme sudo rm -rf 'slash' (ne lance pas cette commande), exécuté par cet utilisateur, ne nécessiterait aucun mot de passe. Je ne sais pas, il se sent dangereux, non? - SirCharlo
Ya je le sais Votre approche est bonne. Mais j'utilise l'approche ci-dessus pour donner des droits à un autre utilisateur pour arrêter / démarrer certains services. - Vidyadhar
C'est un extrêmement mauvaise idée. S'il vous plaît ne faites pas cela. - bkanuka
Peut être vidyadhar ALL= NOPASSWD: /bin/rm somefile serait plus sécurisé. - Wernfried Domscheit
C'est une idée terrible. Vous avez donné autorisations sudo de couverture à rm. Au lieu de cela, donnez des autorisations sudo à un script de votre commande, y compris rm ou autres dans ce script, rendez-le exécutable, puis attribuez des autorisations sudo à ce script. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, ce qui serait beaucoup plus sûr. - R J