Können Symlinks in /etc/cron.d/ verwendet werden?

25

Ich versuche, einen Konfigurationsmechanismus zu implementieren, der es in einem bestimmten Projekt ermöglicht, über svn eine Cron-Konfiguration bereitzustellen.

Ich dachte sofort, dass ich Symlinks von /etc/cron.d/ auf die Cron-Datei meines Projekts erstellen sollte (die wiederum von einem VCS gesteuert wird), aber das scheint nicht zu funktionieren.

Ich fand einige alte Forumsnachrichten, die darauf hinwiesen, dass Symlinks nicht unterstützt wurden, und andere, die dies sagten. Welches ist es?

Gibt es noch etwas oder einen anderen guten Weg, um dies zu erreichen?

Luís Faceira
quelle

Antworten:

27

Gemäß man crond

HÖHLEN

Alle crontab-Dateien müssen reguläre Dateien oder Symlinks zu regulären Dateien sein. Sie dürfen nur für den Eigentümer ausführbar oder beschreibbar sein. Diese Anforderung kann mit der Option -p in der crond-Befehlszeile überschrieben werden. Wenn inotify support verwendet wird, werden Änderungen in den symbolisch verknüpften crontabs vom cron-Daemon nicht automatisch bemerkt. Der Cron-Daemon muss ein SIGHUP-Signal empfangen, um die Crontabs neu zu laden. Dies ist eine Einschränkung der inotify-API.

Die Syslog-Ausgabe wird anstelle von Mail verwendet, wenn sendmail nicht installiert ist.

Es ärgerte mich auch am Leben. Kurz gesagt, Sie können Symlinks verwenden, aber wenn nicht regular files or symlinks to a regular file, muss ein -pSchalter verwendet werden.

Wer bin ich
quelle
1
Sie werden auch feststellen, dass die Datei dem Benutzer gehören muss, für den cron Jobs ausführt. Wenn beispielsweise ein Symlink /etc/cron.d/bobsjobauf eine Datei verweist, die dem Benutzer "bob" cron gehört, schlägt die Syslog-Meldung fehl WRONG FILE OWNER (/etc/cron.d/bobsjob).
Craig Ringer
@CraigRinger Ich habe einen Benutzer mit dem Namen "www-data", der die Cron-Datei besitzt. Derzeit wird der Fehler FALSCHER DATEIBESITZER im Syslog angezeigt. Wie kann ich Cron mit dem Benutzer "www-data" ausführen lassen? Ich möchte nicht, dass root die Datei besitzt.
CMCDragonkai
@CMCDragonkai sudo -u www-data crontab -eund fügen Sie es der Crontab des WWW-Datenbenutzers hinzu. Es wird dann als Benutzer ausgeführt www-data. Denken Sie daran, die explizite Benutzerspalte zu entfernen, da sie in Benutzer-Crontabs nicht vorhanden ist.
Craig Ringer
Wird das die Datei hineinlegen etc/cron.? Ich hatte den Eindruck, crontab tool würde die Aufgabe woanders platzieren.
CMCDragonkai
@CMCDragonkai Sie haben Recht, Anrufe crontab -esind in diesem Fall nicht das, was Sie wollen. Ich suche, habe aber keine Möglichkeit gefunden, einen Benutzer crontab als Nicht-Root-Benutzer auszuführen.
ACK_stoverflow
14

Dies hat Auswirkungen auf die Sicherheit. Die Skripte in /etc/cron.d/ werden von root mit root-Rechten ausgeführt. Es ist eine schlechte Idee, dort Skripte zu verknüpfen, die sich im Besitz von und beschreibbar für Nicht-Root-Benutzer befinden, da Ihr System auf diese Weise kompromittiert werden könnte

Florian Heinle
quelle
4

Ich würde die Cron-Manpage für Ihre Ubuntu-Version überprüfen (ich gehe davon aus, dass wir in diesem Forum über Ubuntu sprechen!):

Dateien in diesem Verzeichnis müssen Eigentum von root sein, müssen nicht ausführbar sein (es handelt sich um Konfigurationsdateien, genau wie / etc / crontab) und müssen der gleichen Namenskonvention entsprechen, wie sie von run-parts (8) verwendet wird: sie müssen bestehen ausschließlich aus Groß- und Kleinbuchstaben, Ziffern, Unterstrichen und Bindestrichen. Dies bedeutet, dass sie keine Punkte enthalten können.

Wie Florian betont, handelt es sich bei dieser Datei, die von Nicht-Root-Benutzern geschrieben werden kann, um eine Sicherheitslücke, da die Jobs von Root ausgeführt werden (für jeden, der in der Datei als Jobbesitzer angegeben ist). Beachten Sie daher auch, dass

Dieses Verzeichnis kann jede Datei enthalten, die Aufgaben definiert, die dem in / etc / crontab verwendeten Format entsprechen. Im Gegensatz zum Benutzer-Cron-Spool müssen diese Dateien also den Benutzernamen enthalten, mit dem die Aufgabe wie in der Aufgabendefinition ausgeführt wird.

Geben Sie den Benutzernamen vor dem auszuführenden Befehl ein.

Gischt
quelle
1
Dies bedeutet, dass sie keine Punkte enthalten können. achte darauf. Ich hatte einen Punkt im Linknamen. Es war der Schuldige für meine nicht laufenden Jobs für mich. Plus: Die Datei selbst muss mit einem CRLF enden
Dr. Gianluigi Zane Zanettini