irolan
Goto Top

Direkter Datentransfer zwischen zwei Servern

Hallo zusammen,

das Problem ist etwas komplexer.
Wir haben zwei Server (2012 R2 Standard), nennen wir sie IIS und ARCHIV. Auf IIS läuft, wie der Name sagt, ein IIS 8 mit FTP-Funktionalität.
Dateien werden über FTP auf diesen Server geladen und landen entsprechend im Verzeichnis C:\inetpub\ftproot.
Auf ARCHIV läuft eine Archivierungssoftware, die Dateien aus einem angegebenen Verzeichnis holt und in ein Archiv packt.
Beide Server befinden sich im selben Netz.

Nun folgendes Problem:
Es wird ein Skript verwendet, das eine WebConfiguration hinzufügt. So wie ich das verstehe, muss ich die FTP-Verzeichnisse innerhalb von C:\inetpub\ anlegen, sonst funktioniert das Skript nicht. Nun wäre der erste Gedanke, C:\inetpub\ftproot für einen bestimmten User freizugeben und als Netzvolume auf ARCHIV anzulegen. Das funktioniert allerdings nicht, da die Archivierungssoftware keine Dateien aus Netzlaufwerken holt. Sie akzeptiert nur lokale Volumes.

Die aktuelle Lösung ist, das Verzeichnis, das in der Archivierungssoftware auf ARCHIV eingestellt ist, als Netzvolume auf IIS anzulegen und den Inhalt von C:\inetpub\ftproot regelmäßig per Copy-Item hineinzukopieren.
Das ist natürlich alles andere als optimal. Es ist problematisch, wenn es durchläuft und gerade Dateien hochgeladen werden, und es ist ein weiterer Zwischenschritt und damit eine Fehlerquelle.

Wäre natürlich großartig, wenn ich das FTP-Verzeichnis auf die Freigabe leiten, oder die Freigabe als lokales Verzeichnis anlegen könnte. Wobei letzteres, soweit ich weiß, nicht geht. Kennt irgendjemand eine Alternative, die funktionieren könnte?

Gruß
Irolan

Content-ID: 277391

Url: https://administrator.de/contentid/277391

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

StefanKittel
StefanKittel 15.07.2015 um 16:51:21 Uhr
Goto Top
Hallo,

vermutlich das einfachste ist ein Skript, welches alle 5 Minuten alle Dateien vom IIS aus dem ftproot in ein lokales Verzeichniss auf Archiv verschiebt.

Viele Grüße

Stefan
122990
122990 15.07.2015 aktualisiert um 17:14:33 Uhr
Goto Top
So wie ich das verstehe, muss ich die FTP-Verzeichnisse innerhalb von C:\inetpub\ anlegen, sonst funktioniert es nicht.
Da liegst du falsch, das Verzeichnis für den FTP-Server kann auch auf einem Netzlaufwerk, oder SAN / NAS liegen, das ist kein Problem, solange du dort entsprechende NTFS Zugriffsrechte setzen kannst.

Entweder du bindest das Verzeichnis als Laufwerk auf dem Server ein, oder du kannst auch mit UNC-Pfad arbeiten.

Gruß grexit
Irolan
Irolan 15.07.2015 um 16:55:48 Uhr
Goto Top
Genau das haben wir momentan auch. Das geht mit Copy-Item. Aber das ist für uns keine Dauerlösung. Wenn das durchläuft, während gerade etwas hochgeladen wird, funktioniert es natürlich nicht richtig. Außerdem ist es eine zusätzliche Fehlerquelle. Darum suche ich ja nach Alternativen.
Irolan
Irolan 16.07.2015 aktualisiert um 10:54:03 Uhr
Goto Top
Da liegst du falsch, das Verzeichnis für den FTP-Server kann auch auf einem Netzlaufwerk, oder SAN / NAS liegen, das ist kein
Problem, solange du dort entsprechende NTFS Zugriffsrechte setzen kannst.

Entweder du bindest das Verzeichnis als Laufwerk auf dem Server ein, oder du kannst auch mit UNC-Pfad arbeiten.

Ok, stimmt. Klappt hier aber nicht, da ich mit einem Skript zugreife.
Das Skript enthält

Add-WebConfiguration "/system.ftpServer/security/authorization" -value @{accessType="Allow";users="$Username;permissions=3} -PSPath IIS:\ -location /$Username

Wenn ich das FTP-Verzeichnis außerhalb vom C:\inetpub Verzeichnis platziere, funktioniert die Funktion nicht - sie liefert die Fehlermeldung
Fehler: Unbekannter Konfigurationspfad "MACHINE/WEBROOT/APPHOST"
Das passiert auch, wenn ich -PSPath weglasse.
122990
122990 16.07.2015 aktualisiert um 11:10:35 Uhr
Goto Top
Ich würde mir erst mal deinen Befehl nochmal richtig anschauen, da stimmt so einiges nicht:
https://technet.microsoft.com/de-de/library/ee807834.aspx

Und außerdem müssen natürlich die ACLs des Zielpfades passen, d.h. die User müssen darauf zugreifen dürfen und selbstredend der IIS-Account !
Das wäre ja noch schöner wenn ich den Pfad nirgendwo anders hin verpflanzen könnte, als InetPub... ist also Quatsch face-big-smile
Irolan
Irolan 16.07.2015 aktualisiert um 12:14:17 Uhr
Goto Top
Ich würde mir erst mal deinen Befehl nochmal richtig anschauen, da stimmt so einiges nicht:
https://technet.microsoft.com/de-de/library/ee807834.aspx
Ok, und was stimmt daran nicht? Ich habe den so aus einer Anleitung übernommen, die eigentlich recht gut funktioniert. Falls dich das -location /$Username irritiert, die User werden auf ihre eigenen Verzeichnisse beschränkt, die natürlich so heißen, wie die User. Das Skript bekommt den Usernamen als Parameter und hat damit natürlich auch den Namen des Userverzeichnisses.

Und außerdem müssen natürlich die ACLs des Zielpfades passen, d.h. die User müssen darauf zugreifen
dürfen und selbstredend der IIS-Account !
Genau das ist es ja, was der Befehl tut. Er gibt dem User das Zugriffsrecht auf sein Verzeichnis. Der IIS-Account kann zugreifen.

Das wäre ja noch schöner wenn ich den Pfad nirgendwo anders hin verpflanzen könnte, als InetPub... ist also Quatsch
Es geht ja nicht darum, den physischen Pfad der FTP-Site woanders hin zu legen, in dem Fall aufs Netzlaufwerk. Das ist kein Problem. Hatte das ungenau beschrieben, habe den OP angepasst.
Das Problem ist, dass der Konfigurationspfad offenbar nur das inetpub-Verzeichnis umfasst. Ich habe gesucht, ob es eine Möglichkeit gibt, das zu ändern (es soll ja nur die FTP-Seite ausgelagert werden, die normalen Websiten sollen ruhig da bleiben, wo sie sind), aber nichts gefunden.

BTW, nebenher noch. Wenn ich -PSPath ändere zu Z:\ (das ist die Freigabe) sagt er "Add-WebConfiguration: Der Pfad gehört nicht zum WebAnimistration-Anbieter."
122990
Lösung 122990 16.07.2015, aktualisiert am 17.07.2015 um 13:34:08 Uhr
Goto Top
Du musst bei -Location den Namen der FTP-Site vorneanstellen:
-Location "FTPSITE/NamedesUnterordners"
dann klappt dat auch face-wink hier gerade erfolgreich getestet.

Komplett dann also
Add-WebConfiguration "/system.ftpServer/security/authorization" -value @{accessType="Allow";users=$Username;permissions=3} -PSPath IIS:\ -location "FTPSITENAME/$Username"

Genau das ist es ja, was der Befehl tut. Er gibt dem User das Zugriffsrecht auf sein Verzeichnis.
Eben nicht, dieser Befehl tut das nur auf FTP-Server Ebene, aber nicht auf NTFS ACL Ebene ! Dort müssen die User ebenfalls entsprechende Rechte besitzen.
Irolan
Irolan 16.07.2015 um 17:46:45 Uhr
Goto Top
Zitat von @122990:

Du musst bei -Location den Namen der FTP-Site vorneanstellen:
> -Location "FTPSITE/NamedesUnterordners"
> 
dann klappt dat auch face-wink hier gerade erfolgreich getestet.
Komplett dann also
> Add-WebConfiguration "/system.ftpServer/security/authorization" -value
> @{accessType="Allow";users=$Username;permissions=3} -PSPath IIS:\ -location "FTPSITENAME/$Username"
> 
Ok, danke, das mit dem Seitennamen habe ich übersehen. Dachte, das wäre einfach Teil des Pfads, weil das ursprünglich in einem Ordner saß, der so heißt wie die Seite.

> Genau das ist es ja, was der Befehl tut. Er gibt dem User das Zugriffsrecht auf sein Verzeichnis.
Eben nicht, dieser Befehl tut das nur auf FTP-Server Ebene, aber nicht auf NTFS ACL Ebene ! Dort müssen die User
ebenfalls entsprechende Rechte besitzen.
Ich merks, die Benutzer können sich nicht einloggen. Es werden hier IIS Manager User verwendet und eine User Isolation ist eingestellt - Beschränkung auf Userverzeichnis. Nun heißt es aber immer, auf das Homeverzeichnis kann nicht zugegriffen werden. Du kennst dich damit offensichtlich besser aus als ich. Wie muss der Befehl denn dann aussehen, damit er die Rechte auch auf der NTFS ACL gesetzt werden? Habe da nach Lösungen gesucht, aber die Anleitungen, die ich finde, sind für IIS 4 - die gehen nicht mehr.
122990
122990 18.07.2015 aktualisiert um 13:00:07 Uhr
Goto Top
icacls is your friend für die NTFS Rechte !
Irolan
Irolan 20.07.2015 um 09:45:01 Uhr
Goto Top
Wenn ich das richtig verstehe, muss ich der Application Pool Identity Zugriff auf die Freigabe gewähren. In meinem Fall ist das der DefaultAppPool. Hab ich gemacht, geht aber trotzdem nicht. Die Manager User können nicht zugreifen. Den Manager Usern selber kann ich über ICACLS ja keine Rechte zuweisen. Sind ja keine Windows-User.
122990
122990 20.07.2015 aktualisiert um 12:54:14 Uhr
Goto Top
D.h du nutzt keine Windows Accounts für die Auth (Standard Auth / PassThrough) sondern IISManagerAuth ?

In diesem Fall musst du dem Account Network Service die benötigten Rechte den Verzeichnissen und den Config-Dateien zuweisen:

Zitat aus (http://windowsitpro.com/networking/securing-ftp-sites-using-ftp-publish ..)
IIS Manager works with the built-in Network Service to authenticate IIS Manager users to resources. Therefore, we need to grant NTFS Modify permission for the Network Service on the FTPSITE1 folder, and Read permission for the IIS configuration files. To grant NTFS these permissions, open a command prompt as an administrator and run the following four CACLS commands to add ACLs for the Network Service:

cacls "%systemdrive%\windows\system32
\inetsrv\config" /g "network service":r /e

cacls "%systemdrive%\windows\system32
\inetsrv\config\redirection.config" 
/g "network service":r /e

cacls "%systemdrive%\windows\system32
\inetsrv\config\administration.config" 
/g "network service":r /e

cacls "%systemdrive%\inetpub\ftpsite1"
/g "network service":c /e

Finally, start your FTP client and connect to FTPSITE1 with the IIS Manager user (remoteuser) and the password you assigned.
Irolan
Irolan 31.07.2015 um 11:42:03 Uhr
Goto Top
This returns an error.

PS C:\Users\Administrator> cacls "%systemdrive%\windows\system32\inetsrv\config" /g "network service":r /e
Invalid arguments
Note: Cacls is deprecated. Use Icacls insead.
122990
122990 31.07.2015 aktualisiert um 11:54:07 Uhr
Goto Top
Zitat von @Irolan:
Note: Cacls is deprecated. Use Icacls insead.
Die Fehlermeldung sagst doch schon nehme icacls
icacls /? zeigt dir die Verwendung der Parameter ...
Irolan
Irolan 31.07.2015 um 11:58:49 Uhr
Goto Top
Die Fehlermeldung ist "ungültige Argumente". Ich habs mit icacls versucht, aber das erkennt "network service" nicht als gültigen Parameter.
122990
122990 31.07.2015 aktualisiert um 12:09:33 Uhr
Goto Top
Naja icacls verwendet schon andere Parameter face-wink
http://www.iis.net/learn/publish/using-the-ftp-service/configure-ftp-wi ...

ICACLS "%SystemDrive%\Windows\System32\inetsrv\config" /Grant "Network Service":R /T
ICACLS "%SystemDrive%\Windows\System32\inetsrv\config\administration.config" /Grant "Network Service":R
ICACLS "%SystemDrive%\Windows\System32\inetsrv\config\redirection.config" /Grant "Network Service":R

lüpt problemlos ...

Kannst du ja von mir aus auch über die GUI der Files machen ...wenn du mit der Kommandozeile auf Kriegsfuß stehst.
Irolan
Irolan 31.07.2015 um 14:15:41 Uhr
Goto Top
Ok, das hatte ich schon so eingestellt. Ich benutze nicht den Network Service sondern einen speziellen Windows-User, aus Sicherheitsgründen. Nennen wir den FTPService.
Das heißt, FTPService muss Zugriff auf die o.g. Locations haben, sowie auf die FTP-Verzeichnisse der User. Das ist der Fall - Lesen bei den config-Verzeichnissen, Ändern beim FTP-Verzeichnis.
Einloggen per FTP geht dennoch nicht, Fehlermeldung "Home directory unavailable".
Ich hatte das ICACLS anfangs mit CLI gemacht. Jetzt gehts nicht mehr, es kommt immer
Ungültiger Parameter: "FTPService"
Echt irritierend.
Und ich muss es über die CLI machen, weil ich das am Ende automatisiert haben möchte.
Das Problem, das ich jetzt noch habe, ist beim Versuch der FTP-Verbindung die Fehlermeldung "530 - Home directory inaccessible".
122990
122990 31.07.2015 aktualisiert um 21:09:58 Uhr
Goto Top
Zitat von @Irolan:

Ok, das hatte ich schon so eingestellt. Ich benutze nicht den Network Service sondern einen speziellen Windows-User, aus Sicherheitsgründen. Nennen wir den FTPService.
Falsch, du musst hier "Network Service" nehmen, hast du die Seite überhaupt mal gelesen ??
Zitat:
The "Network Service" account is used by the COM process that handles authentication extensibility; therefore, you must grant the account specific permissions to certain folders to enable this form of authentication. To grant the "Network Service" account "read" permissions to the IIS "config" folder:
Du kannst hier also nicht irgendeinen Account hernehmen ! Diese Berechtigungen sind nur für den Prozess der die Authentifizierung vornimmt, damit diese Art der Auth überhaupt funktioniert.