Windows भाषा के बावजूद, मैं ICACLS कमांड को सभी के लिए पूर्ण पहुंच रखने के लिए एक फ़ोल्डर कैसे सेट कर सकता हूं?


9

पृष्ठभूमि

बोला मेरे पास यह आज्ञा है

icacls C:\FullyAccessibleFolder /grant Users:(OI)(CI)F

यह विंडोज के अंग्रेजी संस्करणों में ठीक काम करता है, लेकिन फ्रांसीसी संस्करणों में काम करने के लिए प्रतीत नहीं होता है, निम्नलिखित त्रुटि देते हुए, संभवतः Usersफ्रेंच में अलग होने के कारण । विंडोज में Everyoneअनुवाद किया जाता है Tout le monde, इसलिए इसका कोई हल नहीं है।

Users: Le mappage entre les noms de compte et les ID de sécurité n'a pas été effectué.

जिसे Google अनुवाद करता है

Users: The mapping between account names and security IDs was not performed.

सवाल

क्या एक कमांड है जिसका उपयोग मैं एक फ़ोल्डर सेट करने के लिए कर सकता हूं और इसकी सभी सामग्रियों की पुनरावृत्ति सभी उपयोगकर्ताओं के लिए पूरी तरह से विंडोज के विभिन्न भाषा संस्करणों में काम करने की पूर्ण अनुमति होगी?

वेब से सामग्री

यह पृष्ठ काफी हद तक इसी तरह की समस्या के साथ बात करता है कि जर्मन और फ्रेंच में कैसे Everyoneबनता Jederहै Tout le monde


2
बस SID का उपयोग करें: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F हर जगह काम करता है।
बेन

2
@, यह होना चाहिए icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, आप तारांकन छोड़ दिया है।
हैरी जॉनसन

जवाबों:


10

फ्रेंच संस्करणों में काम नहीं करता है, संभवतः Usersअलग होने के कारण

आपके पास तीन विकल्प हैं, नीचे विस्तृत:

  1. अनुवादित नाम पाने के लिए भाषा पोर्टल का उपयोग करें

  2. UsersSID से स्थानीय नाम वापस लें

  3. UsersSID का उपयोग करेंicacls


विकल्प 1: भाषा पोर्टल (Microsoft शब्दावली के लिए विहित संसाधन) का उपयोग करें

उपयोगकर्ताओं के लिए एक खोज रिटर्न:

स्थानीयकृत Microsoft उत्पादों में अनुवाद

    English Translation         Product
    Users   Utilisateurs        Windows 7
    Users   des utilisateurs    Windows 7
    Users   Utilisateurs        Windows 8 Modern Voice
    Users   Utilisateurs        Windows 8
    Users   Utilisateurs        Windows 8.1
    USERS   UTILISATEURS        Windows 8.1
    Users   Utilisateurs        Windows 10
    Users   des utilisateurs    Windows 10
    Users   Utilisateurs        Windows 10 Anniversary Update
    users   utilisateurs        Windows 10 Anniversary Update

इससे पता चलता है कि निम्नलिखित कमांड काम कर सकती है:

icacls C:\FullyAccessibleFolder /grant Utilisateurs:(OI)(CI)F

विकल्प 2: UsersSID से स्थानीयकृत नाम वापस लें ( S-1-5-32-545)

SID: S-1-5-32-545

नाम: उपयोगकर्ता

विवरण: एक अंतर्निहित समूह। ऑपरेटिंग सिस्टम की प्रारंभिक स्थापना के बाद, एकमात्र सदस्य प्रमाणीकृत उपयोगकर्ता समूह है। जब कोई कंप्यूटर किसी डोमेन से जुड़ता है, तो डोमेन उपयोगकर्ता समूह को कंप्यूटर पर उपयोगकर्ता समूह में जोड़ा जाता है।

स्रोत विंडोज ऑपरेटिंग सिस्टम में जाने-माने सुरक्षा पहचानकर्ता

स्थानीयकृत Usersसमूह का नाम पुनः प्राप्त करने के लिए :

यह सरल स्क्रिप्ट आपको (S-1-5-32-545)दिए गए पीसी पर 'उपयोगकर्ता' समूह का वास्तविक नाम देगी :

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'")
    Wscript.Echo objAccount.AccountName

इसे vbs एक्सटेंशन वाली फ़ाइल में रखें (मान लें usersName.vbs)।

अब चलाएं:

echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F

स्रोत Cacls, विंडोज 7, पूर्ण अनुमतियाँ, wmz द्वारा स्थानीय नाम


विकल्प 3: UsersSID का उपयोग करेंicacls

निम्न आदेश का उपयोग करें:

icacls C:\FullyAccessibleFolder /grant *S-1-5-32-545:(OI)(CI)F

हैरी जॉनसन द्वारा स्रोत टिप्पणी


मैंने डेविडपोस्टिल से उत्तर स्वीकार कर लिया है क्योंकि यह एक वास्तविक कमांड लाइन तरीके से करता है, जो बैच या पीएस स्क्रिप्ट का उपयोग करते समय बहुत अच्छा होता है। अंत में मैंने वास्तव में C # में थोड़ा निष्पादन योग्य बनाया जो सिर्फ एक रास्ता लेता है और ठीक वही करता है जिसकी मुझे आवश्यकता है। यह यहां के जवाबों के अनुसार अनुकूलन योग्य नहीं है, और इसके लिए .NET फ्रेमवर्क की आवश्यकता है, लेकिन यह मेरे विशेष उद्देश्य के अनुरूप है। अगर किसी को दिलचस्पी है, तो यहां C # कोड का आधार है जो मैंने समाप्त किया है। stackoverflow.com/a/35461832/1639615
Geesh_SO

xcaclsएक स्क्रिप्ट है जिसे आप डाउनलोड कर सकते हैं। कोई जरूरत नहीं है; icaclsविंडोज में बनाया गया है और वही काम कर सकता है।
हैरी जॉनसन

@HarryJohnston सही है, लेकिन मेरा उत्तर दिखा रहा है कि स्थानीयकृत संस्करण को कैसे पुनः प्राप्त किया जाए Users... मैंने उत्तर को स्पष्ट कर दिया है क्योंकि हमें xaclsउद्धृत समाधान के भाग की आवश्यकता नहीं है ।
DavidPostill

@HarryJohnston मैंने icaclsसीधे आपके साथ क्रेडिट का उपयोग करके भी जोड़ा है ।
DavidPostill

7

आपको AD-group को उसके नाम से नहीं, बल्कि SID नंबर द्वारा निर्दिष्ट करना होगा।
"EveryOne", "डोमेन उपयोगकर्ता" आदि जैसे मानक समूहों के लिए, मानकीकृत SID संख्याएँ होती हैं, जो MSDN पृष्ठ पर जाने-माने सुरक्षा पहचानकर्ताओं (SID) में पाई जा सकती हैं ।

निम्नलिखित सबसे आम रिश्तेदार पहचानकर्ता हैं।

यहां छवि विवरण दर्ज करें

SID की संरचना निम्नलिखित के रूप में वर्णित है:

SID के घटकों को कल्पना करना आसान होता है जब मानक संकेतन का उपयोग करके SID को बाइनरी से स्ट्रिंग प्रारूप में परिवर्तित किया जाता है:

SRX-Y1-Y2-yn-1-yn

    Component                   Definition

    S                         Indicates that the string is a SID
    R                         Revision level
    X                         Identifier authority value
    Y            A series of subauthority values, where n is the number of values

उदाहरण के लिए, अंतर्निहित व्यवस्थापक समूह के लिए SID को निम्न स्ट्रिंग के रूप में मानकीकृत SID अंकन में दर्शाया गया है:

एस-1-5-32-544

इस SID के चार घटक हैं:

  • एक संशोधन स्तर (1)

  • एक पहचानकर्ता प्राधिकरण मूल्य (5, NT प्राधिकरण)

  • एक डोमेन पहचानकर्ता (32, बिलिन)

  • एक रिश्तेदार पहचानकर्ता (544, व्यवस्थापक)

सुरक्षा पहचानकर्ता कैसे काम करते हैं


यह इंगित करने योग्य है कि सभी उपयोगकर्ता डिफ़ॉल्ट रूप से उपयोगकर्ता समूह का हिस्सा हैं। इसलिए यदि आप "पूर्ण पहुंच: सभी उपयोगकर्ता खातों को देना चाहते हैं, तो बस SID का उपयोग करें S-1-5-32-544, और फिर ACL को संशोधित करके समूह की सभी अनुमतियों को फ़ाइल या फ़ोल्डर के लिए प्रश्न में दे दें
Ramhound

@ रामहाउंड 544प्रशासक हैं, 545उपयोगकर्ता हैं।
DavidPostill

@ डेविडप्रोस्टिल - हाँ; कॉपी और पेस्ट त्रुटि।
रामहाउंड

@ रामाउंड बहुत बेहतर है। यह एक फोन पर रहने के दौरान मैं कर सकता था सबसे अच्छा था। संपादन के लिए धन्यवाद।
टॉनी

3

यदि आपको PowerShell स्क्रिप्ट पसंद है, लेकिन SID के लिए नंबर याद रखने में समस्या है:

$acl = Get-Acl .\myfolder
$sid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($sid, 'FullControl', 'ObjectInherit,ContainerInherit', 'None', 'Allow')
$acl.AddAccessRule($rule)
Set-Acl .\myfolder $acl

मुझे पता है कि टाइपिंग के एक टन की तरह दिखता है, लेकिन ये लंबे पहचानकर्ता टैब-पूर्ण हैं:

  • System.Security.Principal.SecurityIdentifier से securityi
  • System.Security.Principal.WellKnownSidType से wellknownsi
  • System.Security.AccessControl.FileSystemAccessRule से filesystem

ये सभी स्ट्रिंग्स .NET पहचानकर्ता हैं, इसलिए वे स्थानीयकृत नहीं होते हैं।

यदि आप Everyoneइसके बजाय SID चाहते हैं , के WorldSidस्थान पर उपयोग करें BuiltinUsersSid। सभी WellKnownSidTypeविकल्पों की सूची प्राप्त करने के लिए , MSDN देखें या यह कमांड चलाएँ:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name

FileSystemAccessRule सिड और उपयोग के बिना group names?
किकेनेट

@Kiquenet मुझे पूरी तरह से यकीन नहीं है कि आप क्या पूछ रहे हैं, लेकिन अगर आप मानव-पठनीय समूह नाम निर्दिष्ट करना पसंद करते हैं, तो वह अब भाषा-स्वतंत्र नहीं होगा। यदि आप इसके साथ ठीक हैं, तो आप $sid =लाइन को हटा सकते हैं और समूह की पहचान करने वाले स्ट्रिंग के साथ लाइन $sidमें प्रतिस्थापित कर सकते हैं $rule =
बेन एन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.