Wir sind eine Webentwicklungsorganisation und haben kürzlich Subversion für unser Versionskontrollsystem verwendet. Da das Ausführen eines Updates so viel schneller ist als das Exportieren und Kopieren der Dateien, möchten die Entwickler, dass der Produktionsserver eine Arbeitskopie ist.
Das einzige Problem, das ich damit habe, sind alle im System verstreuten .svn-Dateien und die Tatsache, dass eine unternehmerische Person möglicherweise den Inhalt der darin enthaltenen Dateien lesen und ihnen möglicherweise Informationen geben könnte, die wir lieber nicht hätten .
Was ist der beste / einfachste Weg, um zu verhindern, dass IIS Inhalte aus diesen .svn-Verzeichnissen bereitstellt?
Antworten:
"Mach es nicht so" beantwortet die Frage nicht.
Praktisch mag ich es, eine Arbeitskopie auf dem Produktionsserver zu haben, weil ich auf diese Weise schnelle Änderungen in der Produktion vornehmen kann (wer hat das noch nie getan?) Und sie wieder einchecken kann. Dies hängt davon ab, wo Sie Ihren Sicherheits- / Komfort-Schieberegler haben möchten, und In vielen Fällen ist dies ein guter Ort.
Die Standardlösung in Apacheland besteht darin, die .svn-Dateien dort zu belassen, den Webserver jedoch anzuweisen, sie niemals bereitzustellen. So geht's mit IIS 5-7 unter Windows 2000-2008.
Laden Sie ISAPI_Rewrite herunter und installieren Sie es - die Lite-Version reicht für diesen Zweck aus. Beachten Sie die zusätzlichen Systemanforderungen für Win 2008. Warnung - Das MSI-Installationsprogramm stoppt und startet IIS.
Deaktivieren Sie das Kontrollkästchen "Schreibgeschützt" in den Eigenschaften der Datei httpd.ini . Wenn Sie das MSI-Installationsprogramm verwendet haben, finden Sie im Startmenü unter Helicon-> ISAPI_Rewrite eine Verknüpfung zur Datei httpd.ini
Fügen Sie diese Zeilen zu httpd.ini hinzu :
ISAPI_Rewrite-Anweisungen in httpd.ini :
Jetzt führt jede Anforderung eines .svn-Verzeichnisses oder seines Inhalts dazu, dass 404 vom Server nicht gefunden wird.
quelle
Sie können sicherstellen, dass von IIS verwendete Benutzerkonten keine Rechte für den Zugriff auf die SVN-Verzeichnisse haben.
Sie können dies entweder manuell tun (nicht empfohlen) oder ein MrJangles-Löschskript verwenden, das entweder ausgelöst wird, nachdem Sie das SVN-Update durchgeführt haben, oder regelmäßig als geplante Aufgabe ausgeführt wird:
(Hinweis: Ich habe das oben Gesagte nicht getestet. Sie müssen überprüfen, ob es das tut, was es versucht, bevor Sie sich in der Produktion darauf verlassen. Weitere Informationen finden Sie in der Ausgabe von "icacls / help".)
(Ein weiterer Hinweis: "icacls" ist ein Vista / 2008-Befehl. In früheren Windows-Varianten lautet der Befehl stattdessen "cacls".)
quelle
Öffnen Sie mit IIS 7 den IIS-Manager, wählen Sie den Serverknoten aus und doppelklicken Sie auf die Funktion Handlerzuordnungen . Klicken Sie auf die Aktion Managed Handler hinzufügen und konfigurieren Sie den Handler wie folgt:
Jetzt sollte jede Anforderung von Dateien in den Subversion-Metadatenordnern mit dem Namen .svn in allen Sites Folgendes zurückgeben:
Wenn Sie möchten, können Sie einen anderen Handlertyp auswählen, z. B. einen FileNotFound-Handler, der einen 404-Statuscode zurückgibt.
Für IIS 6 (mit installiertem und konfiguriertem ASP.NET 2):
Navigieren Sie zu Ausgangsverzeichnis> Konfiguration> Zuordnung und ordnen Sie die
.svn-base
Erweiterung zu%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
. Dann können Sie in machine.config (die Sie in finden%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG
) denselben Handler wie oben für die Erweiterung hinzufügen und das folgende XML-Element als untergeordnetes Element des Elements hinzufügen<httpHandlers>
:Dies verhindert nur, dass Besucher die Quellcodedateien anfordern. Sie können dennoch andere Dateien aus den .svn-Ordnern anfordern. Ordnen Sie aspnet_isapi.dll weitere Erweiterungen zu oder erstellen Sie eine Platzhalterzuordnung (wirkt sich auf die Leistung aus), und Sie können verhindern, dass weitere Dateien angefordert werden.
quelle
Aus rein sicherheitstechnischer Sicht würde ich Ihre Entwickler umerziehen.
Eine einfache Bereitstellung ist nicht unbedingt eine gute Idee, wenn Sie die Sicherheit opfern.
Sie planen eine Konfiguration, um den Zugriff auf vertrauliche Informationen zu blockieren. Was passiert, wenn sich die Konfiguration versehentlich ändert? Was passiert, wenn ein IIS-HotFix herunterfährt und die Funktionsweise Ihrer Konfiguration ändert? Was passiert, wenn die von Ihnen verwendete Drittanbieter-Bibliothek fehlerhaft ist und nicht mehr funktioniert? Ich kann mir einige äußerst wahrscheinliche Ereignisse vorstellen, die Ihre Konfiguration beschädigen und den Zugriff auf diese Dateien ermöglichen würden. Dies würde VOLLSTÄNDIG VERMINDERT , wenn die Dateien überhaupt nicht auf dem Server wären .
Sie sollten ein Bereitstellungsskript erstellen, das die entsprechenden Dateien von einem Staging-Server kopiert. Sie können sogar über SVN in ein anderes Verzeichnis auf Prod wechseln.
Zum Bereitstellen können Sie RoboCopy und den Befehl / XD verwenden, um .svn-Verzeichnisse auszuschließen. Sie können das Microsoft Web Deployment Tool verwenden und damit die Verzeichnisse einschränken. Sie können die oben genannten Funktionen
for /r YOURPATH %f in (.svn) do rd /s /q "%f"
bei Bedarf bereitstellen und ausführen .Stellen Sie diese Verzeichnisse nur nicht auf der Produktionswebsite bereit.
quelle
Verwenden Sie keine Subversion. Ernsthaft.
Aus Ihren Kommentaren geht hervor, dass Sie das falsche Tool für den Job verwenden. Subversion ist ein großartiges Tool für Ihre Entwickler, aber kein Bereitstellungs- / Spiegelungstool. Wenn Sie einfach Dateien mit einem Minimum an Bandbreite und Zeit von Ihrem Staging- / Testserver auf Ihren Produktionsserver kopieren möchten, empfehlen wir Ihnen, rsync zu verwenden . Da ich ein Unix-Administrator bin, gibt es möglicherweise ein Windows-Äquivalent zu rsync, von dem ich nichts weiß. Daher möchten Sie möglicherweise Nachforschungen anstellen. Sie können jedoch rsync unter Cygwin oder cwrsync verwenden .
Mit Rsync können Sie Verzeichnisse auf einem Server mit Verzeichnissen auf einem anderen Server spiegeln. Es berechnet ein Delta zwischen den beiden Servern und kopiert nur die Unterschiede. Nicht nur das, sondern es komprimiert das Delta und kann es optional auch verschlüsseln.
quelle
Best Practice wäre ein automatisches Bereitstellungssystem, das exportiert und veröffentlicht wird, nachdem ein SVN-Update durchgeführt wurde. Betrachten Sie zum Beispiel Hudson. Es gibt nur noch wenige, aber da wir keine brauchen, bin ich nicht sehr gut informiert
Greetz, GHad
quelle
Ich plane ein Skript auf meinen Produktionsservern, das nach .svn sucht und die Dateien einfach löscht. Ich denke nicht, dass dies in Ihrem Fall funktionieren wird.
Wenn das Entfernen der Dateien keine Option ist, können Sie die Verzeichnisse über IIS (Kennwort- oder IP-Einschränkungen) grundlegend schützen. Dies würde IIS daran hindern, Inhalte für nicht autorisierte Benutzer bereitzustellen.
Viel Glück!
quelle