Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.046 c
15-1453239002
Юрий
2016-01-20 00:30
2017.01.15
С днем рождения ! 20 января 2016 среда


15-1453057828
Кто б сомневался
2016-01-17 22:10
2017.01.15
raise exception до Application.Run НЕ покажет сообщение.


15-1452503308
Копир
2016-01-11 12:08
2017.01.15
Убить программиста.


15-1448881398
Анна
2015-11-30 14:03
2017.01.15
имеет ли право начальство поставить программу считывания информ


15-1446924539
aka
2015-11-07 22:28
2017.01.15
как продавать свою программу через интернет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский