Les liens symboliques peuvent-ils être utilisés dans /etc/cron.d/?


25

J'essaie d'implémenter un mécanisme de configuration qui permet dans un certain projet de déployer via svn une configuration cron.

J'ai immédiatement pensé que ce que je devais faire était de créer des liens symboliques de /etc/cron.d/ vers le fichier cron de mon projet (qui à son tour est contrôlé par un vcs), mais cela ne semble pas fonctionner.

J'ai trouvé d'anciens messages de forum faisant référence au fait que les liens symboliques n'étaient pas pris en charge et d'autres disant qu'ils le sont. Lequel est-ce?

Y a-t-il autre chose ou tout autre bon moyen d'y parvenir?

Réponses:


27

Selon man crond

CAVEATS

Tous les fichiers crontab doivent être des fichiers normaux ou des liens symboliques vers des fichiers normaux, ils ne doivent pas être exécutables ou inscriptibles pour quelqu'un d'autre que le propriétaire. Cette exigence peut être remplacée en utilisant l'option -p sur la ligne de commande crond. Si le support ino‐ tify est utilisé, les changements dans les crontabs liés symboliquement ne sont pas automatiquement remarqués par le démon cron. Le démon cron doit recevoir un signal SIGHUP pour recharger les crontabs. Il s'agit d'une limitation de l'API inotify.

La sortie syslog sera utilisée à la place de mail, lorsque sendmail n'est pas installé.

Cela m'a aussi énervé la merde vivante, bref, vous pouvez utiliser des liens symboliques cependant, sinon regular files or symlinks to a regular fileil doit utiliser un -pcommutateur.


1
Vous constaterez également que le fichier doit appartenir à l'utilisateur pour lequel cron exécute des travaux; par exemple, si un lien symbolique /etc/cron.d/bobsjobpointe vers un fichier appartenant à l'utilisateur "bob" cron échouera avec un message syslog WRONG FILE OWNER (/etc/cron.d/bobsjob).
Craig Ringer

@CraigRinger J'ai un utilisateur nommé "www-data" propriétaire du fichier cron, je reçois actuellement l'erreur WRONG FILE OWNER dans le syslog. Comment puis-je faire exécuter Cron en utilisant l'utilisateur "www-data". Je ne veux pas que root détienne le fichier.
CMCDragonkai

@CMCDragonkai sudo -u www-data crontab -eet ajoutez-le à la crontab de l'utilisateur www-data. Il s'exécutera ensuite en tant qu'utilisateur www-data. N'oubliez pas de supprimer la colonne utilisateur explicite, car elle n'existe pas dans les crontabs utilisateur.
Craig Ringer

Cela placera-t-il le fichier à l'intérieur etc/cron.? J'avais l'impression que l'outil crontab placerait la tâche ailleurs.
CMCDragonkai

@CMCDragonkai Vous avez raison, appeler crontab -en'est pas ce que vous voulez dans ce cas. Je cherche, mais je n'ai pas trouvé de moyen d'exécuter un utilisateur crontab en tant qu'utilisateur non root.
ACK_stoverflow du

14

Cela a des implications sur la sécurité. Les scripts dans /etc/cron.d/ sont exécutés par root avec les privilèges root. C'est une mauvaise idée de créer un lien symbolique entre les scripts qui sont détenus et accessibles en écriture pour les utilisateurs non root, car votre système pourrait être compromis de cette façon


4

Je vérifierais la page de manuel cron pour votre version d'Ubuntu (je suppose que nous parlons d'Ubuntu sur ce forum!):

Les fichiers de ce répertoire doivent appartenir à root, n'ont pas besoin d'être exécutables (ce sont des fichiers de configuration, tout comme / etc / crontab) et doivent être conformes à la même convention de dénomination que celle utilisée par run-parts (8): ils doivent se composent uniquement de lettres majuscules et minuscules, de chiffres, de traits de soulignement et de tirets. Cela signifie qu'ils ne peuvent contenir aucun point.

Comme le souligne Florian, si ce fichier est accessible en écriture par des utilisateurs non root, c'est une faille de sécurité car les jobs seront exécutés par root (pour celui qui est nommé propriétaire du job dans le fichier). Notez également, par conséquent, que

Ce répertoire peut contenir tout fichier définissant des tâches suivant le format utilisé dans / etc / crontab, c'est-à-dire que contrairement au spon cron utilisateur, ces fichiers doivent fournir le nom d'utilisateur pour exécuter la tâche comme dans la définition de la tâche.

c.-à-d. entrez le nom d'utilisateur avant la commande à exécuter.


1
Cela signifie qu'ils ne peuvent contenir aucun point. faites attention à cela. J'avais un point dans le nom du lien. C'était le coupable de mes emplois non exécutés pour moi. Plus: le fichier lui-même DOIT se terminer par un CRLF
Dr. Gianluigi Zane Zanettini
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.