فهرست مطالب این مقاله:
ویندوز سرور شامل ابزارهای خط فرمانی و همچنین ابزار قدرتمند PowerShell است که امکانات زیادی را برای ادمینها فراهم میکند. در این مقاله برخی از دستورات رایج جهت گزارشگیری را بررسی خواهیم کرد.
اهمیت گزارشگیری از اکتیو دایرکتوری با ابزار خط فرمان
فرض کنید شما وارد یک سازمان جدید شدهاید و میخواهید قبل از هر کار کاربرانی که مجوز اعمال تغییرات در OU ها را دارند (برای آنها delegation انجام شده) را مشاهده کنید. فرض کنید مدت زیادی است که در یک شرکت بزرگ با چندین شعبه مشغول به کار هستید و پس از گذشت چندین سال متوجه وجود اکانتهایی شدهاید که کاربران آنها از سازمان خارج شدهاند. آیا امکان دریافت چنین لیستی از واحد منابع انسانی ممکن است؟ اگر بتوان گزارشی از اکتیو دایرکتوری دریافت کرد که لیستی که کاربرانی که در چند ماه گذشته فعالیت نداشتهاند را به ما بدهد مشکل به سادگی حل خواهد شد. اما آیا چنین گزارشاتی از اکیتو دایرکتوری ممکن است؟ در این مجموعه مقالات سعی داریم تا روشها و دستورات لازم برای فراهم کردن گزاراشات کاربردی از اکتیو دایرکتوری را به شما معرفی کنیم.
از آنجایی که برخی از ادمینهای شبکه هنوز با ابزار RSAT که توسط مایکروسافت ارائه شده است و امکان انجام امور مربوط به اکتیو دایرکتوری را از سیستم عاملهای کلاینتی مانند ویندوز 7، 8 یا 10 به کاربران میدهد آشنایی ندارند، ابتدا به روش نصب این ابزار پرداخته و سپس ابزارهای خط فرمان مانند Get-ADUser که برای گزارشگیری از اکتیو دایرکتوری استفاده میشود را معرفی خواهیم کرد.
مدیریت اکتیو دایرکتوری از ویندوزهای کلاینتی
در بسیاری از مواقع، مانند زمانی که دسترسی محدود به یک کاربر یا کارشناس به منظور تغییر، افزودن یا پاک کردن آبجکتها داده میشود، کاربرانی که با ویندوز کلاینتی کار میکنند نیازمند استفاده از ابزارهایی هستند که به طور پیشفرض فقط بر روی ویندوز سرور قابل دسترس است. طبیعتاً هیچ مدیر شبکهای امکان دسترسی مستقیم و فیزیکی سرورها را به کارمندان نخواهد داد. علاوه بر آن، برای مدیران شبکه بسیار راحتتر خواهد بود که به وسیلهی کامپیوتر یا لپتاپ خود امور مدیریت اکتیو دایرکتوری را انجام دهند و مجبور به حضور فیزیکی در کنار سرور نباشند. اما این کار چگونه ممکن است؟
مایکروسافت برای حل این مشکل، ابزاری را به صورت رایگان در سایت خود قرار داده است که امکان اتصال از ویندوزهای کلاینتی به سرور اکتیو دایرکتوری را فراهم میکند. این ابزار که Remote Server Administration Tools یا به اختصار RSAT نام دارد که قابل دانلود است. همانطور که در شکل 1 مشاهده میکنید، امکان فعالسازی این ابزار به طور پیشفرض در ویندوزهای کلاینتی وجود ندارد.
شکل 1. عدم وجود RSAT در تنظیمات پیشفرض ویندوزهای کلاینتی
توجه داشته باشید که امکان نصب آن از روی سرور اشتراکی وجود ندارد و حتما قبل از نصب، باید فایل را بر روی سیستم خود کپی کنید. پس از اجرای آن، فرایند نصب بدون مشکل به پایان خواهد رسید، اما این بدان معنی نیست ابزارهای مربوطه فعال شدهاند، بلکه تنها فایلهای مربوطه در سیستم شما قرار خواهند گرفت.
پس از نصب، وارد control panel شوید و به بخش Programs and Features بروید. سپس Turn Windows Features on or off را کلیک کنید. در صورتی که ابزار RSAT را نصب کرده باشید، گزینههای مربوطه، همانطور که در شکل 2 نشان داده شدهاند، نمایان خواهند شد. بسیاری از این ابزارها بر اساس نیاز شما ممکن است کاربرد داشته باشند. آنچه ما در اینجا به آن نیاز داریم تا امکان مدیریت اکتیو دایرکتوری توسط PowerShell را داشته باشیم، Active Directory Module for Windows PowerShell میباشد.
شکل 2. گزینههای فعالشده پس از نصب RSAT
از آنجایی که هدف ما استفاده از ابزارهای خط فرمان است، ابتدا PowerShell باز کرده و سپس به منظور فعال کردن امکانات RSAT دستور زیر را وارد کنید:
> Import-Module activedirectory
گزارشگیری از اکتیو دایرکتوری با خط فرمان Get-ADUser
بیش از 6 سال پیش، یکی از تکنیسینهای مایکروسافت مقالهای را تحت عنوان “چگونه میتوان لیستی از یوزرهای غیرفعال را مشاهده کرد” نوشت. در آن مقاله راهحلی مبتنی بر اسکریپت نویسی به کمک VBScripts ارائه شد که تا 16 خط کد طول داشت. به جز افراد خبره و مسلط به COM-based ADO کمتر کسی توان استفاده و یا تغییر آن را داشت. هر چند راهحلهایی از این نوع هنوز قابل استفاده میباشند، دستورات خط فرمان و راهحلهای سادهتری نیز ارائه شدهاند که گزارشگیری از اکتیو دایرکتوری را تا حدودی سادهتر ساختهاند. پس از افزودن RSAT، از طریق کلاینت خود میتوانید لیست کاربرانی که غیرفعال هستند را مشاهده کنید. برای این کار کافی است از دستور تکخطی زیر استفاده نمایید:
> Get-ADUser –Filter ‘enable –eq $false’ –Server dc1
دستور فوق نه تنها بسیار کوتاهتر از یک اسکریپت 16 خطی است، بلکه بسیار خوانا و قابل فهم است. حتی برای کسانی که برای اولین بار این دستور را نگاه میکنند، فهم اینکه این دستور چه کار میکند چندان دشوار نیست. دستور فوق در حقیقت کاربرانی که فیلد enable آنها برابر با false است و یا به عبارتی دیگر disable هستند را نشان میدهد. همانطور که در انتهای دستور آمده است شما سروری را که از آن میخواهد نتیجه دستور را مشاهده کنید را نیز میتوانید مشخص کنید. خروجی دستور فوق در شکل 3 نشان داده شده است.
شکل 3. خروجی دستور Get-ADUser
دستورات مشابهی نیز برای گزارشگیری از گروهها و کامپیوترها وجود دارد که به ترتیب Get-ADGroup و Get-ADComputer نام دارند. عملکرد و پارامترهای این دستورات مشابه با دستور Get-ADUser میباشد. برای مثال دستور زیر گروههایی که از نوع security و Global میباشند را بازمیگرداند:
> Get-ADGroup -filter {GroupCategory -eq "Security" -and GroupScope -eq "Global"}
لازم به ذکر است که پارامترهای این دستورات بسیار متنوع بوده و قابلیت انعطاف زیادی را در گزارشگیری فراهم میکنند. هرچند اسکریپتنویسی با تمام پیچیدگیهایش قدرت بیشتری را در گزارشگیری به کاربر میدهد، اما استفاده از دستورات خط فرمان نسبتاً ساده و کاربردی برای مواردی که نیاز مدیریان شبکه را بر طرف میکند خالی از لطف نیست.
نحوه فیلترینگ کاربران در گزارشگیری از اکتیو دایرکتوری با خط فرمان Get-ADUser
همونطور که گفتیم یکی از پرکاربردترین این دستورات، دستور Get-ADUser است که لیستی از کاربران را به شما باز میگرداند. بزرگترین ویژگی این دستور که آن را بسیار انعطافپذیر کرده است، ویژگی فیلترینگ آن است. برای مثال به دستور زیر توجه کنید:
> Get-ADUser –Filter *
این دستور فهرست کاملی از کاربران را به شما برمیگرداند، که البته چندان کاربردی به نظر نمیرسد. اما امکان فیلترینگ به شما کمک میکند تا فقط تعدادی از کاربران که شما توسط شرطهای فیلترینگ مشخص میکنید نمایش داده شوند. برای مثال دستور زیر لیست تمامی کاربرانی که آدرس ایمیل آنها با عبارت ali شروع میشود را بازمیگرداند.
> Get-ADUser –Filter {EmailAddress -like "ali*"}
در حقیقت، در صورتی که شناخت کاملی از صفات یا همان attributeهای اکانت کاربری داشته باشید، میتوانید گزارشات مختلف و کاربردی تهیه کنید. در فیلترینگ شما میتوانید به روشهای مختلفی مقایسه انجام دهید. برای مثال، -like برای مقایسهی برابری دو رشتهی متنی، -notlike برای مقایسهی عدم برابری دو رشته متنی، -eq برای مقایسهی برابری دو مقدار، -ge برای بررسی بزرگتر و مساوی بودن استفاده میشود. برای مثال فرض کنید میخواهید بررسی کنید که برای چه کاربرانی آدرس ایمیل غیرمعتبر درج شده است. همانطور که میدانید در ساختار ایمیل ابتدا یک عبارت، سپس @ و سپس نام دامین که همراه با نقطه یا dot است باید وجود داشته باشد. در غیر این صورت ایمیل اشتباه خواهد بود. حال به کمک آنچه گفت شد، میتوانید به کمک دستور زیر لیست کاربرانی که ایمیل آنها صحیح نیست را بدست بیاورید:
> Get-ADUser –Filter {EmailAddress -notlike "*@*.*"}
توجه داشته باشید که هر کجا از حرف * استفاده شود، بدین معنی است که هر نوع و هر تعداد کاراکتری میتواند در آن جایگاه قرار بگیرد. همین مثال ساده به خوبی نمایانگر قدرت بالای استفاده از ابزارهای پاورشل است. به عنوان مثالی دیگر، فرض کنید میخواهیم کاربرانی که اکانت آنها مسدود (lockout) شده است را مشاهده کنیم. اکانتهای مسدود شده، شامل کاربرانی میشود چندین بار رمز عبور خود را اشتباه وارد کردهاند.
اکانتهای کاربری دارای صفتی هستند به نام lockoutTime که زمانی که کاربر مسدود شده است را نشان میدهد. هر گاه که کاربر یک لاگین موفق داشته باشد مقدار این صفت برابر با صفر میشود که نشان میدهد که کاربر مسدود نشده است. بنابراین به کمک دستور زیر میتوانید اکانتهای غیر مسدود را مشاهده کنید:
> Get-ADUser –Filter {LockOutTime –eq 0}
نکته قابل توجه اینجاست که این دستور واقعاً تمامی کاربرانی که مسدود نیستند را بر نمیگرداند. فرض کنید تعدادی اکانت جدید ساختهاید که هنوز کاربری با آنها لاگین نکرده است. در چنین شرایطی، مقدار فیلد lockouTime این کابران خالی بوده و در این جستجو نمایش داده نخواهد شد. حال فرض کنید میخواهیم اکانتهایی که مسدود شدهاند را مشاهده کنیم. راهکاری که به ذهن هر کس ممکن است برسد این است که مقدار LockOutTime را بررسی کنیم و در صورتی که بزرگتر یا مساوی 1 بود، یعنی اکانت مسدود است. خروجی این دستور در شکل 1 نشان داده شده است.
شکل 1. مشاهده لیست کاربرانی که اکانت آنها مسدود شده است.
اما کمی صبر کنید! همانطور که در بالا به آن اشاره کردیم، تا کاربر لاگین موفق انجام ندهد مقدار این فیلد صفر نمیشود. به عبارت دیگر فرض کنید که اکانتی مسدود شده است. حال بر اساس Group Policy موجود، این اکانت پس از 30 دقیقه مجددا میتواند لاگین انجام دهد. اما پس از گذشت 30 دقیقه، اکتیو دایرکتوری مقدار این فیلد را تغییر نمیدهد. در حقیقت، هنگام لاگین کاربر است که اکتیو دایرکتوری چک میکند که آیا این کاربر از وضعیت مسدود خارج شده است یا نه. بنابراین بررسی این فیلد، به روش گفته شده در بالا نمیتواند به ما در تشخیص اکانتهای مسدود شده کمک کند.
اما راه حل چیست؟ بدست آوردن لیست کاربرانی که اکانت آنها مسدود شده است کمی پیچیدهتر از آن است که بتوان با Get-ADUser آن را انجام داد. شما در حقیقت باید ابتدا lockOutTime کاربران را دریافت کنید، سپس بررسی کنید که زمان lockOutDuration چقدر است. این مقدار مشخص میکند اکانت کاربر تا چه زمانی مسدود باقی بماند. سپس زمان کنونی را در نظر گرفته، و بررسی کنید که آیا به اندازهی lockOutDuration از زمان lockOutTime گذشته است یا نه. این کار عملا فقط توسط اسکریپت نویسان حرفهای ممکن است.
ما برای تسهیل این امر، اسکریپت آن را به صورت آماده نوشتهایم که شما میتوانید آن را دانلود کنید. ابتدا پسوند فایل از txt به vbs تغییر دهید و به کمک دستور زیر آن را اجرا کنید:
> cscript FindLockedOutUsers.vbs
شکل 2. خروجی FindLockedOutUsers به منظور مشاهدهی کاربران مسدود شده
خروجی این دستور در شکل 2 نشان داده شده است. هر چند دستورات خط فرمان و همچنین ابزار PowerShell بسیار انعطافپذیر و قدرتمند هستند، شما تنها با یادگیری چند دستور نمیتوانید نیازهای کاربردی و ضروری در سازمانهای بزرگ را برطرف کنید. همانطور که در این مقاله نشان دادیم، برای گزارشگیری از اکتیو دایرکتوری با ابزار خط فرمان که به ظاهر ساده به نظر میرسند، شما نیازمند شناخت دستورات خط فرمان و پاورشل، شناخت کامل از عملکرد اکتیو دایرکتوری و چگونگی کاربرد attributeهای شئهای مختلف و همچنین مهارت اسکریپت نویسی دارید. از این رو بسیاری از مدیران شبکه ترجیح میدهند از ابزارهای گرافیکی و رایج مانند نرمافزار مدیریت اکتیو دایرکتوری برنا استفاده کنند. شما میتوانید دموی آنلاین برنا و رایگان این محصول را هم مشاهده کنید.