Почему учетная запись «Локальная система» не имеет прав доступа к файловой системе NTFS (при запуске java в качестве службы Windows) - PullRequest
4 голосов
/ 29 декабря 2010

У меня проблема с запуском Java-процесса в качестве службы Windows из-за разрешений NTFS.(http://community.jboss.org/wiki/RunJBossAsAServiceOnWindows).

Служба успешно устанавливается, но возникают проблемы с запуском из-за прав доступа к файлу.

  • Если я изменю «login» windows-службы на мою учетную запись (например, домен / логин),служба работает нормально.
  • Если я изменяю разрешения файловой системы с 755 на 777, служба работает нормально.

Пример журнала

08:58:02,250 ERROR [MainDeployer] Could not make local copy for file:/J:/projects/devtools/pe64-jboss-4.2.2.GA/server/solr/conf/jboss-service.xml
java.io.IOException: Access is denied
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)

"Yo No Comprende". Я думал, что учетная запись "Local System" была "root". ("Local System" - учетная запись по умолчанию)

«chmod -R 777 <>» не является опцией. (дыра в безопасности)

Итак, подведем итог:

  • Что такое «Локальная система»"и права доступа к файлам Windows NTFS?
  • Можете ли вы добавить" Локальная система "в" Моя группа "
  • Что-то не так в моем локальном процессе сборки (например, неверная версия UMask для Windows?)
  • Любые другие ошибки, работающие с Java в качестве службы Windows?
  • После 15 с лишним лет существования ОС на базе Windows NT, почему службы все еще такиеболь?

Обновление / Решение

Оказывается, что в более поздних версиях Windows (Vista и Window 7) MSFT закрыла дыру в безопасности, которая позволяла сервисудобраться до чьих-либо временных файлов.

У учетной записи «Local System» просто нет доступа ни к одному общему / предварительно созданному каталогу «temp».

Решение в мире java:

  • создайте свой собственный временный каталог.Предоставьте ему соответствующие разрешения)
  • pass "-Djava.io.tmpdir = / path / to / my / temp / dir" в качестве аргумента jvm.

спасибо

будет

Ответы [ 3 ]

2 голосов
/ 29 декабря 2010

NTFS-разрешения работают немного иначе, чем Ext2 / 3/4-разрешения.

В частности, файловой системе не важно, являетесь ли вы администратором или нет ... если у вашего SID нет разрешения Create Files или одного из других мета-разрешений включив его (т. е. Write) в каталог, вы не можете создать новый файл или скопировать файл из другого каталога в указанную папку.

То, что он дает вам, - это разрешение на изменение разрешений для любой папки.

2 голосов
/ 29 декабря 2010

«Локальная система» не совсем root.Ему могут быть запрещены (или не предоставлены) разрешения, как и любому другому пользователю, и Windows будет применять эти разрешения.(Хотя вам лучше знать, что вы делаете, прежде чем сделать это - блокировка неправильных материалов может сделать вашу систему непригодной для использования.) Иногда, часто, когда вы копируете материал из привилегированного местоположения (например, с вашего рабочего стола или чего-то такого)Windows отключит «наследовать разрешения» для этой папки, и учетная запись не получит разрешения, которые она обычно наследует от корня.

Убедитесь, что папка предоставляет локальной учетной записи разрешение на добавлениефайлы в папку, где он хочет создать этот файл.Что касается того, как ты это сделаешь с Cygwin ... я не уверен.Есть ли что-то похожее на команду Linux setfacl ?

1 голос
/ 29 декабря 2010

Я бы не использовал Cygwin для этого.Вместо этого я использую комбинацию cacls и ntrights (из набора ресурсов XP - все еще работает в 2008 / win 7).Единственная проблема заключается в том, что вы должны запустить Ant от имени администратора.Это означает, что вам нужно либо убедиться, что вы запускаете командную строку уровня администратора, либо ваш установщик должен повысить ее.что я не мог заставить cacls работать с отдельными аргументами.Я должен был указать всю строку.Также обратите внимание на экранирование кавычек для обработки каталогов с пробелами (например, Program Files).

...