Заметки IT Менеджера

05.03.2013

Решение проблем с истекающими паролями у пользователей


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

Чтобы максимально минимизировать эту проблему нужно сделать две вещи:

  1. Добавить еще один способ уведомления пользователя, по электронной почте. Причем само уведомление должно включать в себя инструкции по смене пароля
  2. Давать отчет администраторам о пользователях у которых пароль уже истек или истечет в ближайшее время. Зачастую это помогает понять источник проблем у пользователя или предотвратить их.

 

Итак, скрипт, который рассылает уведомления пользователям

#Отсылка предупреждений пользователям, у которых срок действия пароля истекает в ближайшее время 
#Автор оригинального скрипта: http://community.spiceworks.com/scripts/show/974-email-users-passwords-are-expiring
#Автор изменений itpadla.wordpress.com
#Дата создания 20.02.2013
#Дата изменения: 20.02.2013
#Описание: скрипт для отсылка предупреждений пользователям, у которых срок действия пароля истекает в ближайшее время
#Изменен оригинальный текст, отсылаемый пользователям, сам он теперь берется не из файла, а из переменной
#Добавлены доп. поля в тему сообщения. Само сообщение теперь имеет выставленную важность и корректно отображается кириллицей
#Внимание! Скрипт требует установленных PowerShell Commands for Active Directory (http://www.quest.com/powershell/activeroles-server.aspx)
#####################################################################################
$Body = @"

Прежде чем изменять пароль, убедитесь, что:
1.Компьютер с которого вы входите входит в домен
2.Вы находитесь в офисе и подключены к сети

Если это так, то для изменения своего пароля в Windows:

1. Нажмите комбинацию Ctrl + Alt + Del
2. Выберите опцию Change Password
3. Введите свой старый пароль и два раза новый пароль в соответствующие поля

Если вы работаете за Macintosh, за личным компьютером или находитесь вне офиса, то существует возможность удаленной смены пароля через webmail.
Внимание! Никогда не делайте этого на публичных, чужих компьютерах, компьютерах без антивирусов или компьютерах с устаревшими антивирусными базами.

1. Перейдите по ссылке https://webmail.domain.ua
2. Зайдите под своим текущим логином паролем
3. Нажмите кнопку "Параметры" в правом верхнем углу
4. Перейдите в меню "Изменение пароля" (находится в левой части экрана)
5. Введите свой старый пароль и два раза новый пароль в соответствующие поля

   
    Требования к паролю

1.    Длина пароля 8 и более символов.
2.    Пароль должен обязательно содержать не менее трех из четырех наборов:
a. большие буквы
b. маленькие буквы
c. цифры
d. спецсимволы или знаки препинания типа !@#$%^&*()_+|,./<>?

3.    Пароль НЕ ДОЛЖЕН СОДЕРЖАТЬ login, имя, фамилию, домашний телефон, дату рождения вас или ваших близких, а также любое другое слово, связанное с вами, в том числе такое слово, записанное в обратном порядке
4.    Этот пароль не может быть тем, что вы использовали на предыдущих работах, дома, где-либо в интернет и т.д.
5.    Пароль нельзя записывать (в том числе и временно), только запоминать, нельзя сообщать кому-либо, включая IT отдел и собственное руководство, даже временно!
6.    Если кто-либо узнал ваш пароль, то вы должны немедленно уведомить об этом IT отдел и сменить пароль!!!

Хотя на первый взгляд это кажется сложным, на самом деле все не так сложно. Вот приемы, которые позволят это сделать без проблем:

1. взять какую-нибудь фразу, например поговорку, и использовать первые 1-2 буквы слов
2. смотреть на русские буквы не переключая раскладку, т.о. набирая слово Наполеон ты получишь Yfgjktjy
3. Добавить в самое начало или в конец большую букву
4. Добавить цифру или цифры
5. Какую-либо из букв, например S заменить на $ или a заменить на @, или I заменить на |. Еще проще использовать дефис в слове.

"@

If ($host.Version.Major -lt 3) {Add-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue}
  Else {Add-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction Ignore}

$MaxPassAge = (Get-QADObject (Get-QADRootDSE).defaultNamingContextDN).MaximumPasswordAge.days

if($MaxPassAge -le 0)
{
   throw "Domain ‘MaximumPasswordAge’ password policy is not configured."
}

$DaysToExpire = 14
$MailFrom = "noreplay@domain.ua"
$PSEmailServer = "relay.domain.ua"
$encoding = [System.Text.Encoding]::UTF8

Get-QADUser -Enabled -PasswordNeverExpires:$false -SizeLimit 0 -Email * |`
Select-Object LogonName,Name,Email,@{Name="Expires";Expression={ $MaxPassAge — $_.PasswordAge.days }} |`
Where-Object {$_.Expires -gt 0 -AND $_.Expires -le $DaysToExpire } | Foreach-Object {
$Subject="Password reminder: срок действия пароля для вашего аккаунта $($_.LogonName) ($($_.Name)) истекает через  $($_.Expires) дней"
Send-MailMessage -From $MailFrom -To $_.Email -Subject  $Subject -Body  $Body -Encoding $encoding -priority High 
  }

А теперь скрипт, который присылает отчет о пользователях с истекшим или истекающим паролями

<#
.SYNOPSIS
    Create a HTML Report on Expiring Passwords
.DESCRIPTION
    This script will create a report of passwords that are expiring within
    the specified time.  It will also list users who’s passwords have already
    expired.  The script will create reports in 2 formats, CSV and HTML. 
    Both are then emailed to the specified user.
   
    Make sure to edit and change the PARAM section to match your environment
.PARAMTER SearchBase
    Specify the full FQDN of the OU you wish to begin your search at.  If you need
    help getting the FQDN you can use this script:
   
    http://community.spiceworks.com/scripts/show/1635-copy-a-ou-s-fqdn-to-clipboard
.PARAMETER Age
    Specify the number of days the script will report on expiring passwords.  An
    entry of 2 will report all passwords that have already expired, or are going to
    expire in the next 2 days.
.PARAMETER From
    When emailing the reports, this parameter will specify who the report is
    coming from. 
.PARAMETER To
    Tell the script where to send the email
.PARAMETER SMTPServer
    This needs to be the IP address or name of your SMTP relay server.
.OUTPUTS
    Email:    HTML version of the same report in the body of the email.  Also attaches
            the CSV to the email.
.EXAMPLE
    .\Report-PasswordExpiring.ps1
    Accepts all defaults as defined in the PARAM section
.EXAMPLE
    .\Report-PasswordExpiring.ps1 -Age 5 -From script@yourdomain.com -To Administrator@yourdomain.com -SMTPServer 192.168.1.25
    Runs the report using D:\myreports as the path to save the CSV report.  Email will be sent
    from "script@yourdomain.com" and sent to "Administrator@yourdomain.com" using 192.168.1.25
    as the SMTP relay server.  All user accounts with expired passwords or password that will
    be expiring in 5 days will be reported.
.NOTES
    Script:                Report-PasswordExpiring.ps1
    Author:                Martin Pugh
    Blog:                http://www.thesurlyadmin.com
    Twitter:            @thesurlyadm1n
    Spiceworks:            Martin9700
   
    Changelog
        1.5                Rewrite of Report-PasswordExpiration.ps1.  Added ability to specify
                        SearchBase, save report with dates and specify time range for
                        reporting expired passwords.  Also completely re-worked the max
                        password age function to be much more efficient. Also added a little
                        color to the HTML report.
        1.0                Initial Version
.LINK
        http://community.spiceworks.com/scripts/show/1733-report-passwordexpiring
.LINK
    http://community.spiceworks.com/scripts/show/1635-copy-a-ou-s-fqdn-to-clipboard
#>
Param (
    [string]$SearchBase = "OU=Common Users,OU=Domain Users,DC=domain,DC=ua",
    [int]$Age = 7,
    [string]$From = “noreplay@domain.ua”,
    [string]$To = "it@domain.ua",
    [string]$SMTPServer = "relay.domain.ua"
)

cls
$Result = @()

#region Determine MaxPasswordAge
#Determine MaxPasswordAge
$maxPasswordAgeTimeSpan = $null
$dfl = (get-addomain).DomainMode
$maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge
If ($maxPasswordAgeTimeSpan -eq $null -or $maxPasswordAgeTimeSpan.TotalMilliseconds -eq 0)
{    Write-Host "MaxPasswordAge is not set for the domain or is set to zero!"
    Write-Host "So no password expiration’s possible."
    Exit
}
#endregion

$Users = Get-ADUser -Filter * -SearchBase $SearchBase -SearchScope Subtree -Properties GivenName,sn,PasswordExpired,PasswordLastSet,PasswordneverExpires,LastLogonDate, Title, Department, Company
ForEach ($User in $Users)
{    If ($User.PasswordNeverExpires -or $User.PasswordLastSet -eq $null)
    {    Continue
    }
    If ($dfl -ge 3)
    {    ## Greater than Windows2008 domain functional level
        $accountFGPP = $null
        $accountFGPP = Get-ADUserResultantPasswordPolicy $User
        If ($accountFGPP -ne $null)
        {    $ResultPasswordAgeTimeSpan = $accountFGPP.MaxPasswordAge
        }
        Else
        {    $ResultPasswordAgeTimeSpan = $maxPasswordAgeTimeSpan
        }
    }
    Else
    {    $ResultPasswordAgeTimeSpan = $maxPasswordAgeTimeSpan
    }
    $Expiration = $User.PasswordLastSet + $ResultPasswordAgeTimeSpan
    If ((New-TimeSpan -Start (Get-Date) -End $Expiration).Days -le $Age)
    {    $Result += New-Object PSObject -Property @{
            ‘Last Name’ = $User.sn
            ‘First Name’ = $User.GivenName
            UserName = $User.SamAccountName
            Department = $User.Department
            ‘Compamy’ = $User.company
            ‘Title’ = $User.Title
            ‘Expiration Date’ = $Expiration
            ‘Last Logon Date’ = $User.LastLogonDate
            State = If ($User.Enabled) { "" } Else { "Disabled" }
        }
    }
}
$Result = $Result | Select ‘Last Name’,’First Name’,UserName,Department,Compamy,Title,’Expiration Date’,’Last Logon Date’,State | Sort ‘Expiration Date’,’Last Name’

#Send HTML Email
$Header = @"
<style>
TABLE {border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}
TH {border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color: #6495ED;}
TD {border-width: 1px;padding: 3px;border-style: solid;border-color: black;}
</style>
"@
$splat = @{
    From = $From
    To = $To
    SMTPServer = $SMTPServer
    Subject = "Password Expiration Report"
}
$Body = $Result | ConvertTo-Html -Head $Header | Out-String

Send-MailMessage @splat -Body $Body -BodyAsHTML

Реклама

2 комментария »

  1. Спасибо,очень интересный скрипт. Скажите,я тут подумал (разбираюсь с первой частью скрипта,про оповещение пользователей)ведь можно было зная что срок пароля допустим 60 дней, задать если PasswordAge.days больше 50 дней высылать оповещение,в скрипте же мы 60 — 50 = 10 и отталкиваемся от этого значения. Странно немного усложнили,или я чего то не понимаю.

    комментарий от Alexandr Elizarov — 03.12.2014 @ 18:43 | Ответить

    • Что будете делать с теми, у кого пароль не истекает и значение будет отрицательным?

      комментарий от itpadla — 03.12.2014 @ 18:55 | Ответить


RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Блог на WordPress.com.

%d такие блоггеры, как: