¿Cómo probar como cuenta del SISTEMA local? (accediendo a archivos remotos desde Python)

¿Cómo probar como cuenta del SISTEMA local? (accediendo a archivos remotos desde Python)

Estoy intentando acceder a algunos archivos remotos desde un servidor de aplicaciones web. Llamémoslos servidores M y R. Ambos ejecutan Windows Server (2008 y 2003).

Los archivos remotos están en el servidor R en un recurso compartido de archivos que todos pueden leer (los permisos compartidos y los permisos de seguridad permiten Everyonela lectura). Esta acción se llama \\R\EthRelease.

La aplicación web está en el servidor M. Estoy ejecutando un script Python (realmente Jython) en el contenedor de servlets Tomcat (a través deBSF) para intentar acceder a los archivos remotos en R.

Pero no importa lo que haga, el guiónNo puedo ver la carpeta compartida remota.Por ejemplo, uso código Python como:

# 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)))

y las únicas carpetas que el script dice que existen son C:\y 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"/>

Por el contrario, cuando hago una diren cualquiera de las rutas anteriores en el indicador CMD en el servidor M, existen y son legibles:

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>

Probé esto con Jython estable 2.5.3 y Jython beta 2.7b1, y obtuve los mismos resultados. Sé que no es sólo un problema de Python, porque ejecuto comandos similares en mi computadora portátil (usando Python 3.3) y puedo acceder al mismo recurso compartido de red con éxito.

Una posible diferencia es que el contenedor de servlets, Tomcat, se ejecuta como el usuario del SISTEMA local en el servidor M, mientras que en el shell CMD estoy conectado como otro usuario. Pero como se mencionó anteriormente, Everyonetiene acceso al recurso compartido de archivos remoto, por lo que eso no debería hacer la diferencia, ¿verdad? ¿Hay alguna manera de iniciar sesión como usuario del SISTEMA y probar si puedo acceder al recurso compartido de archivos remoto en ese estado?

Otra posible diferencia es que el contenedor de servlets o BSF podría imponer algún tipo de restricciones de espacio aislado, lo que me impediría acceder a archivos fuera del contenedor de servlets. Pero eso no está sucediendo porque puedo comprobarlo C:\.

¿¿Algunas ideas?? Esto me ha estado volviendo loco. Intenté un par de veces antes acceder a los archivos directamente desde dentroCapullo, y chocó contra el mismo tipo de pared. Recientemente pensé '¡Eureka! ¡Puedo subcontratar el problema a un script de Python! ¡Python puede manejarlo!' Pero hasta ahora, no hay dados.

Respuesta1

Como se analiza en estas preguntas de superusuario:La línea de comando elevada no puede acceder a unidades compartidas en Windows 7y¿Cómo acceder a recursos compartidos de red desde un proceso elevado en Windows 7?– las asignaciones de unidades están asociadas con un inicio de sesión, por lo que el SISTEMA no las tiene a menos que usted haga arreglos especiales. Es posible que deba operar en los archivos remotos mediante UNC o haciendo algo NET USEdesde su código. Tenga en cuenta que su programa de prueba informa que tiene acceso Fa .R\\R\EthRelease

Respuesta2

Generalmente no consideraría el uso de la cuenta del sistema local para este propósito. Consideraría ejecutarlo bajo la cuenta de servicio de red o una cuenta de servicio administrada para proporcionar este acceso.

Si realmente desea iniciar sesión como cuenta del sistema local para probar esto, hay un par de formas de abrir un shell como cuenta del sistema local.

Puedes usarPSEXECencontrado en elPSHerramientasy abra una sesión cmd interactiva en la cuenta del sistema:psexec -i -s cmd.exe

O iniciar una tarea programada ejecutándose como la cuenta del sistema ( at <time> /interactive cmd.exe)

información relacionada