Sichern von Kennwörtern in einem Multi-Dev-nginx-Setup

9

Wir haben ein Ubuntu12.04 + PHP + nginx Setup auf unseren Servern. Unsere Entwickler haben Zugriff auf die Ordner / usr / lib / php5 / und / var / www /. Wir arbeiten an vielen Projekten und haben zur Zeit 50-100 verschiedene Apps / Module mit jeweils db active.

Wir möchten einen Mechanismus zur Sicherung unserer DB-Passwörter mit den folgenden Überlegungen entwickeln:

  • Die Systemadministratoren erstellen das Kennwort und registrieren es irgendwo (eine Datei oder eine SQL-Datenbank oder Ähnliches)
  • Die Apps stellen einen Schlüssel bereit, der angibt, welche Datenbank und welche Berechtigungsstufe sie haben sollen, und dieses Modul gibt ein Objekt zurück, das alles enthält, was für die Verbindung benötigt wird. So etwas wie "user_manager.client1.ro", "user_manager.client1.rw".
  • Der Mechanismus sollte das spezifische Passwort für die App bereitstellen und daher über "www-data" zugänglich sein, aber alle anderen Passwörter können nur angezeigt werden, wenn ihre Schlüssel bekannt sind.

Wir haben es geschafft, einen Prototypen dafür zu bekommen, aber das zentrale Passwort-bereitstellende Modul läuft im www-Datenraum und daher kann die Datei / sqlite immer von jeder anderen Datei in / var / www / oder / usr erreicht werden / lib / php5 und daher können alle Passwörter kompromittiert werden.

Gibt es eine Möglichkeit, Dinge so einzurichten, dass das Passwort bereitstellende Modul mit root-Rechten ausgeführt wird und die App die Passwörter von diesem anfordert? Ich weiß, dass wir dafür einen ganz neuen Service aufbauen können, aber es scheint zu viel zu bauen und zu warten (vor allem, weil dieser Service unser einziger Fehlerpunkt wird.)

Irgendwelche Vorschläge?

    
Shreeni 05.06.2013, 02:27
quelle

3 Antworten

1

Wenn Sie Berechtigungen verwenden, können Sie Folgendes tun:

1) geben Sie einem Entwickler einen Benutzer

2) chown jeden Ordner unter / var / www / Benutzer www-Daten, und eine bestimmte Gruppe für diese Website, etwa wie folgt:     / var / www / site-a www-Datengruppe-a     / var / www / site-b www-Datengruppe-b     usw.

3) chmod jedes Verzeichnis (und alle Unterverzeichnis und Dateien mit -R) auf 770

4) fügen Sie jeden Entwickler zu jeder Gruppe hinzu, für die er gerade entwickelt.

    
St0rM 05.06.2013 22:45
quelle
0

Ein anderer Ansatz, wie ich es in einer anderen Antwort erwähnt habe, wäre es um die Krypto-Schlüssel über eine API bereitzustellen, wenn eine Anwendung danach fragt.

Ihre angeregten Entwickler würden dann die API mit einem eindeutigen Schlüssel abfragen, um die relevanten Anmeldeinformationen zu erhalten. Der Schlüssel kann einer Gruppe von Anmeldeinformationen zugeordnet werden (für Entwickler in mehreren Projekten).

Wenn Sie die API entweder über ein Client-Zertifikat oder IP-Filter schützen, reduzieren Sie das Risiko von Datenleck (wenn der Zugriffsschlüssel verloren geht, müssen Sie sich immer noch im richtigen Netzwerk befinden oder das Zertifikat für den Zugriff auf die API haben). Ich würde das Zertifikat bevorzugen, wenn Sie den Entwicklern (per Kommentar) vertrauen.

    
WoJ 12.04.2015 18:36
quelle
0

Die einfachste Lösung besteht darin, Ihre Anwendung auszuführen, die die Anmeldeinformationen verwaltet und sie den Entwicklern von einer anderen Instanz des Webservers (offensichtlich an einem anderen Port) ausgibt. Anschließend können Sie diese Instanz als einen anderen Benutzer ausführen und verschärfen die Berechtigungen, damit nur der Benutzer auf die geheimen Dateien zugreifen kann, die er benötigt.

Aber erstellen Sie einen zusätzlichen Benutzer, führen Sie es nicht als root.

Unter Apache würde ich auf suexec oder suPHP verweisen. Aber da du Apache nicht verwendest, ist das keine Option für dich.

    
swa66 20.05.2015 22:47
quelle

Tags und Links