как проверить как локальную учетную запись SYSTEM? (доступ к удаленным файлам из Python)

как проверить как локальную учетную запись SYSTEM? (доступ к удаленным файлам из Python)

Я пытаюсь получить доступ к некоторым удаленным файлам с сервера веб-приложений. Назовем их серверами M и R. Оба работают под управлением Windows Server (2008 и 2003).

Удаленные файлы находятся на сервере R в общем файловом ресурсе, доступном для чтения всем (разрешения общего ресурса и разрешения безопасности позволяют Everyoneчитать). Этот общий ресурс называется \\R\EthRelease.

Веб-приложение находится на сервере M. Я запускаю скрипт Python (на самом деле Jython) в контейнере сервлетов Tomcat (черезЧФ) для того, чтобы попытаться получить доступ к удаленным файлам на R.

Но что бы я ни делал, сценарийне видит удаленную общую папку.Например, я использую такой код Python:

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

и единственные папки, которые, как утверждает скрипт, существуют, это C:\и 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"/>

Напротив, когда я выполняю команду a dirдля любого из вышеуказанных путей в командной строке на сервере M, они существуют и доступны для чтения:

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>

Я пробовал это и с Jython stable 2.5.3, и с Jython beta 2.7b1, и получил те же результаты. Я знаю, что это не только проблема Python, потому что я запускаю похожие команды на своем ноутбуке (используя Python 3.3) и могу успешно получить доступ к той же сетевой папке.

Одно из возможных отличий заключается в том, что контейнер сервлетов Tomcat работает как локальный пользователь SYSTEM на сервере M, в то время как в оболочке CMD я вошел как другой пользователь. Но, как упоминалось ранее, Everyoneимеет доступ к удаленному файловому ресурсу, так что это не должно иметь значения, верно? Есть ли способ войти как пользователь SYSTEM и проверить, могу ли я получить доступ к удаленному файловому ресурсу в этом состоянии?

Другое возможное отличие заключается в том, что контейнер сервлета или BSF может накладывать какие-то ограничения песочницы, не давая мне доступа к файлам за пределами контейнера сервлета. Но этого не происходит, потому что я могу проверить C:\.

Есть идеи?? Это сводит меня с ума. Я уже несколько раз пытался получить доступ к файлам напрямую изнутриКокон, и натолкнулся на ту же стену. Недавно я подумал: «Эврика! Я могу передать эту проблему скрипту Python! Python справится с этим!» Но пока безрезультатно.

решение1

Как обсуждалось в этих вопросах Суперпользователя –Командная строка с повышенными правами не может получить доступ к общим дискам в Windows 7иКак получить доступ к сетевым ресурсам из процесса с повышенными правами в Windows 7?– сопоставления дисков связаны с логином, поэтому у SYSTEM их нет, если вы не сделаете специальных соглашений. Возможно, вам придется работать с удаленными файлами с помощью UNC или выполняя NET USEиз вашего кода. Обратите внимание, что ваша тестовая программа сообщает, что у нее есть Fи Rдоступ к \\R\EthRelease.

решение2

Я бы вообще не рассматривал использование локальной системной учетной записи для этой цели. Я бы рассмотрел запуск под учетной записью сетевой службы или управляемой учетной записью службы для предоставления этого доступа.

Если вы действительно хотите войти в систему под учетной записью локальной системы, чтобы проверить это, есть несколько способов открыть оболочку под учетной записью локальной системы.

Вы можете использоватьPSEXECнайдено вPSToolsи откройте интерактивный сеанс cmd под системной учетной записью:psexec -i -s cmd.exe

Или запустите запланированную задачу, запущенную от имени системной учетной записи ( at <time> /interactive cmd.exe)

Связанный контент