none
Alterar Senha - Administrador Local RRS feed

  • Pergunta

  • Boa Tarde a Todos!!!

    Este tópico é bastante conhecido neste grupo. Há pelo menos 5 topicos abertos falando sobre ele, porem, tenho uma particularidade e gostaria de discutir com vocês.

    Como todos do grupo, tenho a necessidade de alterar a senha do usuário administrador local, porem, com algumas regras.

    Preciso alterar a senha em determinados momentos, ou seja, não pode ser em lote. Como temos 99% do parque voltado para equipamentos da Dell, uma parte da senha vem do Service Tag da maquina ou seja, cada administrador local tem uma senha propria gerada no momento em que o script funciona.

    O Script está totalmente pronto e funcional, com alguns recursos interessantes como após a alteração, envia por e-mail um texto personalizado para os Administradores incluindo a nova senha. Tem até um modulo que gera um txt em um local da rede com esta informação.

    O unico problema é que o script só funciona quando rodo com um usuário com poderes administrativos. E como tenho equipamentos remotos que se conectam via VPN, em alguns momentos, fica complicado logar-se com um usuário administrativo.

    Tentei utilizar o runas mas não consegui executar um vbs.

    Será que há alguma solução para este problema?

     

    Abaixo, segue meu script (que pode ser util durante o processo de avaliação ou para alguem que queira usa-lo ou adapta-lo para outra necessidade).

    Inicio do Script.
    _______________________________________________________________________________

    '
    ' Script - Senha Administrador
    ' Criado por: Éric Albino dos Santos
    ' Data: 23/09/2008
    ' Hora: 22:45
    ' E-mail: eric.albino@melitta.com.br
    '



     

    '
    ' Dados Active Directory
    '
    '   Configuracao para buscar os dados no Active Directory

    Set objSysInfo = CreateObject("ADSystemInfo")
    strUser = objSysInfo.UserName

    Set objUser = GetObject("LDAP://" & strUser)

    strCompany = objUser.Company
    strName = objUser.FullName
    strFirstName = objuser.givenName
    StrLastName = objuser.sn
    strDepartment = objUser.Department
    strPhone = objUser.telephoneNumber
    strFax = objUser.facsimileTelephoneNumber
    strMail = objuser.mail
    strWeb = "Site da Empresa"
    strNomeArq = "Assinatura " & strFirstName
    strDescript = objUser.Description
    strMobile = objUser.Mobile



     

    Dim ServiceTag, NomeComputador, ServicePack, SistemaOperacional, SenhaAdministrador, Hora, Minuto

    '   Configuracao para buscar os dados no Active Directory

    'Set objSysInfo = CreateObject("ADSystemInfo")
    'strUser = objSysInfo.UserName

    'Set objUser = GetObject("LDAP://" & strUser)

    'strCompany = objUser.Company
    'strName = objUser.FullName
    'strFirstName = objuser.givenName
    'StrLastName = objuser.sn
    'strDepartment = objUser.Department
    'strPhone = objUser.telephoneNumber
    'strFax = objUser.facsimileTelephoneNumber
    'strMail = objuser.mail
    'strWeb = "Site"
    'strNomeArq = "Assinatura " & strFirstName
    'strDescript = objUser.Description
    'strMobile = objUser.Mobile



     


    ' Coletando o ServiceTag
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set colSMBIOS = objWMIService.ExecQuery _
        ("Select * from Win32_SystemEnclosure")

    For Each objSMBIOS in colSMBIOS
        'Wscript.Echo "Part Number: " & objSMBIOS.PartNumber
        'Wscript.Echo "Serial Number: " & objSMBIOS.SerialNumber
        'Wscript.Echo "Asset Tag: " & objSMBIOS.SMBIOSAssetTag
        ServiceTag = objSMBIOS.SerialNumber
    Next

    ' Coletando informações referente ao sistema operacional e nome do PC
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
     
    Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
    For Each objOS in colOSes
    '  Wscript.Echo "Computer Name: " & objOS.CSName
    '  Wscript.Echo "Caption: " & objOS.Caption 'Name
    '  Wscript.Echo "Version: " & objOS.Version 'Version & build
    '  Wscript.Echo "Build Number: " & objOS.BuildNumber 'Build
    '  Wscript.Echo "Build Type: " & objOS.BuildType
    '  Wscript.Echo "OS Type: " & objOS.OSType
    '  Wscript.Echo "Other Type Description: " & objOS.OtherTypeDescription
    '  WScript.Echo "Service Pack: " & objOS.ServicePackMajorVersion & "." & _
    '  objOS.ServicePackMinorVersion

    ' Campos para o e-mail

    NomeComputador = objOS.CSName
    SistemaOperacional = objOS.Caption
    ServicePack =objOS.ServicePackMajorVersion & "." & _
    objOS.ServicePackMinorVersion

    Next



     

    '
    '
    ' Data / Hora
    '
    '

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")
    For Each objItem in colItems
    '    Wscript.Echo "Year: " & objItem.Year
    '    Wscript.Echo "Month: " & objItem.Month
    '    Wscript.Echo "Day: " & objItem.Day
    '    Wscript.Echo "Hour: " & objItem.Hour
        Hora = objItem.Hour
    '    Wscript.Echo "Minute: " & objItem.Minute
        Minuto = objItem.Minute
    '    Wscript.Echo "Second: " & objItem.Second
    '    Wscript.Echo "Quarter: " & objItem.Quarter
    '    Wscript.Echo "Week in the Month: " & objItem.WeekInMonth
    '    Wscript.Echo "Day of the Week: " & objItem.DayOfWeek
    Next



     

    '
    '
    ' Senha Administrador Local
    '
    '

    SenhaAdministrador = NomeComputador & "@" & ServiceTag & "@" & Hora & Minuto
     
     WScript.Echo "Senha Alterada conforme Solicitado. E-mail será enviado aos Administradores"
    '
    '========================================================
    '
    ' Aplicando senha no Adm Local
    '
    '
    '=========================================================

    sNewPassword = SenhaAdministrador

    Set oWshNet = CreateObject("WScript.Network")
    sComputer = "."
    sAdminName = GetAdministratorName
    'WScript.Echo sAdminName

    On Error Resume Next
    Set oUser = GetObject("WinNT://" & sComputer & "/" & sAdminName & ",user")
    oUser.SetPassword sNewPassword
    oUser.SetInfo
    'wscript.echo "setado: " & sNewPassword
    On Error Goto 0


    Function GetAdministratorName()
        Dim sUserSID, oWshNetwork, oUserAccount

        Set oWshNetwork = CreateObject("WScript.Network")
        Set oUserAccounts = GetObject( _
             "winmgmts://" & oWshNetwork.ComputerName & "/root/cimv2") _
             .ExecQuery("Select Name, SID from Win32_UserAccount" _
           & " WHERE Domain = '" & oWshNetwork.ComputerName & "'")

        On Error Resume Next
        For Each oUserAccount In oUserAccounts
          If Left(oUserAccount.SID, 9) = "S-1-5-21-" And _
             Right(oUserAccount.SID, 4) = "-500" Then
            GetAdministratorName = oUserAccount.Name

     'wscript.echo oUserAccount.Name & ": " & oUserAccount.SID

            Exit For
          End if
        Next
    End Function

    '===========================================
    '
    ' Fim Senha
    '
    '===========================================





     

    ' Gravar dados em TXT

    'Set fs=CreateObject("Scripting.FileSystemObject")
    'Set fname=fs.CreateTextFile("CAMINHO PARA GRAVAR O TXT\" & NomeComputador & ".txt",true)
    ''fname.WriteLine("Hello World!")
    'fname.WriteLine(strName & "|" & NomeComputador & "|"& SistemaOperacional & "|"& ServicePack & "|"& ServiceTag)
    'fname.Close
    'set fname=nothing
    'set fs=nothing

    ' Enviando e-mail de notificação
    Set objEmail = CreateObject("CDO.Message")
    objEmail.From = strMail
    objEmail.To = "ENDEREÇO DE E-MAIL QUE RECEBERÁ A NOTIFICAÇÃO"
    objEmail.Subject = "Troca de Senha - Administrador Local " & strFirstName & " - " & strDepartment
    objEmail.TextBody = "O usuario " & strFirstName & " rodou o script de troca de senha do Administrador Local utilizando o e-mail " & strMail & " " & "::Nome do Computador:: "& NomeComputador & " " & "::Sistema Operacional:: "& SistemaOperacional & " " & "::Service Pack:: "& ServicePack & " " & "::Service Tag:: "& ServiceTag  & " " & "::Nome Administrador Local:: " & sAdminName & " " & "::Senha do Administrador Local:: " & SenhaAdministrador


    objEmail.Configuration.Fields.Item _
     ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objEmail.Configuration.Fields.Item _
     ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
    "IP_DO_SERVIDOR_DE_EMAIL"
    objEmail.Configuration.Fields.Item _
     ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objEmail.Configuration.Fields.Update
    objEmail.Send

    _____________________________________________________________________

    Fim do Script


    Éric
    sexta-feira, 13 de março de 2009 19:47

Respostas

  • Olá Eric,


    de forma simples: não dá. O sistema operacional possui usuários administradores e usuários comuns. Para alterar uma conta de administrador, somente sendo um administrador.

    Obviamente, existem meios de conseguir isso que você quer usando ferramentas como o LSRUNASE ou coisa do gênero. Elas criptografam a senha para que você possa usar dentro do script e conseguir elevar os privilégios de um usuário comum (durante o logon, por exemplo). Eu nem considero essa opção, já que isso abre uma *GRANDE* possibilidade para o usuário conseguir acesso ao administrador, o que vai furar toda sua lógica de "segurança".

    O que eu recomendo no seu caso: reveja se é realmente necessário alterar a senha de administrador sempre, e, nesse caso, altere as contas remotamente via WMI, que é o procedimento mais recomendado (vc deve ter me visto escrevendo sobre isso nos outros 5 posts, provavelmente =)

    Abraço e boa sorte!


    Vinicius Canto
    MVP Admin Frameworks
    http://viniciuscanto.blogspot.com

    Vinicius Canto MVP Admin Frameworks Blog: http://viniciuscanto.blogspot.com
    • Marcado como Resposta Éric Santos quinta-feira, 12 de maio de 2011 01:36
    segunda-feira, 16 de março de 2009 03:31
    Moderador

Todas as Respostas

  • Olá Eric,


    de forma simples: não dá. O sistema operacional possui usuários administradores e usuários comuns. Para alterar uma conta de administrador, somente sendo um administrador.

    Obviamente, existem meios de conseguir isso que você quer usando ferramentas como o LSRUNASE ou coisa do gênero. Elas criptografam a senha para que você possa usar dentro do script e conseguir elevar os privilégios de um usuário comum (durante o logon, por exemplo). Eu nem considero essa opção, já que isso abre uma *GRANDE* possibilidade para o usuário conseguir acesso ao administrador, o que vai furar toda sua lógica de "segurança".

    O que eu recomendo no seu caso: reveja se é realmente necessário alterar a senha de administrador sempre, e, nesse caso, altere as contas remotamente via WMI, que é o procedimento mais recomendado (vc deve ter me visto escrevendo sobre isso nos outros 5 posts, provavelmente =)

    Abraço e boa sorte!


    Vinicius Canto
    MVP Admin Frameworks
    http://viniciuscanto.blogspot.com

    Vinicius Canto MVP Admin Frameworks Blog: http://viniciuscanto.blogspot.com
    • Marcado como Resposta Éric Santos quinta-feira, 12 de maio de 2011 01:36
    segunda-feira, 16 de março de 2009 03:31
    Moderador
  •  o email é barbarazinha_binha@hotmail.com
    quinta-feira, 16 de setembro de 2010 21:55