विंडोज़ में फ़ाइलों या फ़ोल्डरों तक पहुंच प्रबंधित करने के लिए, एक विशेष एसीएल (एक्सेस कंट्रोल लिस्ट) को एनटीएफएस फाइल सिस्टम ऑब्जेक्ट (एक फाइल या फ़ोल्डर) को सौंपा गया है। ऑब्जेक्ट का एसीएल उपलब्ध संचालन (अनुमतियों) को परिभाषित करता है जो उपयोगकर्ता या समूह फाइल सिस्टम ऑब्जेक्ट के साथ कर सकते हैं। ज्यादातर मामलों में, विंडोज़ प्रशासक फाइल एक्सप्लोरर ग्राफिक इंटरफेस (फाइल/फोल्डर गुण -> सुरक्षा टैब) या icacls कंसोल टूल का उपयोग फाइलों या फ़ोल्डरों पर एनटीएफएस अनुमतियों को प्रबंधित करने के लिए करते हैं। इस लेख में हम देखेंगे कि PowerShell cmdlets का उपयोग करके NTFS ऑब्जेक्ट पर अनुमतियों को कैसे प्रबंधित किया जाए। आप इन कमांड का उपयोग अपनी स्क्रिप्ट में या विंडोज फाइल सर्वर और वर्कस्टेशन पर एनटीएफएस एक्सेस अनुमतियों के प्रबंधन को स्वचालित करने के लिए कर सकते हैं।
गेट-एसीएल और सेट-एसीएल:एनटीएफएस एसीएल को प्रबंधित करने के लिए अंतर्निहित पावरशेल सीएमडीलेट्स
PowerShell v5 (Windows 10/Windows Server 2016) में, ACL को प्रबंधित करने के लिए दो अलग-अलग अंतर्निहित cmdlets हैं (Microsoft.PowerShell.Security का एक भाग) मॉड्यूल):
- गेट-एसीएल — NTFS फ़ाइल सिस्टम पर विशिष्ट ऑब्जेक्ट के लिए वर्तमान ACL प्राप्त करने की अनुमति देता है;
- सेट-एसीएल - वर्तमान वस्तु ACL को जोड़ने/बदलने के लिए उपयोग किया जाता है।
हम इन बिल्ट-इन cmdlets पर विस्तार से विचार नहीं करेंगे, क्योंकि ज्यादातर मामलों में उनकी विशेषताएं वास्तविक कार्यों में NTFS अनुमतियों को प्रबंधित करने के लिए पर्याप्त नहीं हैं। आइए कुछ सामान्य उपयोग के मामलों पर ध्यान दें।
किसी फ़ोल्डर (फ़ाइल) के वर्तमान स्वामी और असाइन की गई NTFS अनुमतियों की सूची प्राप्त करने के लिए, कमांड चलाएँ:
get-acl C:\docs\ |fl
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 . के रूप में भी प्रदर्शित होती हैं स्ट्रिंग - हमने इस एक्सेस विवरण प्रारूप को विंडोज सर्विस अनुमतियां सेट करने वाले आलेख में संक्षेप में देखा।
आप NTFS अनुमतियों की सूची को केवल एक स्पष्ट प्रारूप में प्रदर्शित कर सकते हैं:
(get-acl C:\docs\).access
आप वर्तमान NTFS अनुमतियों को एक NTFS फ़ोल्डर (ऑब्जेक्ट) से कॉपी कर सकते हैं और उन्हें दूसरे पर लागू कर सकते हैं:
Get-Acl e:\old_docs | Set-Acl C:\docs
सेट-एसीएल का उपयोग करने की मुख्य समस्या यह है कि cmdlet हमेशा संसाधन स्वामी को बदलने का प्रयास करता है, भले ही आपको केवल 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) # the first $True shows if the folder is protected, the second $True specifies if the current NTFS permissions have to be copied
Set-Acl -Path $path -AclObject $acl
NTFSSecurity PowerShell मॉड्यूल के साथ फ़ाइल अनुमतियां प्रबंधित करना
जैसा कि मैंने पहले ही बताया, फ़ाइल सिस्टम ऑब्जेक्ट को प्रबंधित करने के लिए अंतर्निहित PowerShell cmdlets बहुत सुविधाजनक नहीं है। विंडोज़ में फ़ाइलों और फ़ोल्डरों पर एनटीएफएस अनुमतियों को प्रबंधित करने के लिए आपको पावरशेल गैलरी से एक अलग मॉड्यूल का बेहतर उपयोग करना चाहिए - NTFSSecurity . आप Install-Module -Name NTFSSecurity
का उपयोग करके NTFSSecurity मॉड्यूल (4.2.6, वर्तमान में) का नवीनतम संस्करण स्थापित कर सकते हैं। कमांड या इसे मैन्युअल रूप से डाउनलोड करें (लिंक)। इसे मैन्युअल रूप से स्थापित करते समय, आपको बस मॉड्यूल संग्रह को C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity
में निकालने की आवश्यकता है (डाउनलोड की गई फ़ाइल को अनब्लॉक करना न भूलें)।
अपने PowerShell सत्र में NTFSSecurity मॉड्यूल आयात करें:
Import-Module NTFSSecurity
मॉड्यूल में उपलब्ध आदेशों की सूची प्रदर्शित करें (36 cmdlets):
Get-Command -Module NTFSSecurity
फ़ोल्डर की वर्तमान NTFS अनुमतियों की सूची बनाएं:Get-Item 'c:\docs' | Get-NTFSAccess
जैसा कि आप देख सकते हैं, वर्तमान अनुमतियां अधिक सुविधाजनक रूप में दिखाई जाती हैं।
किसी उपयोगकर्ता या समूह को किसी विशिष्ट फ़ोल्डर पर पूर्ण नियंत्रण की अनुमति देने के लिए, यह आदेश चलाएँ:Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -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
निम्न आदेश के साथ, आप व्यवस्थापक खाते को फ़ोल्डर में सभी नेस्टेड ऑब्जेक्ट का स्वामी बना सकते हैं:
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
पावरशेल के साथ एनटीएफएस प्रभावी अनुमतियां कैसे देखें?
आप प्रभावी NTFS अनुमतियां देख सकते हैं Get-EffectiveAccess
. का उपयोग करके किसी विशिष्ट फ़ाइल या फ़ोल्डर के लिए सीएमडीलेट। मान लीजिए, आपने कई एडी सुरक्षा समूहों को कुछ फ़ोल्डर तक पहुंच प्रदान की है और आप जानना चाहते हैं कि विशिष्ट उपयोगकर्ता खाता (या एसआईडी) फाइल फ़ोल्डर तक पहुंच सकता है या नहीं। उपयोगकर्ता खाते से संबंधित एडी समूहों के सभी सदस्यों को सूचीबद्ध किए बिना आप इसे कैसे कर सकते हैं? यह वह स्थिति है जब प्रभावी 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
फ़ाइल सिस्टम ऑब्जेक्ट पर वर्तमान प्रभावी उपयोगकर्ता अनुमतियाँ पहुँच अधिकार . में निर्दिष्ट हैं फ़ील्ड.