কম্পিউটার টিউটোরিয়াল

PowerShell দিয়ে NTFS পারমিশন পরিচালনা করা

Windows-এ ফাইল বা ফোল্ডারের এক্সেস ম্যানেজ করার জন্য NTFS ফাইল সিস্টেম অবজেক্টে (ফাইল বা ফোল্ডার) একটি বিশেষ ACL (Access Control List) অ্যাসাইন করা হয়। অবজেক্টের ACL সংজ্ঞায়িত করে যে কোনো ইউজার বা গ্রুপ ফাইল সিস্টেম অবজেক্টের সাথে কী কী অপারেশন (পারমিশন) পারফর্ম করতে পারবে। অধিকাংশ কেসে Windows অ্যাডমিন File Explorer গ্রাফিক্যাল ইন্টারফেস (ফাইল/ফোল্ডার প্রপার্টি → Security ট্যাব) বা icacls কনসোল টুল ব্যবহার করে NTFS পারমিশন ম্যানেজ করেন। এই লেখায় আমরা দেখব PowerShell কমান্ডলেট ব্যবহার করে NTFS অবজেক্টের পারমিশন কীভাবে ম্যানেজ করা যায়। আপনি এই কমান্ডগুলো আপনার স্ক্রিপ্টে বা Windows ফাইল সার্ভার ও ওয়ার্কস্টেশনে NTFS এক্সেস পারমিশন ম্যানেজমেন্ট অটোমেট করতে ব্যবহার করতে পারেন।

PowerShell দিয়ে NTFS পারমিশন পরিচালনা করা

Get-Acl & Set-Acl: NTFS ACL ম্যানেজ করার বিল্ট-ইন PowerShell কমান্ডলেট

PowerShell v5 (Windows 10/Windows Server 2016)-এ NTFS ACL ম্যানেজ করার জন্য Microsoft.PowerShell.Security মডিউলের অংশ হিসেবে দুটি বিল্ট-ইন কমান্ডলেট রয়েছে:

  • Get-Acl — NTFS ফাইল সিস্টেমের নির্দিষ্ট অবজেক্টের বর্তমান ACL পাওয়ার অনুমতি দেয়;
  • Set-Acl — বর্তমান অবজেক্টের ACL যোগ/পরিবর্তন করতে ব্যবহৃত হয়।

আমরা এই বিল্ট-ইন কমান্ডলেটগুলো বিস্তারিত আলোচনা করব না, কারণ বাস্তব কাজে NTFS পারমিশন ম্যানেজ করার জন্য তাদের ফিচার অধিকাংশ কেসে পর্যাপ্ত নয়। কিছু সাধারণ ইউজ কেস দেখা যাক।

একটি ফোল্ডার (ফাইল) এর বর্তমান মালিক এবং অ্যাসাইন করা NTFS পারমিশন তালিকা পেতে কমান্ড চালান:

get-acl C:\docs\ |fl

PowerShell দিয়ে NTFS পারমিশন পরিচালনা করা

Path : Microsoft.PowerShell.Core\FileSystem::C:\docs\ Owner : CORP\asmith Group : CORP\Domain Users Access : PC-7L7JAK6\root Allow ReadAndExecute, Synchronize BUILTIN\Administrators Allow FullControl NT AUTHORITY\SYSTEM Allow FullControl BUILTIN\Users Allow ReadAndExecute, Synchronize NT AUTHORITY\Authenticated Users Allow Modify, Synchronize NT AUTHORITY\Authenticated Users Allow -536805376 Audit : Sddl : O:S-1-5-21-2950832418-2342342341-4040681116-234234G:DUD:AI(A;OICI;0x1200a9;;;S-1-5-21-2601781602-2342342341-6543210895-1001)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;SY)(A;OICIID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)

আপনি দেখতে পাচ্ছেন, বর্তমান পারমিশনগুলো SDDl স্ট্রিং-ও হিসেবে দেখানো হয়েছে — এই এক্সেস ডেসক্রিপশন ফরম্যাটে আমরা সংক্ষেপে নজর দিয়েছিলাম Windows Service Permissions সেট করার আর্টিকেলে।

NTFS পারমিশন তালিকা আরও ক্লিয়ার ফরম্যাটে দেখাতে পারেন:

(get-acl C:\docs\).access

PowerShell দিয়ে NTFS পারমিশন পরিচালনা করা

একটি NTFS ফোল্ডার (অবজেক্ট) থেকে বর্তমান NTFS পারমিশন কপি করে অন্যটিতে প্রয়োগ করা যায়:

Get-Acl e:\old_docs | Set-Acl C:\docs

এটি করতে হলে অ্যাকাউন্ট অবজেক্টের মালিক হতে হবে এবং Take Ownership প্রিবিলেজ থাকতে হবে।

Set-ACL ব্যবহার করার মূল সমস্যা হলো কমান্ডলেটটি সবসময় রিসোর্সের মালিক পরিবর্তন করার চেষ্টা করে, এমনকি আপনি শুধু NTFS পারমিশন পরিবর্তন করতে চাইলে। তাই একটি অবজেক্টে পারমিশন যোগ করতে নিচের জটিল স্ক্রিপ্ট ব্যবহার করতে হয়:

$path = "c:\docs "
$user = "corp\DSullivan"
$Permiss = "Read, ReadAndExecute, ListDirectory"
$InheritSettings = "Containerinherit, ObjectInherit"
$PropogationSettings = "None"
$RuleType = "Allow"
$acl = Get-Acl $path
$perm = $user, $Permiss, $InheritSettings, $PropogationSettings, $RuleType
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $perm
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path $path

একটি ইউজার বা গ্রুপের ফোল্ডার এক্সেস করার NTFS পারমিশন রিমুভ করতে:

$path = "c:\docs"
$acl = Get-Acl $path
$rules = $acl.Access | where IsInherited -eq $false
$targetrule = $rules | where IdentityReference -eq "corp\DSullivan"
$acl.RemoveAccessRule($targetrule)
$acl | Set-Acl -Path $path

PowerShell দিয়ে ফোল্ডার ইনহেরিটেন্স ডিজেবল করতে:

$path = 'C:\docs
$acl = Get-ACL -Path $path
$acl.SetAccessRuleProtection($True, $True) # প্রথম $True ফোল্ডার প্রটেক্টেড কিনা, দ্বিতীয় $True বর্তমান NTFS পারমিশন কপি হবে কিনা
Set-Acl -Path $path -AclObject $acl

Get-Acl এবং Set-Acl ব্যবহার করে আপনি অবজেক্টের NTFS অডিট সেটিংস ম্যানেজ করতে পারেন (দेखুন: Tracking down who removed files from shared folder) বা AD-এ বর্তমান OU ডেলিগেটেড পারমিশন সম্পর্কে।

NTFSSecurity PowerShell মডিউল দিয়ে ফাইল পারমিশন ম্যানেজ করা

যে কারণে আমি ইতিমধ্যে বলেছি, ফাইল সিস্টেম অবজেক্ট ম্যানেজ করার বিল্ট-ইন PowerShell কমান্ডলেটগুলো খুব সুবিধাজনক নয়। Windows-এ ফাইল ও ফোল্ডারের NTFS পারমিশন ম্যানেজ করতে PowerShell Gallery থেকে আলাদা মডিউল NTFSSecurity ব্যবহার করা উচিত। Install-Module -Name NTFSSecurity কমান্ড দিয়ে NTFSSecurity মডিউলটির লেটেস্ট ভার্সন (বর্তমানে 4.2.6) ইনস্টল করুন বা ম্যানুয়ালি ডাউনলোড করুন (লিংক)। ম্যানুয়ালি ইনস্টল করার কেসে আপনাকে শুধু মডিউল আর্কাইভ এক্সট্রাক্ট করতে হবে C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity পাথে (ডাউনলোড করা ফাইল আনব্লক করা ভুলবেন না)।

NTFSSecurity মডিউল আপনার PowerShell সেশনে ইম্পোর্ট করুন:

Import-Module NTFSSecurity

মডিউলে উপলব্ধ কমান্ড তালিকা দেখান (৩৬টি কমান্ডলেট):

Get-Command -Module NTFSSecurity

PowerShell দিয়ে NTFS পারমিশন পরিচালনা করা

ফোল্ডারের বর্তমান NTFS পারমিশন তালিকা:
Get-Item 'c:\docs' | Get-NTFSAccess

আপনি দেখছেন, বর্তমান পারমিশনগুলো আরও সুবিধাজনক ফরম্যাটে দেখানো হয়েছে।

PowerShell দিয়ে NTFS পারমিশন পরিচালনা করা

একটি নির্দিষ্ট ফোল্ডারে কোনো ইউজার বা গ্রুপকে ফুল কন্ট্রোল পারমিশন দিতে নিচের কমান্ড চালান:
Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -PassThru

টিপ. ডিফল্টভাবে NTFSSecurity কমান্ডলেটগুলো কোনো ডেটা রিটার্ন করে না। কমান্ড এক্সিকিউশনের পর নতুন ACL দেখাতে -PassThru প্যারামিটার ব্যবহার করুন।

শুধু টপ ফোল্ডার লেভেলে পারমিশন দিয়ে নেস্টেড অবজেক্টের পারমিশন পরিবর্তন না করে (শুধু ফোল্ডার), এই কমান্ড ব্যবহার করুন:

Add-NTFSAccess c:\docs\public -Account corp\LMurkowski -AccessRights Modify -AppliesTo ThisFolderOnly

অ্যাসাইন করা NTFS পারমিশন রিমুভ করতে:

Remove-NTFSAccess -Path C:\DOCS -Account 'corp\LMurkowski' -AccessRights FullControl -PassThru

পরবর্তী কমান্ডটি ফোল্ডারের সব নেস্টেড অবজেক্টের পারমিশন দেওয়া অ্যাকাউন্টের জন্য রিমুভ করবে (ইনহেরিটেড পারমিশন বাদ দিয়ে):

Get-ChildItem -Path C:\docs -Recurse | Get-NTFSAccess -Account 'corp\LMurkowski' -ExcludeInherited |Remove-NTFSAccess -PassThru

নিচের কমান্ড দিয়ে Administrator অ্যাকাউন্টকে ফোল্ডারের সব নেস্টেড অবজেক্টের মালিক বানানো যায়:

Get-ChildItem -Path C:\docs -Recurse -Force | Set-NTFSOwner -Account 'Administrator'

ফোল্ডার অবজেক্টগুলোর সব ম্যানুয়ালি অ্যাসাইন করা পারমিশন ক্লিয়ার করতে (ইনহেরিটেড পারমিশন রিমুভ হবে না):

Get-ChildItem -Path C:\docs -Recurse -Force | Clear-NTFSAccess

ফোল্ডারের সব অবজেক্টের জন্য NTFS ইনহেরিটেন্স এনাবল করতে:

Get-ChildItem -Path C:\docs -Recurse -Force | Enable-NTFSAccessInheritance

ইনহেরিটেড বাদ দিয়ে শুধু ম্যানুয়ালি অ্যাসাইন করা পারমিশনগুলো দেখতে:

dir C:\docs | Get-NTFSAccess –ExcludeInherited

নির্দিষ্ট অ্যাকাউন্টের অ্যাসাইন করা পারমিশন দেখতে (এফেক্টিভ পারমিশনের সাথে কনফিউজ না হন, পরে আলোচনা করব):

dir C:\docs | Get-NTFSAccess -Account woshub\RShelby

PowerShell দিয়ে NTFS Effective Permissions দেখা

আপনি Get-EffectiveAccess কমান্ডলেট ব্যবহার করে নির্দিষ্ট ফাইল বা ফোল্ডারের জন্য ইফেক্টিভ NTFS পারমিশন দেখতে পারেন। ধরুন, আপনি নির্দিষ্ট ফোল্ডারে একাধিক AD সিকিউরিটি গ্রুপকে এক্সেস দিয়েছেন এবং জানতে চান নির্দিষ্ট ইউজার অ্যাকাউন্ট (বা SID) ফাইল ফোল্ডার এক্সেস করতে পারবে কিনা। AD গ্রুপের সব মেম্বার লিস্ট না করে এটা কীভাবে জানব? এখানেই ইফেক্টিভ NTFS পারমিশন দেখা খুব উপকারী। উদাহরণস্বরূপ, আপনাকে ফোল্ডারের সব নেস্টেড ডিরেক্টরিতে ডোমেন অ্যাকাউন্ট confroom-এর ইফেক্টিভ পারমিশন দেখতে হবে।

Get-ChildItem -Path c:\docs -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'corp\confroom’ | select Account, AccessControlType, AccessRights, FullName

বা নির্দিষ্ট ফাইলের জন্য ইফেক্টিভ পারমিশন দেখতে:

Get-Item -Path 'C:\docs\annual_report2019.xlsx' | Get-NTFSEffectiveAccess -Account 'corp\confroom' | Format-List

PowerShell দিয়ে NTFS পারমিশন পরিচালনা করা

ফাইল সিস্টেম অবজেক্টের বর্তমান ইফেক্টিভ ইউজার পারমিশন AccessRights ফিল্ডে নির্দিষ্ট থাকে।

  1. PowerShell-এ Delay যোগ করুন: সহজ Pause কমান্ড এবং ব্যবহারিক উদাহরণ

  2. দ্রুত গাইড: নিরাপদ ব্রাউজিং-এর জন্য ক্রোমে ফ্ল্যাশ সক্ষম করা

  3. Microsoft OneDrive-এ ফাইল ম্যানেজমেন্ট শিখুন: একটি সমৃদ্ধ গাইড

  4. উইন্ডোজে ট্যাগ ব্যবহার করে ফাইল ও ফোল্ডার আর্গানাইজেশনে দক্ষতা অর্জন