Служба не видит сетевые диски

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Служба не видит сетевые диски

Сообщение aleksmir » 13.06.2013 (Чт) 5:10

Здравствуйте!
Написал небольшую программу на VB6, она обращается к некоторым файлам в локальной сети.
Если работает в обычном режиме - то все ОК.
Но когда запускаю её в качестве службы, то не видит сетевые диски. Выдает ошибку "Файл не найден".
Эта ошибка происходит для любых команд VB, работающих с файлами "Dir", "OPEN" и т.д.
Может кто-то сталкивался с такой проблемой?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.06.2013 (Чт) 6:58

aleksmir писал(а):Эта ошибка происходит для любых команд VB, работающих с файлами "Dir", "OPEN" и т.д.

Именно с сетевыми дисками или всегда?
Если первое, то возможно что сеть ещё недоступна в момент запуска.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Служба не видит сетевые диски

Сообщение alibek » 13.06.2013 (Чт) 8:17

aleksmir писал(а):Но когда запускаю её в качестве службы, то не видит сетевые диски.

Сетевые диски принадлежат учетной записи, а не компьютеру.
Служба работает под своей учетной записью.
Используй для службы учетную запись, которая разрешает сетевой доступ (NETWORK_SERVICE). Используй не буквы дисков, а сетевой путь UNC.
Lasciate ogni speranza, voi ch'entrate.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.06.2013 (Чт) 8:26

alibek писал(а):Служба работает под своей учетной записью.

Можно настроить запуск службы и от имени конкретного пользователя.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re:

Сообщение aleksmir » 13.06.2013 (Чт) 9:34

Qwertiy писал(а):Именно с сетевыми дисками или всегда? Если первое, то возможно что сеть ещё недоступна в момент запуска. Можно настроить запуск службы и от имени конкретного пользователя.

alibek писал(а):Сетевые диски принадлежат учетной записи, а не компьютеру. Служба работает под своей учетной записью. Используй для службы учетную запись, которая разрешает сетевой доступ (NETWORK_SERVICE). Используй не буквы дисков, а сетевой путь UNC.


Спасибо! Попробую ваши рекомендации!
Пока более подробно опишу ситуацию:
Операционная система Windows Server 2003. Захожу под учетной записью Administrator. Запускаю свою программу вручную (не служба). Программа выполняет простейшую операцию - копирует файл с другого сервера на локальный диск. Обращается к другому серверу по IP-адресу, т.е. так: \\192.168.46.8\Путь\Файл.exp
В общем если запускаю не как службу - отлично работает. Тут же не выходя из Administratora запускаю как службу - не работает, выдает, что путь \\192.168.46.8\Путь\Файл.exp не найден.

Qwertiy писал(а):Именно с сетевыми дисками или всегда?

Только с сетевыми дисками. Если копирование с локального на локальный диск, то программа в режиме службы это копирование выполняет отлично.
alibek писал(а):Сетевые диски принадлежат учетной записи, а не компьютеру

Я может неправильно выразился... не с сетевыми дисками (в виде букв), а с расшаренными сетевыми дисками другого компьютера, к которым обращаюсь по IP: \\192.168.46.8\Путь\Файл.exp. Хотя пробовал подключать сетевые диски через букву диска и обращаться к ним как к дискам - не работает тоже.

Попробую два варианта:
1. Поэкпериментировать с учетной записью.
2. Посмотрю свойства у службы встроенного Планировщика событий Windows. Она то уж точно работает с сетевыми дисками (проверил).

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.06.2013 (Чт) 10:38

aleksmir писал(а):Попробую два варианта:
1. Поэкпериментировать с учетной записью.
2. Посмотрю свойства у службы встроенного Планировщика событий Windows. Она то уж точно работает с сетевыми дисками (проверил).

Обращение из службы по сетевому пути возможно. Правда не проверял на VB6, но не вижу причин по которым именно в нём с этим могут возникнуть какие-либо проблемы.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re:

Сообщение aleksmir » 13.06.2013 (Чт) 10:46

Qwertiy писал(а):Обращение из службы по сетевому пути возможно. Правда не проверял на VB6, но не вижу причин по которым именно в нём с этим могут возникнуть какие-либо проблемы.

Да, тоже думаю что не в VB дело. Что-то в свойствах самой службы.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Служба не видит сетевые диски

Сообщение aleksmir » 13.06.2013 (Чт) 11:54

Ура!!!) В свойствах службы поставил "Вход с учетной записью Administrator". Заработало!)
P.S.: вход с учетной записью NETWORK_SERVICE пробывал, программа даже не запустилась.
Так же пробывал поставить, что моя служба зависит от службы "Рабочая станция". Тоже не помогло. Программа запускалась, но копирование файла по сети также выдавало ошибку.

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

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.06.2013 (Чт) 11:58

aleksmir писал(а):Теперь осталось научить программу автоматически при создании службы указывать ей имя пользователя.

Код: Выделить всё
sc create "Имя службы" binPath= "Q:\Путь\К\Exe\файлу.exe" DisplayName= "Отображаемое имя" start= auto obj= Логин password= Пароль

Обращаю внимание на наличие пробела после знака равенства.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re:

Сообщение aleksmir » 13.06.2013 (Чт) 12:00

Qwertiy писал(а):
aleksmir писал(а):Теперь осталось научить программу автоматически при создании службы указывать ей имя пользователя.

Код: Выделить всё
sc create "Имя службы" binPath= "Q:\Путь\К\Exe\файлу.exe" DisplayName= "Отображаемое имя" start= auto obj= Логин password= Пароль

Обращаю внимание на наличие пробела после знака равенства.


Спасибо!)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Служба не видит сетевые диски

Сообщение alibek » 13.06.2013 (Чт) 12:49

aleksmir писал(а):В свойствах службы поставил "Вход с учетной записью Administrator".

Это глупо. Не говоря уж о том, что это огромная дыра в безопасности.
Lasciate ogni speranza, voi ch'entrate.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.06.2013 (Чт) 12:55

alibek писал(а):Это глупо. Не говоря уж о том, что это огромная дыра в безопасности.

А обосновать можешь? Куче служб нужна админская учётка для работы. Некоторые программы для этого вообще свою собственную учётку заводят и под ней работают. Учётка SYSTEM предоставляет те же права, если не большие. И в чём конкретно дыра-то?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Служба не видит сетевые диски

Сообщение alibek » 13.06.2013 (Чт) 13:28

Найди хоть одну службу, которая бы работала под учетной записью администратора.
Lasciate ogni speranza, voi ch'entrate.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.06.2013 (Чт) 13:43

alibek писал(а):Найди хоть одну службу, которая бы работала под учетной записью администратора.

Ты сейчас имеешь в виду стандартную админскую учётку или просто пользователя с админскими правами?
И всё-таки ответь на вопрос, в чём конкретно дыра?

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Служба не видит сетевые диски

Сообщение aleksmir » 13.06.2013 (Чт) 13:53

alibek писал(а):Это глупо. Не говоря уж о том, что это огромная дыра в безопасности.

Как тогда по-другому?
Под пользователем LOCAL_SERVICE служба не видит сетевые ресурсы, под пользователем NETWORK_SERVICE вообще не работает.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.06.2013 (Чт) 13:56

Более половины служб работают под Local System. Насколько я понимаю, это самые высокие права...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Служба не видит сетевые диски

Сообщение alibek » 13.06.2013 (Чт) 14:08

Qwertiy писал(а):Почти все службы работают под Local System. Насколько я понимаю, это самые высокие права...

Неверно.
Основная часть служб работает под локальной системной учетной записью. Это высокий уровень доступа, но только на локальную машину. У этой учетной записи нет доступа к удаленным рабочим станциям. И если вдруг служба будет скомпрометирована (злоумышленник получит возможность работать от имени этой службы), то его зона действия будет ограничена этой машиной.
Если же служба работает под учетной записью, имеющей администраторские права, позволяющие подключаться к удаленным рабочим станциям, то и зона действия будет расширена соответствующим образом.
Глупее будет только запускать службу от имени администратора домена (если используется сеть на основе домена).

aleksmir писал(а):под пользователем NETWORK_SERVICE вообще не работает.

Это повод не давать сразу максимальный доступ, а разобраться, почему не работает (скорее всего нужно дать файловые разрешения на каталог и файлы для этой учетной записи).
Lasciate ogni speranza, voi ch'entrate.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re:

Сообщение aleksmir » 13.06.2013 (Чт) 14:10

Qwertiy писал(а):Более половины служб работают под Local System. Насколько я понимаю, это самые высокие права...

Под LocalSystem не видит сетевые ресурсы.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.06.2013 (Чт) 14:51

alibek писал(а):И если вдруг служба будет скомпрометирована (злоумышленник получит возможность работать от имени этой службы), то его зона действия будет ограничена этой машиной.

Хм.. А каким образом он получит такую возможность? Это ведь должно означать, что либо служба предоставляет соответствующий дырявый API, либо что у него уже есть достаточные права на этой машине. Так?

alibek писал(а):Если же служба работает под учетной записью, имеющей администраторские права, позволяющие подключаться к удаленным рабочим станциям, то и зона действия будет расширена соответствующим образом.

Стоп. Локальный админ ведь на других машинах админом не будет. В чём тогда вред?

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Служба не видит сетевые диски

Сообщение aleksmir » 13.06.2013 (Чт) 15:03

В общем программно так и не смог создать службу с конкретным пользователем.
Пробовал так:
Код: Выделить всё
instsrv servicename "path" -a UserName -p Password

и так
Код: Выделить всё
sc create servicename binPath= "path" obj= UserName password= Password


В обоих случаях пишет что нет такого пользователя в системе. Имя пользователя Administrator, пароль проверил на 1000 раз и в кавычках его писал и по всякому. Пишет одно и тоже.

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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re:

Сообщение alibek » 13.06.2013 (Чт) 15:20

Qwertiy писал(а):А каким образом он получит такую возможность?

Обыкновенным, используя ошибки и уязвимости в программе. Которые всегда есть.

Qwertiy писал(а):Стоп. Локальный админ ведь на других машинах админом не будет. В чём тогда вред?

Судя по тому, что топикстартер заходит на удаленные машины с помощью своей локальной учетной записи, на всех машинах используется администратор с одинаковым логином и паролем. Иначе бы у него программа и в интерактивном режиме не работала.
Lasciate ogni speranza, voi ch'entrate.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.06.2013 (Пт) 8:15

alibek писал(а):Найди хоть одну службу, которая бы работала под учетной записью администратора.

Пожалуйста. Ocster 1-Click Backup работает под этим:
Код: Выделить всё
C:\Windows\system32>net user _ocster_1clk_backup_
Имя пользователя                       _ocster_1clk_backup_
Полное имя                             Special account for Ocster 1-Click Backup
Комментарий
Комментарий пользователя
Код страны                             000 (Стандартный системный)
Учетная запись активна                 Yes
Учетная запись просрочена              Никогда

Последний пароль задан                 07.12.2012 08:52:42
Действие пароля завершается            Никогда
Пароль допускает изменение             07.12.2012 08:52:42
Требуется пароль                       Yes
Пользователь может изменить пароль     Yes

Разрешенные рабочие станции            Все
Сценарий входа
Конфигурация пользователя
Основной каталог
Последний вход                         22.04.2013 21:33:02

Разрешенные часы входа                 Все

Членство в локальных группах           *Администраторы
Членство в глобальных группах          *None
Команда выполнена успешно.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re:

Сообщение alibek » 14.06.2013 (Пт) 9:00

Qwertiy писал(а):Пожалуйста. Ocster 1-Click Backup работает под этим:

Это повод так не делать.
В *nix это типичный подход — запускать демон под отдельной учетной записью.
В Windows идеология должна быть другой, учетные записи пользователей должны соответствовать людям, а службы должны запускаться под встроенными учетными записями, при необходимости осуществляя элевацию прав.
Есть некоторые исключения (например учетная запись IIS или support), но для себя в 99% нужно уяснить правило «мой случай не относится к такому исключению».
Lasciate ogni speranza, voi ch'entrate.

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Служба не видит сетевые диски

Сообщение aleksmir » 15.06.2013 (Сб) 8:45

Ну в общем вместо службы пришлось использовать планировщик. Как туда добавить задание с помощью API-заморачиваться не стал, т.к. всё равно программа не на продажу, а для внутренних нужд. Планировщик всегда при создании задания запрашивает имя и пароль и программа, запущенная планировщиком без входа в систему, видит сетевые ресурсы.

Службы, ранее созданные с учетной записью "Администратор" теперь не удаляются, а почему то помечаются на удаление и после пометки на удаление создаваться под теми же именами не хотят. Сервер перезагружать из-за этого не хочется. Единственный вариант оставался использовать планировщик вместо служб.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 15.06.2013 (Сб) 16:32

aleksmir писал(а):Службы, ранее созданные с учетной записью "Администратор" теперь не удаляются, а почему то помечаются на удаление и после пометки на удаление создаваться под теми же именами не хотят.

Потому что перед тем как удалять, их надо было остановить. Остановленную службу удалить можно, а запущенная помечается для удаления и удаляется только вместе с перезагрузкой.

aleksmir писал(а):Сервер перезагружать из-за этого не хочется.

Теперь придётся.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 30

    TopList