Wie würde ich in node.js dem Grundsatz der geringsten Rechte folgen?

8

Stellen Sie sich eine Webanwendung vor, die zwei Hauptfunktionen ausführt:

  1. Bedient Daten aus einer Datei, die höhere Berechtigungen zum Lesen von
  2. erfordert
  3. Bedient Daten aus einer Datei, für die niedrigere Berechtigungen zum Lesen von
  4. erforderlich sind

Meine Annahme: Damit beide Dateien gelesen werden können, müsste ich den Knoten mit einem Konto ausführen, das beide Dateien lesen kann.

Wenn der Knoten unter einem Konto ausgeführt wird, das auf beide Dateien zugreifen kann, kann ein Benutzer, der keine Dateien lesen darf, die höhere Berechtigungen erfordern, diese Dateien möglicherweise aufgrund einer Sicherheitslücke im Code der Webanwendung lesen. Dies würde zu verheerenden Konsequenzen führen in meiner imaginären Web-Anwendungswelt .

Idealerweise kann der Knotenprozess mit einer minimalen Anzahl von Rechten ausgeführt werden und dann diese Rechte vorübergehend vor dem Zugriff auf eine Systemressource eskalieren.

Fragen: Können Knoten Privilegien temporär eskalieren? Oder gibt es einen besseren Weg?

Wenn nicht, erwäge ich, zwei verschiedene Server (einen mit höheren Rechten und einen mit niedrigeren Rechten) auszuführen und dann beide hinter einen Proxy-Server zu setzen, der sich authentifiziert / autorisiert, bevor er die Anfrage weiterleitet.

Danke.

    
Tim Stewart 15.05.2011, 18:05
quelle

2 Antworten

1

Das ist in der Tat ein schwieriger Fall. Am Ende sind Dateirechte eine Art von Metadaten. Anstatt direkt auf die Dateien zuzugreifen, würde ich empfehlen, eine Ebene zwischen den Dateien in Form einer Datenbanktabelle zu haben oder alles, was den Dateityp der Datei zuordnen könnte, und die Datei an den Benutzer zu streamen, wenn sie existiert.

Das würde bedeuten, dass die so genannte Webanwendung die Dateisystemberechtigungen nicht einfach umgehen könnte. Sie könnten es sogar so einrichten, dass die besagten Dateien keine serverlesbaren Berechtigungen haben und stattdessen nur von der Zwischenschicht lesbar sind. Alles was es tun könnte, ist einen Anruf zu tätigen und zu sehen, ob der Benutzer mit den angegebenen Berechtigungen auf die Dateien zugreifen könnte. Auf diese Weise können Sie auch zwischen mehreren Webanwendungen teilen, sofern Sie dies wünschen. Auch wegen der sehr spezifischen Art dessen, was die Zwischenschicht tut, können Sie eine sehr begrenzte Anzahl von Aufrufen durchsetzen.

Wenn nun ein Benutzer mit niedrigerer Berechtigung Zugriff auf das Konto eines höher privilegierten Benutzers erhält, kann er die Datei sehen, und es gibt keine Möglichkeit, das Konto des Benutzers wirklich zu sperren. Dies ist jedoch Teil des Entwicklungsprozesses.

    
onteria_ 15.05.2011, 18:50
quelle
0

Nein, ich bezweifle, dass node.js - out of the box - die geringste Berechtigung garantieren kann.

Es ist denkbar, dass node.js als root ausgeführt werden könnte, um seine Betriebssystemprivilegien über Systemaufrufe zu manipulieren, um den Zugriff auf bestimmte Ressourcen zu erlauben oder zu beschränken, aber dann würde root das ursprüngliche Ziel besiegen. p>

Eine mögliche Lösung besteht darin, drei Instanzen von Knoten auszuführen, einen Proxy (ohne spezielle Berechtigungen), um Aufrufe an den einen oder anderen Server zu leiten, die auf unterschiedlichen Berechtigungsstufen ausgeführt werden. (Heh, wie du schon erwähnst. Ich muss wirklich bis zum Ende der Beiträge lesen, bevor ich in den Kampf spring!)

    
Rob Raisch 15.05.2011 18:36
quelle

Tags und Links