Je ne vais pas entrer dans combien c'est une mauvaise idée; Pour le dire simplement, si vous utilisez sudocrontab, votre mot de passe doit être stocké quelque part en texte clair.
C'est une mauvaise idée.
Voici la méthode recommandée pour exécuter des tâches administratives via cron. Puisque vous n'avez pas vraiment besoin d'écrire sudodans la crontab, modifiez la crontab de root.
Utilisez la crontab de root
Exécutez la commande suivante:
sudo crontab -e
Cela ouvre rootla crontab. sudon’est pas nécessaire d’exécuter votre commande dans ce contexte, car elle sera invoquée de roottoute façon.
Par conséquent, vous ajouterez simplement ce qui suit au fichier crontab de root.
@hourly rm somefile
Maintenant, si vous voulez absolument être dangereux et prendre des risques avec votre mot de passe, ce qui suit va exécuter votre commande à partir de votre propre crontab, et entrez votre mot de passe automatiquement lorsque vous y êtes invité 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 jamais quelqu'un accédait à votre crontab, votre mot de passe serait lisible en texte brut.
Content que ça marche! Méfiez-vous des failles de sécurité que vous laissez derrière vous. Ils pourraient revenir plus tard pour vous hanter.
SirCharlo
1
@SirCharlo Pourquoi utiliser rootla crontab utilisateur plutôt que la crontab globale /etc/crontab?
Eliah Kagan
1
@ Elijah pourquoi pas?
SirCharlo
2
Cette réponse manque la cible, car elle dissimule les subtilités disponibles dans votre sudoersfichier, comme les groupes sudo sans mot de passe.
Brent
point très très utile, merci pour une aide précieuse.
Nasser Mansouri
33
Si vous mettez le script à partir de 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 voudrez utiliser crontab de root. Cela l'exécutera en tant que root et n'aura pas besoin de sudo.
Je placerais également la commande dans /etc/cron.hourly/something. C'est à quoi servent ces répertoires.
John S Gruber
3
Non, 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 qu'en utilisant crontab, vous ayez un peu plus de pouvoir sur la fréquence / le moment où les choses tournent.
tgm4883
1
J'aurais dû préciser que je voulais dire cela comme une alternative. Merci.
John S Gruber
3
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 vous demandera pas de mot de passe si vous exécutez la commande rm via vidyadhar.
Hmm .. Ensuite, toute commande malveillante, comme sudo rm -rf 'slash'( ne pas exécuter cette commande ), exécutée à partir de cet utilisateur, ne nécessiterait aucun mot de passe .. Je ne sais pas, cela ne semble pas être sûr, non?
SirCharlo
Ya je le sais. Votre approche est bonne. Mais j'utilise l'approche ci-dessus pour donner le droit à un autre utilisateur d'arrêter / démarrer certains services.
Vidyadhar
24
C'est une très mauvaise idée. S'il vous plaît ne faites pas ça.
bkanuka
2
Peut vidyadhar ALL= NOPASSWD: /bin/rm somefile-être serait plus sécurisé.
Wernfried Domscheit
C'est une idée terrible. Vous avez donné des autorisations sudo générales à rm. Au lieu de cela, accordez des autorisations sudo à un script de votre commande, y compris rm ou à d'autres personnes de ce script, pour le rendre exécutable, puis accordez des autorisations sudo à ce script. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, ce qui serait beaucoup plus sûr.
Réponses:
Je ne vais pas entrer dans combien c'est une mauvaise idée; Pour le dire simplement, si vous utilisez
sudo
crontab, votre mot de passe doit être stocké quelque part en texte clair.C'est une mauvaise idée.
Voici la méthode recommandée pour exécuter des tâches administratives via cron. Puisque vous n'avez pas vraiment besoin d'écrire
sudo
dans la crontab, modifiez la crontab de root.Utilisez la crontab de root
Exécutez la commande suivante:
Cela ouvre
root
la crontab.sudo
n’est pas nécessaire d’exécuter votre commande dans ce contexte, car elle sera invoquée deroot
toute façon.Par conséquent, vous ajouterez simplement ce qui suit au fichier crontab de root.
Maintenant, si vous voulez absolument être dangereux et prendre des risques avec votre mot de passe, ce qui suit va exécuter votre commande à partir de votre propre crontab, et entrez votre mot de passe automatiquement lorsque vous y êtes invité
sudo
.Encore une fois, ce n'est pas recommandé .
Dans votre propre crontab, écrivez votre commande comme suit:
L'inconvénient évident est que, si jamais quelqu'un accédait à votre crontab, votre mot de passe serait lisible en texte brut.
Tu ne devrais pas faire ça.
la source
root
la crontab utilisateur plutôt que la crontab globale/etc/crontab
?sudoers
fichier, comme les groupes sudo sans mot de passe.Si vous mettez le script à partir de 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 voudrez utiliser crontab de root. Cela l'exécutera en tant que root et n'aura pas besoin de sudo.
la source
Exécuter la commande suivante dans le terminal
Ajout de la ligne suivante à la fin du fichier:
Dans l'exemple ci-dessus, vidyadhar est le nom d'utilisateur et il ne vous demandera pas de mot de passe si vous exécutez la commande rm via vidyadhar.
la source
sudo rm -rf 'slash'
( ne pas exécuter cette commande ), exécutée à partir de cet utilisateur, ne nécessiterait aucun mot de passe .. Je ne sais pas, cela ne semble pas être sûr, non?vidyadhar ALL= NOPASSWD: /bin/rm somefile
-être serait plus sécurisé.<username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>
, ce qui serait beaucoup plus sûr.