Аудит власників файлів, windows it pro
Системні адміністратори часто запитували мене, чи можливо отримати список всіх файлів, створених певним користувачем, працюючи зі структурою каталогів, яка містить понад 20 тисяч файлів. На перший погляд це питання здавалося абсурдним. єдиним способом отримати таку інформацію був би опитування кожного окремого файлу, з метою отримання імені його власника, і складання списку. Виконання цієї операції вимагало б вічності. Однак, я згадав, що кілька років тому працював з утилітою, що представляє собою набір ресурсів, під назвою subinacl.exe. З її допомогою я міняв власників файлів. У той же час я виявив, що крім інших можливостей цієї утиліти, вона дозволяє переглядати властивості файлу, в тому числі і ідентифікатор безпеки (SID) користувача, якому належить файл. Знаючи, що утиліта Subinacl допоможе мені отримати необхідну інформацію, я створив сценарій, названий ownedby.cmd, щоб реалізувати аудит власників файлів.
Надіслати заявку на отримання матеріалів
Системні адміністратори часто запитували мене, чи можливо отримати список всіх файлів, створених певним користувачем, працюючи зі структурою каталогів, яка містить понад 20 тисяч файлів. На перший погляд це питання здавалося абсурдним - єдиним способом отримати таку інформацію був би опитування кожного окремого файлу, з метою отримання імені його власника, і складання списку. Виконання цієї операції вимагало б вічності. Однак, я згадав, що кілька років тому працював з утилітою, що представляє собою набір ресурсів, під назвою subinacl. exe. З її допомогою я міняв власників файлів. У той же час я виявив, що крім інших можливостей цієї утиліти, вона дозволяє переглядати властивості файлу, в тому числі і ідентифікатор безпеки (SID) користувача, якому належить файл. Знаючи, що утиліта Subinacl допоможе мені отримати необхідну інформацію, я створив сценарій, названий ownedby. cmd (він приведений в лістингу 1), щоб реалізувати аудит власників файлів.
Утиліта Subinacl. exe
де filename I - це ім'я файлу. Так як вам не потрібно вся інформація, яка надається цією командою, ви можете додати параметр / noverbose. щоб відобразити лише зведення за інформацією зі списку управління доступом файлу. На рисунку 1 показаний приклад виведення командою Subinacl з використанням всіх параметрів. Як ви бачите, одна з рядків містить фразу «/ owner = S-1-5-32-544», яка означає, що ідентифікатор безпеки користувача - «S -1-5-32-544».
Утиліта Getsid. exe порівнює ідентифікатори безпеки двох облікових записів. Синтаксис команди представлений нижче:
де вираження server1 і server2 визначають сервери, які ви хочете опитати, щоб отримати інформацію про ідентифікатор безпеки, а account1 і account2 - облікові записи, які ви хочете порівняти. Сценарій Ownedby. cmd використовує утиліту Getsid. щоб отримати ідентифікатор безпеки для певного облікового запису користувача, тому, в даному випадку, значення server1 і server2 будуть однакові. так само як і значення account1 і account2. Наприклад, щоб отримати ідентифікатор безпеки для користувача JDoe з контролера домену mydc. я ввів команду
Принцип роботи сценарію
Тепер у вас є всі необхідні засоби для роботи сценарію. Утиліта Subinacl дозволяє отримати ідентифікатор безпеки користувача, а утиліта Getsid повертає ідентифікатор безпеки для вказаного імені користувача. За допомогою цих коштів ви зможете зробити порівняння «ім'я користувача-власник файлу». Завданням сценарію Ownedby. cmd є висновок імені та шляхи для кожного файлу у відповідній структурі каталогів, що належить певному користувачеві. Сценарій використовує один жорстко кодований параметр (ім'я контролера домену) і три робочих параметра: ім'я користувача (userid), кореневої каталог структури (root_directory), і їм вихідного файлу (outputfile). Остаточний синтаксис команди Ownedby виглядає наступним чином:
Наприклад, якщо я наберу
сценарій виведе в файл results. txt. інформацію по всіх файлів, що належить користувачеві JDoe, в папці G: users і її підкаталогах.
При запуску сценарій повинен визначити ідентифікатор безпеки зазначеного користувача, і далі зберегти цей ідентифікатор в змінної sid для подальшого використання, як показано в блоці A лістингу 1. Цей код спочатку очищає змінну sid. якщо вона була попередньо визначена. Далі сценарій визначає ідентифікатор безпеки користувача за допомогою використання утиліти Getsid в циклі і фільтрації виведення, яка застосовується для відображення тільки тих записів, які містять вираз "S -" (префікс ідентифікатора безпеки). Сценарій витягує значення ідентифікатора з сьомої рядка ( "tokens = 7") результуючого виведення утиліти Getsid і зберігає це значення в змінній sid. Значення константи% DC% - це жорстко кодуються ім'я котроллер домену, яке попередньо умовляється в сценарії. Значення константи% USERID% містить ім'я користувача, яке ви вказуєте серед параметрів командного рядка при запуску сценарію.
Після цього починається виконання блоку з міткою. checkowner для кожного файлу, виданого командою Dir. У цьому блоці спочатку запускається утиліта Subinacl для даного імені файлу і зберігає інформацію про власника в змінну owner. Далі сценарій визначає, чи належить файл вказаною користувачеві, передаючи значення, отримане від команди Subinacl в команду Find. щоб перевірити, чи збігаються ідентифікатор безпеки користувача і ідентифікатор безпеки власника файлу. Якщо значення змінної ERRORLEVEL дорівнює 0, вважається, що збіг було знайдено, і сценарій встановлює змінну found в значення 1, як видно з коду в блоці D. Так як сценарій очищає змінну found перед її установкою в 1, ви зможете розрізнити випадки, коли прапор found встановлює в ході перевірки збігу, і коли значення змінної found встановлюється сценарієм. Якщо змінна встановлена в 1, вважається, що збіг знайдено, і сценарій додає ім'я файлу у вихідний файл, як це видно з коду в блоці E.
Підготовка до роботи
Хоча сценарій ownedby. cmd відносно короткий і зрозумілий, він має деякі незначні особливості. Я привожу кілька аспектів, на які необхідно звернути увагу для забезпечення коректної роботи сценарію:
Лістинг 1. Сценарій Ownedby.cmd
Поділіться матеріалом з колегами і друзями