como testar como conta SYSTEM local? (acessando arquivos remotos do Python)

como testar como conta SYSTEM local? (acessando arquivos remotos do Python)

Estou tentando acessar alguns arquivos remotos de um servidor de aplicativos da web. Vamos chamá-los de servidores M e R. Ambos executam o Windows Server (2008 e 2003).

Os arquivos remotos estão no servidor R em um compartilhamento de arquivos que pode ser lido por todos (as permissões de compartilhamento e as permissões de segurança permitem Everyonea leitura). Esse compartilhamento é chamado de \\R\EthRelease.

A aplicação web está no servidor M. Estou executando um script Python (na verdade Jython) no contêiner de servlet Tomcat (viaBSF) para tentar acessar os arquivos remotos em R.

Mas não importa o que eu faça, o roteironão consigo ver a pasta compartilhada remota.Por exemplo, eu 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)))

e as únicas pastas que o script diz existir são C:\e 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 outro lado, quando faço um direm qualquer um dos caminhos acima no prompt do CMD no servidor M, eles existem e são legíveis:

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>

Eu tentei isso com o Jython estável 2.5.3 e o Jython beta 2.7b1 e obtive os mesmos resultados. Eu sei que não é apenas um problema do Python, porque executo comandos semelhantes no meu laptop (usando Python 3.3) e consigo acessar o mesmo compartilhamento de rede com êxito.

Uma possível diferença é que o contêiner do servlet, Tomcat, está sendo executado como o usuário SYSTEM local no servidor M, enquanto no shell CMD estou logado como outro usuário. Mas como mencionei antes, Everyonetem acesso ao compartilhamento remoto de arquivos, então isso não deve fazer diferença, certo? Existe alguma maneira de fazer login como usuário SYSTEM e testar se consigo acessar o compartilhamento de arquivos remoto nesse estado?

Outra possível diferença é que o contêiner do servlet ou BSF pode impor algum tipo de restrição de sandbox, impedindo-me de acessar arquivos fora do contêiner do servlet. Mas isso não está acontecendo, porque posso verificar C:\.

Alguma ideia?? Isso tem me deixado maluco. Eu tentei algumas vezes antes acessar os arquivos diretamente de dentroCasulo, e bateu no mesmo tipo de parede. Recentemente pensei 'Eureka! Posso terceirizar o problema para um script Python! Python pode lidar com isso! Mas até agora, sem dados.

Responder1

Conforme discutido nestas perguntas do superusuário –O prompt de linha de comando elevado não pode acessar unidades compartilhadas no Windows 7eComo acessar compartilhamentos de rede a partir de um processo elevado no Windows 7?– os mapeamentos de unidades estão associados a um login e, portanto, o SYSTEM não os possui, a menos que você tome providências especiais. Pode ser necessário operar nos arquivos remotos por UNC ou fazendo um NET USEa partir do seu código. Observe que seu programa de teste informa que possui acesso a Farquivos .R\\R\EthRelease

Responder2

Geralmente, eu não consideraria usar a conta do sistema local para essa finalidade. Gostaria de executá-lo na conta de serviço de rede ou em uma conta de serviço gerenciado para fornecer esse acesso.

Se você realmente deseja fazer login como conta do sistema local para testar isso, existem algumas maneiras de abrir um shell como conta do sistema local.

Você pode usarPSEXECencontrado noPSToolse abra uma sessão cmd interativa na conta do sistema:psexec -i -s cmd.exe

Ou inicie uma tarefa agendada em execução como conta do sistema ( at <time> /interactive cmd.exe)

informação relacionada