Wie testet man als lokales SYSTEM-Konto? (Zugriff auf Remote-Dateien von Python aus)

Wie testet man als lokales SYSTEM-Konto? (Zugriff auf Remote-Dateien von Python aus)

Ich versuche, von einem Webanwendungsserver aus auf einige Remotedateien zuzugreifen. Nennen wir sie Server M und R. Auf beiden läuft Windows Server (2008 und 2003).

Die Remotedateien befinden sich auf Server R in einer Dateifreigabe, die für Jeder lesbar ist (Freigabeberechtigungen und Sicherheitsberechtigungen erlauben Everyonedas Lesen). Diese Freigabe heißt \\R\EthRelease.

Die Webanwendung befindet sich auf dem Server M. Ich führe ein Python-Skript (eigentlich Jython) unter einem Tomcat-Servlet-Container aus (überBSF), um zu versuchen, auf die Remote-Dateien auf zuzugreifen R.

Aber egal, was ich tue, das SkriptDer freigegebene Remoteordner kann nicht angezeigt werden.Ich verwende beispielsweise Python-Code wie:

# Note, R: is a mapped network drive pointing to \\R\EthRelease
for file in ['C:', 'C:\\', 'C:\\Users', 'R:', 'R:\\',
        r"\\R\EthRelease", r"\\172.x.x.x\EthRelease"]:
    output.append("  <accessCheck dir='%s' exists='%s' accessF='%s' accessR='%s'/>\n" %
        (file, os.path.exists(file), os.access(file, os.F_OK),
        os.access(file, os.R_OK)))

und die einzigen Ordner, von denen das Skript angibt, dass sie existieren, sind C:\und C:\Users:

<accessCheck dir="C:" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="C:\" exists="True" accessF="True" accessR="True"/>
<accessCheck dir="C:\Users" exists="True" accessF="True" accessR="True"/>
<accessCheck dir="R:" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="R:\" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="\\R\EthRelease" exists="False" accessF="True" accessR="True"/>
<accessCheck dir="\\172.x.x.x\EthRelease" exists="False" accessF="False" accessR="False"/>

Wenn ich dagegen dirin der CMD-Eingabeaufforderung auf Server M einen der oben genannten Pfade eingebe, sind diese vorhanden und lesbar:

C:\Users\me>dir r:\
 Volume in drive R is GIS
 Volume Serial Number is ...

 Directory of r:\

12/03/2012  09:18 AM    <DIR>          .
12/03/2012  09:18 AM    <DIR>          ..
07/25/2013  08:51 AM    <DIR>          EGI
12/17/2013  05:46 AM    <DIR>          maps
               0 File(s)              0 bytes
               4 Dir(s)  48,192,491,520 bytes free

C:\Users\me>

Ich habe dies sowohl mit Jython Stable 2.5.3 als auch mit Jython Beta 2.7b1 versucht und die gleichen Ergebnisse erhalten. Ich weiß, dass es nicht nur ein Python-Problem ist, weil ich ähnliche Befehle auf meinem Laptop ausführe (mit Python 3.3) und erfolgreich auf dieselbe Netzwerkfreigabe zugreifen kann.

Ein möglicher Unterschied besteht darin, dass der Servlet-Container Tomcat als lokaler SYSTEM-Benutzer auf Server M ausgeführt wird, während ich in der CMD-Shell als anderer Benutzer angemeldet bin. Aber wie bereits erwähnt, Everyonehat er Zugriff auf die Remote-Dateifreigabe, also sollte das keinen Unterschied machen, oder? Gibt es eine Möglichkeit, mich als SYSTEM-Benutzer anzumelden und zu testen, ob ich in diesem Zustand auf die Remote-Dateifreigabe zugreifen kann?

Ein weiterer möglicher Unterschied besteht darin, dass der Servlet-Container oder BSF möglicherweise Sandboxing-Einschränkungen auferlegt, die mich daran hindern, auf Dateien außerhalb des Servlet-Containers zuzugreifen. Aber das passiert nicht, weil ich dies überprüfen kann C:\.

Irgendwelche Ideen?? Das hat mich in den Wahnsinn getrieben. Ich hatte vorher ein paar Mal versucht, direkt von innen auf die Dateien zuzugreifenKokonund bin auf dieselbe Art von Wand gestoßen. Vor kurzem dachte ich: „Heureka! Ich kann das Problem an ein Python-Skript auslagern! Python kann damit umgehen!“ Aber bisher nichts.

Antwort1

Wie in diesen Super User-Fragen besprochen –Über die Eingabeaufforderung mit erhöhten Rechten kann in Windows 7 nicht auf freigegebene Laufwerke zugegriffen werdenUndWie greife ich in Windows 7 von einem erhöhten Prozess aus auf Netzwerkfreigaben zu?– Laufwerkszuordnungen sind mit einem Login verknüpft, daher hat SYSTEM sie nicht, es sei denn, Sie treffen besondere Vorkehrungen. Möglicherweise müssen Sie die Remotedateien per UNC bearbeiten oder indem Sie NET USEvon Ihrem Code aus einen ausführen. Beachten Sie, dass Ihr Testprogramm meldet, dass es Zugriff auf Fhat .R\\R\EthRelease

Antwort2

Ich würde für diesen Zweck grundsätzlich nicht das lokale Systemkonto verwenden. Ich würde versuchen, es unter dem Netzwerkdienstkonto oder einem verwalteten Dienstkonto auszuführen, um diesen Zugriff bereitzustellen.

Wenn Sie sich zum Testen wirklich mit dem lokalen Systemkonto anmelden möchten, gibt es mehrere Möglichkeiten, eine Shell mit dem lokalen Systemkonto zu öffnen.

Sie könnenPSEXECgefunden in derPSToolsund öffnen Sie eine interaktive cmd-Sitzung unter dem Systemkonto:psexec -i -s cmd.exe

Oder starten Sie eine geplante Aufgabe mit dem Systemkonto ( at <time> /interactive cmd.exe)

verwandte Informationen