Служба захисту користувачів

  1. Включення і відключення облікових записів
  2. Зміна пароля облікового запису
  3. Призначення паролів облікових записів

Штат будь-якої організації постійно оновлюється, одні співробітники надходять на роботу, інші звільняються. І, як відомо, далеко не завжди людина буває задоволений тим, що залишає компанію. Якщо у такого незадоволеного екс-працівника є ключі від офісу, керівник напевно змінить замок. Якщо у колишнього користувача є обліковий запис, необхідно зробити так, щоб він не зміг нею скористатися - особливо якщо з даної обліковим записом пов'язані привілеї, які в принципі дають її власнику можливість заподіяти шкоду. У цій статті мова піде про те, як за допомогою програмних засобів ввімкнути або вимкнути облікові записи користувачів і встановлювати паролі облікових записів. Крім того, я розповім про програму, за допомогою якої можна дозволити користувачам змінювати паролі навіть тоді, коли доступ до діалогового вікна Windows Security з міркувань безпеки закритий.

Включення і відключення облікових записів

Навіть якщо співробітник відсутній тимчасово, краще на цей період перевести його обліковий запис в режим бездіяльності, щоб зловмисники не могли скористатися даною обліковим записом для атаки на систему. Однак видаляти бездіяльну обліковий запис не варто, оскільки в такому випадку доведеться відновлювати всі пов'язані з нею настройки безпеки, коли користувач повернеться. Будь-який досвідчений адміністратор знає, що обліковий запис слід відключати на той час, поки вона не використовується, і видаляти її тільки тоді, коли є повна впевненість, що ця обліковий запис більше не знадобиться.

Щоб спростити процес блокування облікового запису, коли користувач відсутній, і включення облікового запису, коли він повертається, можна задіяти програму з лістингу 1 . Сценарій простий: спочатку виконується підключення до вибраного облікового запису, потім змінюється параметр AccountDisabled. Також можна відключити обліковий запис, редагуючи керуючий прапор, пов'язаний з обліковим записом, але пропонований мною метод, по-перше, простіше, а по-друге, однаково ефективний для наших цілей. Якщо необхідно, щоб ця ж програма виконувала подвійну обов'язок (т. Е. Відключення і включення облікових записів), потрібно зробити параметр AccountDisabled аргументом програми. Невелика підпрограма Help підказує користувачеві, яке значення слід ввести, щоб отримати бажаний результат. Оскільки програма використовує простір імен WinNT, вона буде працювати і з доменами SAM, і з доменами Active Directory (AD). Оновивши вміст оснащення Active Directory Users and Computers консолі Microsoft Management Console (MMC) на контролері домену (DC), ви побачите, що обліковий запис з певним ім'ям тепер відключена або включена, в залежності від вказівок.

Зміна пароля облікового запису

Іноді вимкнення облікового запису не підходить, наприклад, неможливо відключити обліковий запис адміністратора, використовувану кількома співробітниками, тільки тому, що одна людина йде. У такому випадку потрібно змінити пароль облікового запису.

Active Directory Service Interfaces (ADSI) підтримує два методи зміни паролів: ChangePassword і SetPassword. При використанні ChangePassword необхідно, щоб співробітник, який здійснює зміну пароля, знав поточний пароль. Чи ChangePassword - інструмент для адміністраторів, оскільки адміністратори не повинні знати паролів користувачів. Однак ChangePassword дійсно зручний, коли адміністратор закриває доступ до діалогового вікна Windows Security, використовуючи Group Policy або інші засоби, але хоче дозволити користувачам змінювати свої паролі. SetPassword якраз просто замінює існуючий пароль новим.

Програма, що дозволяє зареєстрованим користувачам змінювати пароль, повинна робити наступне:

  • розпізнавати ім'я користувача;
  • запитувати поточний пароль користувача;
  • пропонувати користувачеві ввести новий пароль;
  • пропонувати користувачеві підтвердити новий пароль;
  • порівняти два пароля і не прийняти їх, якщо вони не збігаються;
  • змінити пароль і записати новий пароль до бази даних безпеки;
  • зробити запис про те, що пароль був змінений.

Про те, як реалізувати ці дії у вигляді коду, розповідалося в попередніх статтях, тому тут я зосереджу свою увагу тільки на те, як ці частини зібрані разом в програмі в лістингу 2 .

По-перше, треба ідентифікувати зареєстрованого користувача. Нагадаю, що властивість UserName об'єкта WshNetwork повертає ім'я користувача. Тому для того, щоб отримати ім'я користувача, потрібно створити об'єкт WshNetwork (WScript.Network), зв'язати цей об'єкт зі змінною (oNet), а потім задіяти властивість UserName для вилучення імені користувача, як показано в мітці A лістингу 2.

Тепер, коли у нас є ім'я поточного користувача, можна застосувати функцію InputBox і запросити у користувача поточний і новий паролі. Найпростіше створити для цих цілей невелику підпрограму. Підпрограма CheckPwd зберігає в глобальних змінних sPword1, sPword2 і sPword3 поточний і новий паролі. Підпрограма запитує у користувача поточний пароль (sPword1), новий пароль (sPword2) і ще раз новий пароль (sPword3) для підтвердження. Якщо новий пароль і пароль-підтвердження не збігаються, підпрограма повідомляє про це користувачеві і виводить запит заново. Порівняння sPword2 і sPword3 чутливе до регістру, тому FROG і frog - не одне й те саме.

Як пояснювалося раніше, функція InputBox мови VBScript завжди відображає кнопки OK і Cancel і залежить від трьох аргументів:

InputBox (prompt, title, default)

де prompt - це текст вікна повідомлення, title - текст заголовка, а default - значення за замовчуванням. Оскільки ці аргументи розділяються комами, використовувати коми у тексті вікна повідомлення і заголовка не можна. Замість ком можна застосовувати символ конкатенації (&), як в підпрограмі CheckPwd.

Функція InputBox має один недолік: вона не підтримує маскування символів. Так, якщо користувач вводить в діалоговому вікні слово swordfish, відповідне паролю, то він побачить на екрані swordfish, а не ряд з зірочок (*********). Якщо програма зі зміни пароля виконується в Windows 2000 і більш ранніх версіях, з цим обмеженням доведеться змиритися, але якщо програма виконується в Windows Server 2003 або Windows XP, існує ще одна можливість. Ці версії Windows містять компонент scriptpw.dll, який маскує вводяться користувачем символи. Компонент scriptpw недосконалий - при введенні немає точної відповідності кількості введених символів і замінюють їх зірочок, але це більш безпечно, ніж відкритий набір паролів у вікні введення.

Підпрограма HidePwd містить код, який використовує Scriptpw. Код HidePwd подібний до коду CheckPwd, за винятком того, що HidePwd видає запрошення вводити символи в командному рядку, а не в діалоговому вікні та HidePwd приховує вводяться користувачем символи. Рядок відповіді командного процесора після кожного запиту пароля закінчується переходом на новий рядок, інакше весь текст, що виводиться містився б в одному рядку.

Для того щоб не треба було мати дві версії програми зі зміни пароля, Userpword.vbs визначає операційну систему і тільки потім виконує відповідну підпрограму введення паролів. Об'єкт, який представляє комп'ютер, має властивість OperatingSystemVersion, яке можна запросити. Точний збіг не потрібно. Необхідно тільки знати, що не менше чи номер версії, ніж 5.1, т. Е. Номер версії XP. Програма вже використовувала об'єкт WshNetwork для отримання імені комп'ютера, тому код в лістингу 2 під міткою B перевіряє версію операційної системи на локальному комп'ютері.

Яку б підпрограму введення паролів ні використовувала програма, вона зберігає новий пароль в sPword2, а старий пароль - в sPword1, а потім передає їх в код під міткою C, який і змінює пароль. Якщо користувач не надасть правильний старий пароль, робота програми завершиться з вельми красномовним повідомленням про помилку The specified network password is not correct.

Призначення паролів облікових записів

Якщо поточного пароля облікового запису немає, то для призначення пароля застосовується дещо інший підхід. Програма повинна зробити наступне:

  • прийняти отримані ім'я користувача і домена;
  • знайти ім'я користувача в базі даних безпеки;
  • видати запрошення для введення нового пароля;
  • призначити новий пароль;
  • зажадати від користувача змінити пароль при наступній реєстрації (щоб адміністратор не знав його);
  • зробити запис про те, що пароль був змінений.

Велика частина програми Adminpword.vbs для призначення пароля, показаної в лістингу 3 , Складається з коду, вже написаного для двох перших програм. З Disableuser.vbs програма Adminpword.vbs бере код, який приймає ім'я користувача і домена і підключається до відповідної облікового запису. З Userpword.vbs програма Adminpword.vbs бере підпрограми, які видають запрошення ввести новий пароль. Підпрограми в Adminpword.vbs трохи змінені, оскільки поточний пароль не потрібен. Можна було б в явному вигляді вказати пароль за замовчуванням в Adminpword.vbs, але робити цього не слід. Якщо в явному вигляді записати пароль в Adminpword.vbs, він буде зберігатися як простий текст. Досить просто реалізується у вигляді коду решта завдання за призначенням нового пароля, а саме вимога змінити пароль при наступній реєстрації і запис про те, що пароль був змінений.

Оскільки призначається новий пароль, метод ChangePassword замінюється на метод SetPassword і вводиться тільки новий пароль, як показано в мітці A лістингу 3. Властивість PasswordExpired визначає, чи повинен користувач змінити пароль при наступній реєстрації. Коли значення цього параметра дорівнює 0, пароль є дійсним, коли 1 - термін дії пароля минув. Отже, щоб домогтися зміни пароля, необхідно присвоїти цим параметром значення 1. Оскільки oUser представляє призначену для користувача обліковий запис, код в мітці B лістингу 3 змушує змінити пароль.

Відключення облікового запису або зміна пароля має завершуватися відповідним записом у журналі подій. Нагадаю, що в попередній статті про редагування реєстру говорилося, що для запису в Event Log потрібно підключитися до об'єкта WshShell і використовувати метод LogEvent з типом події і пояснювальний текст в якості аргументів. У нашому випадку тип події - повідомлення, так що ця подія типу 4. Дата і час автоматично записуються разом з подією, тому в програму їх можна не вносити. Щоб про зміну пароля було зроблено запис, слід в кінець основної програми ввести код, показаний в мітці C лістингу 3.

Функції відключення невикористовуваних облікових записів і зміни паролів дуже важливі, і відповідні їм програми повинні бути максимально простими і ефективними. Але процедура зміни пароля через графічний інтерфейс Windows 2000, наприклад, складається з шести кроків. Застосовуючи програму, описану в цій статті, адміністратори зможуть без праці ввімкнути або вимкнути призначені для користувача облікові записи, надавати користувачам можливість змінювати свої паролі, не маючи доступу до діалогового вікна Windows Security, і встановлювати нові паролі для важливих облікових записів.

Кріста Андерсон - незалежний автор і консультант журналу Windows NT Magazine. З нею можна зв'язатися за адресою: [email protected]