Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизНе работает доступ к WebDAV диску из-под сервиса Найти похожие ветки
← →
Дмитрий Белькевич © (2016-02-02 18:04) [0]Добрый всем день. Подключаю диск WebDAV к системе (Win 10, без домена, в домашней сети, WebDAV сервисы - яндекс диск или box.com).
В проводнике, фаре и т п. всё работает нормально - как будто с обычным локальным диском.
Пробую достучаться к диску из-под сервиса Windows (службы) Win возвращает ERROR_PATH_NOT_FOUND и ничего не работает.
Сервис запускается из-под админского аккаунта, проверял по диспетчеру задач. Насколько мне известно, то из-под system"а нет доступа до сетевых дисков.
← →
Игорь Шевченко © (2016-02-02 18:28) [1]Возможно, сервис запускается раньше, чем подключается диск
← →
Дмитрий Белькевич © (2016-02-02 18:56) [2]Нет - руками подключаю диск, потом стартую сервис. Сервис запускается из-под записи admin, он администратор. Может какие-то особенные разрешения нужны? Насколько я помню, то особенно права не трогал в винде, но мало ли...
← →
Eraser © (2016-02-02 21:08) [3]не совсем понятно, что за WebDAV диск, могу предположить, что, скорее всего, его подключение схоже с подключением сетевых дисков. соответственно, он виден только тому пользователю, который его подключил. чтобы увидеть его из службы нужно потоку сделать impersonation того пользователя, под которым подключен диск, прав у службы хватит.
← →
Eraser © (2016-02-02 21:09) [4]
> Сервис запускается из-под админского аккаунта
он скорее всего elevated, а нужно НЕ elevated.
← →
Eraser © (2016-02-02 21:09) [5]
> Сервис запускается из-под админского аккаунта
извращение.
← →
Дмитрий Белькевич © (2016-02-02 22:35) [6]
> что за WebDAV диск
http://inet-boom.ru/webdav-v-yandex-microsoft-i-google/
> соответственно, он виден только тому пользователю, который
> его подключил
залогинен admin, он его подключил, из-под него же запускается сервис.
> извращение
лучше, я так понимаю, специального юзера для этого выделять? вообще, то админ - у меня на рабочем буке, это не реальная установка.
спасибо всем за ответы, может быть удастся концы найти :)
← →
Eraser © (2016-02-03 00:22) [7]
> Дмитрий Белькевич © (02.02.16 22:35) [6]
>
смотрю на список системных служб и не вижу ни одной, запущенной от админа или кого-то еще, кроме системы и сетевой службы. смысл запускать сервис от учетки пользователя? для этих целей есть обычные приложения.
может я не правильно понимаю фразу?
> из-под него же запускается
← →
Eraser © (2016-02-03 00:24) [8]
> Дмитрий Белькевич © (02.02.16 22:35) [6]
>
> > что за WebDAV диск
>
>
> http://inet-boom.ru/webdav-v-yandex-microsoft-i-google/
ну да, судя по скриншоту - сетевые диски, см. [3].
class function TImpersonateUtils.ImpersonateSessionUser(
ASessionId: Cardinal): Boolean;
var
hToken: THandle;
begin
Result := False;
hToken := 0;
if not WTSQueryUserToken(ASessionId, hToken) then
begin
OutputDebugString(PChar("Error WTSQueryUserToken #" + IntToStr(GetLastError)));
Exit;
end;
try
if not ImpersonateLoggedOnUser(hToken) then
begin
OutputDebugString(PChar("Error ImpersonateLoggedOnUser #" + IntToStr(GetLastError)));
Exit;
end;
Result := True;
finally
if hToken <> 0 then
CloseHandle(hToken);
end;
end;
← →
Дмитрий Белькевич © (2016-02-03 02:10) [9]WTSQueryUserToken возвращает 1314: Клиент не обладает требуемыми правами.
← →
Дмитрий Белькевич © (2016-02-03 02:17) [10]как из-под admin, так и из-под NETWORK SERVICES.
вызываю ImpersonateSessionUser(0) и ImpersonateSessionUser(2) ("admin" у меня во второй сессии, посмотрел WTSEnumerateSessions). результат всегда один - 1314.
← →
Eraser © (2016-02-03 02:26) [11]
> Дмитрий Белькевич © (03.02.16 02:17) [10]
> как из-под admin, так и из-под NETWORK SERVICES.
зачем нужна служба, работающая от имени пользователя?
← →
Дмитрий Белькевич © (2016-02-03 10:04) [12]
> зачем нужна служба, работающая от имени пользователя?
Вот как раз - нужен доступ до сетевых данных, как до "обычных" через Microsoft Network, так (уже) и вот таких - WebDAV. Пока что другим способом, кроме как с помощью работы от имени пользователя, добиться доступа до расшаренных по сети ресурсов не удалось. Насколько я помню - то и NETWORK SERVICES я тоже пробовал с отрицательным результатом. При этом доступа к подключенным буквам не удавалось добиться, в том числе и из сети MS. Прямые ссылки ("\\server3\test\123.bin") работают из-под пользователей нормально. Посмотрел на свои WebDAV диски под сервисом - то GetDriveType и GetVolumeInformation их не видит.
Возможно, что как раз impersonation не хватает, для того, что бы увидеть "сетевые буквы" под сервисом.
С локальными ресурсами всё вполне успешно работает просто под System.
← →
Дмитрий Белькевич © (2016-02-03 10:23) [13]попробовал код отсюда:
http://www.michael-puff.de/Programmierung/Delphi/Code-Snippets/Impersonate.shtml
код успешно выполнился: Impersonate(GetCurrUserName, "pass"), однако - доступа до WebDAV дисков не появилось.
← →
Дмитрий Белькевич © (2016-02-03 10:24) [14]под admin"ом.
← →
Eraser © (2016-02-03 10:55) [15]
> Дмитрий Белькевич © (03.02.16 10:04) [12]
>
я написал выше, даже код привел, как можно из System
> добиться доступа до расшаренных по сети ресурсов
а вот из сервиса, запущенного под ограниченной NETWORK SERVICES, или вообще непонятной учеткой это сделать нельзя, разрешений не хватит.
← →
Дмитрий Белькевич © (2016-02-03 11:31) [16]Ок, спасибо. Из-под system успешно ImpersonateSessionUser успешно прошел, когда вызвал его с id = 2 (то есть - admin).
Еще вопрос - на какой Session Id делать impersonate до логина пользователя (логина может вообще не быть)?
← →
Дмитрий Белькевич © (2016-02-03 11:58) [17]
> логина может вообще не быть
Впрочем, как и "букв". Поможет ли ImpersonateSessionUser при прямом доступе к сети, как я выше писал - к "\\server3\test\..."? При запуске из-под system без логина?
← →
Eraser © (2016-02-03 13:41) [18]
> Дмитрий Белькевич © (03.02.16 11:31) [16]
> Еще вопрос - на какой Session Id делать impersonate до логина
> пользователя (логина может вообще не быть)?
думаю что никак, до логона юзера никаких сетевых дисков еще не существует.
← →
Дмитрий Белькевич © (2016-02-03 16:14) [19]то есть - сервис без логина для доступа к данным из сети нужно всё таки из-под юзера запускать?
← →
Eraser © (2016-02-03 17:08) [20]
> Дмитрий Белькевич © (03.02.16 16:14) [19]
из сервиса можно делать логон нужного юзера, например, через LogonUser/LogonUserEx, и в его контексте получать доступ к сетевым дискам.
← →
Дмитрий Белькевич © (2016-02-03 23:29) [21]угу, пароли только где хранить :)
← →
Eraser © (2016-02-03 23:58) [22]
> Дмитрий Белькевич © (03.02.16 23:29) [21]
можно там же, где их хранит винда, при указании юзера через оснастку сервисов.
← →
Дмитрий Белькевич © (2016-02-05 18:46) [23]я так понимаю - что имперсонализация работает в пределах потока? грустно, придется кучу мест править...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.056 c