Wie sicher ist es, Skripte in /etc/init.d zu speichern, die sich nicht im Besitz von Root befinden?

15

Ich habe eine Anwendung, die als Daemon ausgeführt wird und von einem Skript in /etc/init.d gesteuert wird.
Manchmal müssen wir einige Parameter für den Start / die Steuerung dieser Skripte ändern und dann den Daemon neu starten. Diese Skripte haben nur Schreibrechte für den Root-Benutzer. Wenn ich diese Skripte bearbeite, benötige ich Root-Rechte.

Was ich dachte, ist, dass ich einen Nicht-Root-Benutzer zum Eigentümer dieser Skripte machen sollte. Auf diese Weise können nur root und ein spezieller Benutzer diese Skripte bearbeiten.

Ist es akzeptabel, Dateien in den Verzeichnissen /etc/init.d zu speichern, die sich nicht im Besitz von Root befinden?
Oder ist es absurd, die natürliche Ordnung des Systems zu stören?

Akaks
quelle
1
schlechte Idee, nicht.
ChuckCottrill

Antworten:

17

Was einem sofort in den Sinn kommt, ist, dass ein unterprivilegierter Benutzer in der Lage ist, Dinge beim Booten als root auszuführen , was für Cracker wünschenswert ist, die:

  • Möchten Sie die Berechtigungen anderer Konten erweitern?
  • Möchten Sie Ihren Server als Host für einen Rogue-Service verwenden?
  • Möchten Sie IRC / Spam-Bots starten, wenn der Server neu gestartet wird
  • Sie möchten ein Mutterschiff anpingen, um "I'm up again" zu sagen und möglicherweise eine neue Nutzlast herunterzuladen
  • Willst du ihre Spuren bereinigen
  • ... andere Schlechtigkeit.

Dies ist möglich, wenn Ihr unterprivilegierter Benutzer auf irgendeine Weise gefährdet ist, möglicherweise durch einen anderen Dienst (http / etc). Die meisten Angreifer führen schnell ein lsoder ein oder findmehrere /etcAktionen aus, um festzustellen, ob solche Möglichkeiten bestehen. Es gibt Shells, die in verschiedenen Sprachen geschrieben sind, die sie verwenden, was dies einfach macht.

Wenn Sie den Server remote verwalten, meistens über SSH, ist die Wahrscheinlichkeit sehr hoch, dass Sie dies erst sehen, wenn Sie das Init-Skript überprüfen, da Sie die Ausgabe beim Booten nicht sehen (Sie sollten jedoch etwas verwenden, das dies betrifft) prüft die Hashes dieser Skripte gegen bekannte Hashes, um festzustellen, ob sich etwas geändert hat, oder ob Versionskontrollsoftware usw. vorhanden ist

Das soll auf keinen Fall passieren, root muss dieses Init-Skript besitzen. Sie könnten die Entwicklung Benutzer in der Liste der sudoers hinzufügen , so dass es bequem genug ist , um das Skript zu aktualisieren, aber ich würde nicht benachteiligten Schreibzugriff auf erlauben rät alles in init.d

Tim Post
quelle
5
tl; dr : Wenn Sie dies tun, ist der Benutzer ohne Rootberechtigung beim nächsten Start so gut wie root. Du bittest darum, pwned zu werden.
Warren Young
9

Zusätzlich zu den sehr guten Argumenten von Tim Post möchte ich hinzufügen, dass für ein Setup, bei dem mehrere Personen Änderungen auf einen Server übertragen müssen, die Verwendung eines Konfigurationsverwaltungssystems in Betracht gezogen werden sollte.

Wenn Sie z. B. Puppet, Chef oder Cfengine verwenden, können Sie die entsprechenden Benutzer die Dateien lokal bearbeiten lassen und die Änderungen dann mit der Konfigurationsverwaltung veröffentlichen. Das genaue Einrichten hängt natürlich vom verwendeten System ab. Bei ordnungsgemäßem Einrichten wird jedoch eine Versionsverwaltungssoftware mitgeliefert, mit der Sie problemlos zu einer früheren Version einer Konfigurationsdatei zurückkehren können, wenn (Hinweis: wann , nicht wenn) !) Jemand hat einen Fehler gemacht. Dies erleichtert Ihnen auch das Kopieren der Konfiguration auf ein separates Testsystem usw.

Jenny D
quelle
Es ist eine hervorragende Idee, sowohl Ihre Skripte als auch Ihre Konfigurationsdateien in einem Konfigurations- / Versionsverwaltungssystem versioniert zu halten, auch ohne zu überlegen, ob ein System kompromittiert werden könnte.
ChuckCottrill
In der Tat - ich habe es verwendet, um Fehler um ein paar Größenordnungen häufiger zu beheben, als ich es zum Beheben eines kompromittierten Systems verwendet habe.
Jenny D
Vielen Dank . Da hier hauptsächlich ein dedizierter Benutzer diese Anwendung verwendet, funktioniert sudo sehr gut und genau das, was ich seit langer Zeit getan habe. ABER ich bin WIRKLICH sehr am Versionsverwaltungssystem für die Configs interessiert. Sehr geehrte Jenny, können Sie mir eine Begründung oder ein Beispiel dafür geben? :).
Akaks
1
Wenn Sie nicht mit der vollständigen Route Marionette / Koch / Cfengine usw. fahren möchten, würde ich persönlich www.perforce.com verwenden. Wir haben das für ~ 100 Server in der Zeit vor dem Puppet verwendet und ihre Evaluierungslizenz reicht für einen Server. Der Hauptvorteil besteht darin, dass Sie VC-Dateien an eine beliebige Stelle im Dateisystem auschecken können, anstatt auf einen Unterpfad beschränkt zu sein. Andere Optionen sind joeyh.name/code/etckeeper oder die Verwendung von VC in Kombination mit Skripten, um Dateien in das richtige Verzeichnis zu verschieben.
Jenny D