Ai-je bien compris qu'il n'est pas possible d'exécuter /etc/cron.daily/my
à partir d'un utilisateur arbitraire; il sera exécuté uniquement à partir de root
conformément à /etc/crontab
?
Puis-je laisser le privilège root à un utilisateur spécifique dans mon script cron à la place?
Il est préférable de placer cron job dans /etc/cron.d
? Comme:
$ cat /etc/cron.d/my
5 0 * * * user test -x /usr/bin/my && /usr/bin/my -cfg /etc/my.cfg
Vous avez raison, les tâches dans /etc/cron.daily
(et toutes les semaines/tous les mois, etc.) sont toujours exécutées en tant qu'utilisateur root
, mais vous pouvez simplement extraire l'utilisateur du script et l'appeler à nouveau. autre utilisateur, y compris tous les arguments fournis (bien qu’il n’y en ait pas dans un travail cron.daily
):
Fichier /etc/cron.daily/my
:
#!/bin/sh
# If started as root, then re-start as user "gavenkoa":
if [ "$(id -u)" -eq 0 ]; then
exec Sudo -H -u gavenkoa $0 "$@"
echo "This is never reached.";
fi
echo "This runs as user $(id -un)";
# prints "gavenkoa"
exit 0;
Lorsque le script est lancé en tant qu'utilisateur root
, il le détecte et s'exécute à nouveau lui-même via Sudo -H -u gavenkoa
, c'est-à-dire: en tant qu'utilisateur gavenkoa
. Cela ne nécessite aucune entrée spéciale dans /etc/sudoers
parce que root
est toujours autorisé à basculer vers n'importe quel utilisateur.
La exec
remplace le processus en cours avec le nouvel appel Sudo …
et ne retourne jamais. C'est pourquoi vous n'avez pas besoin d'une clause else
.