Programar a expiração da senha para um horário específico

2

Existe uma maneira no Windows Server 2003 ou 2008 e no Active Directory, para especificar em uma diretiva que quando uma senha de usuário expira naquele dia, para que ela expire em um determinado momento, digamos, às 4h00.

A questão surgiu, porque a expiração ocorre durante o meio do dia de trabalho, digamos 9:00 da manhã. Então, quando um usuário já estiver conectado ao Windows na rede e usando aplicativos diferentes, eles começarão a se comportar incorretamente por causa da autenticação. Eles precisam fazer logout e login novamente, para que o Windows peça a nova senha.

Portanto, se eles fizerem logon no início da manhã, solicitarão a nova senha e não precisarão fazer o logout novamente durante o dia de trabalho.

Um dos administradores do AD disse: "Peça-lhes para verificar se a senha expirará antes de começar o dia" ... mas, na verdade, quem faz isso?

E eu não tenho acesso a um anúncio para verificar esses tipos de políticas. Então, isso é possível?

    
por elcool 04.02.2011 / 16:36

2 respostas

3

AFAIK isso não é possível.

Existem várias notificações de lembrete que podem ocorrer informando que a senha atual expirará em N dias e oferecendo a opção de alterá-la. Se o usuário optar por ignorar esse lembrete, ele estará, infelizmente, cavando seu próprio túmulo.

    
por 04.02.2011 / 16:51
1

Temos um problema semelhante.

A única maneira que posso pensar é executar um script todas as noites que passará pelo diretório ativo e identificará qual conta expirará no dia seguinte. Em caso afirmativo, sinalize-o para alterar a senha. O código seria algo como o seguinte; Eu não tentei executar este script, então talvez seja necessário fazer alguns ajustes:

Const SEC_IN_DAY = 86400 
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000 
Const ADS_SCOPE_SUBTREE = 1000

dim strname
dim strdist
dim dtmvalue

on error resume next


        Set objConnection = CreateObject("ADODB.Connection")
        Set objCommand =   CreateObject("ADODB.Command")
        objConnection.Provider = "ADsDSOObject"
        objConnection.Open "Active Directory Provider"
        Set objCommand.ActiveConnection = objConnection
        objCommand.Properties("Page Size") = 1000
        objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
        objCommand.CommandText = "SELECT distinguishedName, profilepath, name from 'LDAP://dc=Example,dc=com' where objectCategory = 'User'"        


     Set objuserRecordSet = objCommand.Execute

objUSerRecordSet.MoveFirst

Do Until objuserRecordSet.EOF  

    strdist = objuserRecordSet.Fields("distinguishedName").Value
    strname = objuserRecordSet.Fields("name").Value

    Set objUserLDAP = GetObject _ 
    ("LDAP://" & strdist) 

    intCurrentValue = objUserLDAP.Get("userAccountControl") 

        dtmValue = objUserLDAP.PasswordLastChanged  

        If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then 
            x  =  "The password does not expire." 
        Else 
                Set objDomainNT = GetObject("WinNT://escc.gov.uk") 
                intMaxPwdAge = objDomainNT.Get("MaxPasswordAge") 
                    If intMaxPwdAge < 0 Then 
                        x  = "Password does not expire" 
                    Else
                        intMaxPwdAge=intMaxPwdAge/86400
                        strold = ((dtmValue + intMaxPwdAge)-now)

                        if strold < 2 and strold > 0 then
                            objUserLDAP.pwdLastSet = 0
                            objUserLDAP.SetInfo
                        end if
                    end if

        End If 

    dtmValue= ""

    objuserrecordset.movenext   

Loop
    
por 01.04.2011 / 14:37