Impersonate под 2000 не работает что ли ?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Impersonate под 2000 не работает что ли ?

Сообщение student-uni » 20.10.2005 (Чт) 0:08

Вот добросовестно списанный код Джонатана Эллиота /ниже/

запускаю - не работает

Прикольно что LogonUser возвращает 0
что как бы и правильно по МСДН,
но Элиот рассматривает это как ошибку !!!

Читаю МСДН - похожий код

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecurityprincipalwindowsidentityclassimpersonatetopic.asp

говорят что он не рабочий под 2000 в целях безопасности.

Вопрос:

люди помогите как выполнить часть программного кода с правами админа !!!

Я использовал CreateProcessWithLogon и для приложений это проходит,
но теперь мне надо использовать функцию /удалённый доступ/,
а прав нет.
Функции то CreateProcessWithLogon не ест.

Всем спасибо заранее

Код: Выделить всё
Imports System.Security.Principal
    Module Impersonation
    Dim LOGON32_LOGON_INTERACTIVE As Integer = 2
    Dim LOGON32_PROVIDER_DEFAULT As Integer = 0
    Dim moImpersonationContext As WindowsImpersonationContext
    Public Declare Auto Function LogonUser Lib "advapi32.dll" _
    (ByVal lpszUsername As String, _
    ByVal lpszDomain As String, _
    ByVal lpszPassword As String, _
    ByVal dwLogonType As Integer, _
    ByVal dwLogonProvider As Integer, _
    ByRef phToken As IntPtr) As Integer
    Public Declare Auto Function DuplicateToken Lib "advapi32.dll" _
    (ByVal ExistingTokenHandle As IntPtr, _
    ByVal ImpersonationLevel As Integer, _
    ByRef DuplicateTokenHandle As IntPtr) As Integer
    Public Function ImpersonateUser(ByVal userName As String, _
    ByVal domain As String, _
    ByVal password As String) As Boolean
    '------------------------------------------------
    'PURPOSE: Impersonate a prescribed user
    'INPUTS: username(str), domain (str), pwd(str)
    'OUTPUTS: Boolean
    'GLOBALS AFFECTED:
    'NOTES:
    'DEPENDENCIES:
    'EXAMPLE:
    'HISTORY:
    '8/21/2002 10:16:32 AM - Jon Elliott - Created
    '
    '------------------------------------------------
    Try
    '--START CODE
    Dim otempWindowsIdentity As WindowsIdentity
    Dim token As IntPtr
    Dim tokenDuplicate As IntPtr
    If LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, _
    LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
    If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then
    otempWindowsIdentity = New WindowsIdentity(tokenDuplicate)
    moImpersonationContext = otempWindowsIdentity.Impersonate()
    If moImpersonationContext Is Nothing Then
    ImpersonateUser = False
    Else
    ImpersonateUser = True
    End If
    Else
    ImpersonateUser = False
    End If
    Else
    ImpersonateUser = False
    End If
    Catch ex As Exception
    Throw New System.Exception("Error Occured in ImpersonateUser() : " & ex.ToString)
    End Try
    End Function
    Public Sub undoImpersonation()
    '------------------------------------------------
    'PURPOSE: Undo the impersonation
    'INPUTS: None
    'OUTPUTS: None
    'GLOBALS AFFECTED:
    'NOTES:
    'DEPENDENCIES:
    'EXAMPLE:
    'HISTORY:
    '8/21/2002 10:25:17 AM - Jon Elliott - Created
    '
    '------------------------------------------------
    Try
    moImpersonationContext.Undo()
    Catch ex As Exception
    Throw New System.Exception("Error Occured in undoImpersonation() : " & ex.ToString)
    End Try
    End Sub
    End Module


Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 20.10.2005 (Чт) 9:27

1 Имперсонализация по умолчанию разрешена только в службах
2 в .NET есть встроенные средства запуска от другой учётной записи.
В службах это(2) не пашет
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 20.10.2005 (Чт) 21:27

в .NET есть встроенные средства запуска от другой учётной записи.


в нет 2005 или 2003 ?

Ты мне давал под 2005.
кажется это:

Код: Выделить всё
Public Shared Function Start(ByVal fileName As String, ByVal arguments As String, ByVal userName As String, ByVal password As System.Security.SecureString, ByVal domain As String) As System.Diagnostics.Process
Member of: System.Diagnostics.Process


А Не подскажешь под 2003 бывает ?

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 20.10.2005 (Чт) 21:29

1 Имперсонализация по умолчанию разрешена только в службах


Не скажи,

под ХР Имперсонализация работает. Проверено.

А под вин 2000 надо изменить политику, т.к по умолчанию
уровень безопасности стоит выше.

Вот только как это сделать ?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 20.10.2005 (Чт) 22:16

В консоле локальной политики безопасности
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 20.10.2005 (Чт) 23:15

Завидую твоему умению давать исчерпывающие ответы на некорректно поставленные идиотские вопросы. :D

Я имел ввиду существуют ли в вб.нет 2003 средства чтоб изменить
локальную политику безопасности а нелазить туда руками ?

Читаю про токены. Пока ничего не понимаю.
Существует же способ получить привелегию для перезагрузки винды
Почему нельзя получить привелегию на имперсонализацию
Или это бред ?

Смотри что я нашёл
The user you are trying to impersonate must have the privilege 'Log on as a batch job'.
If you try to impersonate and do not have the correct privileges you will receive one of these errors:
A required privilege is not held by the client. (1314)


1314 - это моя ошибка под 2000 /под ХР всё работает/

Вопрос 3. что это за Log on as a batch job можно ли его из нета установить ?

и последнее:

Under Windows 2000
You will be able to impersonate if your Application Protection is set to Low.
If your Application Protection is set to Medium or High you will not be able to impersonate.


можно ли нет-ом установить этот Application Protection в это самое Low ?

Заранее благодарю

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.10.2005 (Чт) 23:28

student-uni писал(а):Я имел ввиду существуют ли в вб.нет 2003 средства чтоб изменить локальную политику безопасности а нелазить туда руками ?

Представь, что ты можешь изменить политику безопасности на любой машине. Нафига тогда она? :roll:

student-uni писал(а):Существует же способ получить привелегию для перезагрузки винды
Почему нельзя получить привелегию на имперсонализацию
Или это бред ?

Нет, просто привилегия на выключение изначально в токене есть, и ты её не получаешь, а включаешь (привилегии имеют статус включенности).
А привилегии на имперсонализацию в токене, получается, нет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 21.10.2005 (Пт) 23:40

Под ХР происходит странное дело,
ошибку не выдаёт,
Проверяю текущего пользователя - изменён на админа
/с помощью АПИ - ЛогонЮзер изменён/

оджнако запускать удалённое соединение /запрещённое/
тоже не даёт !!!

Такое впечатление что юзер то стал с именем Админ,
а прав больше не стало.

Беру свои слова обратно.

Прийдётся наверно писать сервис. :(


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 49

    TopList  
cron