web-dev-qa-db-fra.com

Exécutez /etc/cron.daily depuis un utilisateur spécifique

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
3
gavenkoa

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 execremplace 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.

4
PerlDuck