Plik wykonywalny uruchomiony przez usługę windows przy użyciu lokalnego konta systemowego nie może uzyskać dostępu do udziałów sieciowych

Mam plik wykonywalny uruchamiany przez usługę windows, program ten będzie uruchamiany na komputerze klienta i będzie musiał połączyć się ze zdalnym udziałem, aby wykonać określone zadanie. Udział ten jest określony przez Klienta za pośrednictwem interfejsu użytkownika, więc nie wiemy tego z góry, co oznacza, że nie może być "zakodowany na twardo" lub udział zmapowany z góry.

Wcześniej wymagaliśmy od klienta zalogowania się na swoją maszynę i uruchomienia pliku wykonywalnego podczas logowania, ale zawsze chcieliśmy, aby nasz program działa w ramach usługi i nie wymaga logowania, przede wszystkim po to, aby ułatwić klientowi i zapobiec przypadkowemu wylogowaniu z naszego oprogramowania. Oznacza to również, że nie wiemy, jakie lokalne konta użytkowników istnieją na komputerze klienta, więc musimy uruchomić usługę za pomocą lokalnego konta systemowego.

Mamy teraz, jak wspomniano powyżej, usługę wrappera do uruchamiania programu wykonywalnego i wykonywania różnych zadań. Wydaje się, że w większości przypadków działa to dobrze i uzyskuje dostęp do sieci bazowej fine - celem naszego oprogramowania jest głównie przechwytywanie pakietów itp.

Jednak, gdy oprogramowanie próbuje połączyć się z udostępnieniem systemu windows (NAZWA UNC), nie może się połączyć. Natomiast jeśli plik wykonywalny został uruchomiony ręcznie, łączy się z nim fine.

Sugestie, które ogólnie widziałem, aby rozwiązać tego rodzaju problemy, wydają się wszystkim mówić użyj konta użytkownika, ponieważ konto systemowe nie może uzyskać dostępu do udziałów sieciowych, ale w naszym przypadku nie jest to możliwe. Czy jest jakiś inny sposób, żeby to zrobić? praca?

Edit: zapomniałem wspomnieć, że ta aplikacja może (i najczęściej będzie) działać na Win2K a nie XP, i chyba mam rację mówiąc, że konto sieci lokalnej nie jest dostępne przed XP?

Author: Adam Cobb, 2008-10-30

3 answers

Jeśli możesz zmienić usługę windows tak, aby działała pod kontem usługi sieciowej, wtedy Twój plik wykonywalny będzie mógł uzyskać dostęp do udziałów sieciowych (jest to jeden z powodów, dla których konto usługi sieciowej zostało utworzone).

Lokalny system i lokalne konta usług nie mają żadnych poświadczeń sieciowych, a zatem nie mogą być uwierzytelnione w sieci. To z założenia.

Edit: IIRC, konto usługi sieciowej zostało wprowadzone w Server 2003 i dodane do jednego z XP service Pack.

Jeśli nie możesz polegać na tym, że konto usługi sieciowej jest dostępne, możesz rozważyć utworzenie dedykowanego konta domeny, przechowywanie danych uwierzytelniających konta, odczytywanie ich z poziomu usługi, a następnie zalogowanie się i podszywanie się pod tego użytkownika przed uzyskaniem dostępu do udziału sieciowego. Alternatywnie usługa windows może działać bezpośrednio jako dedykowane konto, w takim przypadku wymagałaby przywileju "logon jako usługa".

 6
Author: Paul Lalonde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-30 12:51:26

Jeśli masz usługę działającą pod kontrolą NT AUTHORITY\LOCALSYSTEM (która jest nazwą konta usługi), jest ona wyświetlana jako nazwa domeny\COMPUTERNAME$ (zwróć uwagę na znak$) dla reszty sieci. Oznacza to, że pojawia się jako konto komputera w usłudze Active directory. Po prostu przyznaj swoje uprawnienia do pliku i udostępniania DOMAINNAME\COMPUTERNAME$ i powinieneś być dobry.

 5
Author: Dave Markle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-30 11:57:46

Dlaczego nie możesz użyć innego konta? W systemie Windows wbudowane jest konto usługi sieciowej, specjalnie dla usług wymagających dostępu do sieci.

W każdym razie, bądź bardzo ostrożny, gdy usługa uruchamia exe.

Jeśli dostęp do zapisu do folderu z exe nie jest wyłączony, użytkownik może zastąpić ten exe (na przykład) cmd.exe. Następnym razem, gdy usługa spróbuje uruchomić twój exe, voilà: powłoka poleceń z prawami systemowymi!

 0
Author: Treb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-30 12:05:38