Linux/UNIX Webserver absichern: Cron für User abschalten
Linux Sicherheitstipps und "Hardening-Guides" findet man ja wie Sand am Meer. Diese sind auch sehr sinnvoll und jeder Serveradministrator sollte sein System so gut wie möglich absichern. Jedoch fehlt mir bei den meisten Blogbeiträgen ein wichtiger Sicherheitstipp: Crons einschränken/abschalten.
Warum sollte ich den Cron für einzelne User abschalten?
Angreifer versuchen mit allen Mitteln auf dein System zu kommen, das ist ja nichts Neues. Ist er erfolgreich, könnte er unbemerkt einen Cronjob erstellen, der beispielsweise jede Nacht eine infizierte Datei erstellt oder eine Backdoor öffnet. Diese kannst du dann so oft schliessen wie du willst, solange der Cronjob aktiv ist, wird die Backdoor sich wieder öffnen.
Standardmäßig kann jeder Benutzer einen Cronjob erstellen oder verwalten – dafür muss man nicht der root User sein. Und genau hier liegt das Problem. Schafft es ein Angreifer, nur einen User zu kompromittieren, könnte er sich solch einen bösartigen Cronjob erstellen.
Genau das sollte man verhindern.
Aktive Crons aller User überprüfen
Zu allererst solltest du prüfen, welche Cronjobs von welchem User angelegt sind und eventuell auch ausgeführt werden. Nutze dafür folgenden Befehl:
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done
Kontrolliere nun genau, welche Cronjobs angelegt sind und ob alles seine Richtigkeit hat. Sollte schon ein bösartiger Cronjob aktiv sein, lösche ihn.
Cron für Benutzer abschalten
Damit in Zukunft auch kein Benutzer mehr einen Cronjob erstellen kann, schalten wir einfach die gesamte Cron-Funktionalität für die Benutzer ab. Dafür gibt es zwei Wege:
- man schaltet den Cron standardmässig für alle Benutzer ab und legt dann die Ausnahmen fest, die den Cron nutzen dürfen.
- man gibt den Cron für alle frei und legt die Ausnahmen fest, die ihn nicht benutzen dürfen.
Ich habe mich für erste Variante entschieden, da wir sehr viele Benutzer auf unserem Server haben und ich möchte, dass nur der root und gewisse Daemon-User den Zugriff auf den Cron gewährt bekommen.
Alle verbieten und einzelne zulassen
Um allen Benutzern den Zugriff zu verbieten, benötigen wir nur eine Datei: cron.allow innerhalb des /etc Ordners. Sobald diese Datei existiert, bekommen nur die Benutzer, die innerhalb der Datei stehen, Zugriff auf den Cron. Erstelle dir die Datei wie folgt:
sudo nano /etc/cron.allow
Füge dann dort alle Benutzer ein, die den Cron nutzen dürfen. (Achtung: ein Benutzer pro Zeile)
Bei mir gibt es beispielsweise eine Zeile innerhalb der Datei: root
Mit CTRL+O speicherst du und mit CTRL+X schliesst du den nano-Editor.
Fertig. Kontrollieren wir unsere Arbeit:
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done
Sieht die Ausgabe pro User wie folgt (oder so ähnlich) aus, hast du alles richtig gemacht:
The user [USERNAME] cannot use this program (crontab)
Alle zulassen und einzelne verbieten
Die Art und Weise bleibt die Gleiche wie gerade oben beschrieben, wir nutzen nur eine andere Datei: cron.deny innerhalb des /etc Ordners.
sudo nano /etc/cron.deny
Trage pro Zeile die Benutzer ein, die den Cron nicht nutzen dürfen, speichern, schliessen und voilà – fertig.
Kontrollieren wir wieder unsere Arbeit:
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done
Sieht die Ausgabe pro ausgeschlossenem User wie folgt (oder so ähnlich) aus, hast du alles richtig gemacht:
The user [USERNAME] cannot use this program (crontab)
Was gibt's zu beachten?
Kaum etwas. Es gibt allerdings verschiedene Daemons, die eigene User erstellen, die ebenfalls den Cron nutzen müssen, um zum Beispiel Wartungsarbeiten durchführen zu können. Achte darauf, dass diese User den Cron-Zugriff erhalten.
Der Rest ist, wie du sehen kannst, sehr simpel. Datei erstellen, User rein, speichern, fertig. Kein Neustarten des Crons oder ähnliches ist vonnöten.