नए उपयोगकर्ता के लिए पुराने उपयोगकर्ता के SID को कैसे बांधें NTFS फ़ाइल स्वामित्व और अनुमतियाँ विंडोज के नए सिरे से पुनर्स्थापित करने के बाद?


18

हर बार जब हम Windows पुनर्स्थापित, यह एक नई सिड उपयोगकर्ता के लिए भी उपयोगकर्ता नाम के रूप में है पैदा करेगा ही पहले की तरह।

// example (not real SID format, just show the problem)
user   SID
--------------------
liuyan S-old-501    // old SID before reinstall
liuyan S-new-501    // new SID after  reinstall

पुनः स्थापित करने के बाद कष्टप्रद समस्या NTFS फ़ाइल owerhip है और हार्ड ड्राइव डिस्क पर अनुमतियाँ अभी भी पुराने उपयोगकर्ता के SID के साथ जुड़ी हुई हैं।

मैं NTFS फ़ाइलों के स्वामित्व और अनुमति सेटिंग को रखना चाहता हूं, फिर नए उपयोगकर्ता को पुराने उपयोगकर्ता का SID लेने देना चाहता हूं, ताकि मैं अनुमति की समस्या के बिना पहले की तरह फ़ाइलों तक पहुंच बना सकूं।

caclsकमांड लाइन टूल,, ऐसी स्थिति में नहीं किया जा सकता क्योंकि फ़ाइल करता है नया उपयोगकर्ता के अंतर्गत आता है तो यह के साथ विफल होगा पहुंच अस्वीकृत कर दी त्रुटि। और यह स्वामित्व नहीं बदल सकता है।

यहां तक ​​कि अगर मैं SubInACLउपकरण के माध्यम से सत्ता को बदल सकता हूं , caclsतो पुराने उपयोगकर्ता की अनुमति को नहीं हटा सकता क्योंकि पुराने उपयोगकर्ता नई स्थापना पर मौजूद नहीं है, और नए उपयोगकर्ता के लिए पुराने उपयोगकर्ता की अनुमति की प्रतिलिपि नहीं बना सकता है ।

तो, क्या हम पुराने उपयोगकर्ता के SID को नए उपयोगकर्ता को नए सिरे से स्थापित विंडोज पर बांध सकते हैं?

नमूना परीक्षण बैच

@echo off
REM Additional tools used in this script
REM PsGetSid http://technet.microsoft.com/en-us/sysinternals/bb897417
REM SubInACL http://www.microsoft.com/en-us/download/details.aspx?id=23510
REM
REM make sure these tools are added into PATH

set account=MyUserAccount
set password=long-password
set dir=test
set file=test.txt

echo Creating user [%account%] with password [%password%]...
pause
net user %account% %password% /add
psgetsid %account%
echo Done !

echo Making directory [%dir%] ...
pause
mkdir %dir%
dir %dir%* /q
echo Done !

echo Changing permissions of directory [%dir%]: only [%account%] and [%UserDomain%\%UserName%] has full access permission...
pause
cacls %dir% /G %account%:F
cacls %dir% /E /G %UserDomain%\%UserName%:F
dir %dir%* /q
cacls %dir%
echo Done !

echo Changing ownership of directory [%dir%] to [%account%]...
pause
subinacl /file %dir% /setowner=%account%
dir %dir%* /q
echo Done !

echo RunAs [%account%] user to write a file [%file%] in directory [%dir%]...
pause
runas /noprofile /env /user:%account% "cmd /k echo some text %DATE% %TIME% > %dir%\%file%"
dir %dir% /q
echo Done !

echo Deleting and Recreating user [%account%] (reinstall simulation) ...
pause
net user %account% /delete
net user %account% %password% /add
psgetsid %account%
echo Done ! %account% is recreated, it has a new SID now

echo Now, use this "same" account [%account%] to access [%dir%], it will failed with "Access is denied"
pause
runas /noprofile /env /user:%account% "cmd /k cacls %dir%"
REM runas /noprofile /env /user:%account% "cmd /k type %dir%\%file%"
echo Done !

echo Changing ownership of directory [%dir%] to NEW [%account%]...
pause
subinacl /file %dir% /setowner=%account%
dir %dir%* /q
cacls %dir%
echo Done ! As you can see, "Account Domain not found" is actually the OLD [%account%] user

echo Deleting user [%account%] ...
pause
net user %account% /delete
echo Done !

echo Deleting directory [%dir%]...
pause
rmdir %dir% /s /q
echo Done !

आप केवल फ़ाइल का स्वामित्व लेने के खिलाफ क्यों हैं?
रामहुंड

यदि केवल स्वामित्व लिया जाता है, तो कुछ फाइलें सुरक्षित नहीं हैं, क्योंकि अनुमति अभी भी पुराने उपयोगकर्ता के SID पर सेट है।
लियूयान

@LiuYan an 研 लेकिन जब आप स्वामित्व लेते हैं, तो आपको सभी अनुमतियों को संपादित करने में सक्षम होना चाहिए।
इस्ज

1
@IsziRoryorIsznti, सच है अगर कुछ फाइलें हैं और सभी अनुमति माता-पिता से विरासत में मिली हैं। लेकिन जब बहुत सारी फाइलें होती हैं, और लगभग हर फाइल की अलग-अलग अनुमति होती है (जैसे कि सिग्विन के तहत फाइलें), तो मैं बस उन्हें एक ही अनुमति से नहीं बदल सकता।
लियूयान

जवाबों:


11

आप अनाथ SID को नए के साथ बदलने के लिए setacl का उपयोग कर सकते हैं । उदाहरण के लिए, अपने पुराने SID को नए के साथ बदलने के लिए निम्नलिखित का उपयोग करें:

setacl.exe -on C:\ 
           -ot file 
           -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst" 
           -rec cont

अच्छा उपकरण! यही मैं चाहता था (हालांकि यह उपयोगकर्ता SID को परिवर्तित नहीं करता है)! यह अब मेरी सूची में होना चाहिए! हालाँकि, एक अप्रत्याशित व्यवहार है: जब मैंने अपने परीक्षण बैच (निर्देशिका और फ़ाइल को हटाए बिना) के बाद यह कोशिश की, तो निर्देशिका को इसके माता-पिता से अनुमति मिल जाएगी, यह कुछ अवांछित है। नोट: निर्देशिका के ACL को caclsकमांड के माध्यम से बदल दिया जाता है , लेकिन यह इनहेरिटेंस ध्वज नहीं बदला जाता है।
लियूयान

मुझे लगता है कि SetACL डॉक्स के अनुसार C: \\ होना आवश्यक है।
cdmckay

@cdmckay: निश्चित नहीं है। यह कहता है: "यदि वस्तु का नाम एक बैकस्लैश के साथ समाप्त होता है और आप इसे उद्धरण में संलग्न करते हैं, तो सुनिश्चित करें कि अंतिम बैकस्लैश को किसी अन्य बैकस्लैश से बचना है"। लेकिन मैं इसे उद्धरण में संलग्न नहीं कर रहा हूं।
डैनियल Gehriger

1
2016-01-08 के अनुसार, ट्रस्टी कार्रवाई के लिए क्या निर्दिष्ट करना आवश्यक है या मालिक सेट नहीं है। लाइन होने की जरूरत है । फिर भी, यह सही ढंग से सेट नहीं करता है कि समूह के लिए जो भी साइबर पिकअप करता है (चित्र "अज्ञात" के रूप में प्रदर्शित होता है )। -actn trustee-actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g"/bin/ls -l
मकयेन Mak

1
@ माकन: मुझे साइबरविन के साथ भी यही समस्या थी और उसने इसे ठीक कर दिया -rec cont_objक्योंकि यह फाइलों पर बदलाव भी लागू करता है।
डेनिस बखरेव

3
  1. कंप्यूटर के SID को बदलने या किसी स्थानीय खाते के SID को बदलने का कोई समर्थित तरीका नहीं है ताकि यह कंप्यूटर से मेल न खाए।

  2. आपके प्रश्न का अर्थ यह है कि आप ऑपरेटिंग सिस्टम को बार-बार पुनर्स्थापित कर रहे हैं, जिसे आपको करने की आवश्यकता नहीं है। यदि आपको बार-बार समस्या हो रही है, जिसे पुन: स्थापित करने की आवश्यकता है, तो यह पता लगाने के लायक हो सकता है कि हर बार उन्हें पुन: स्थापित करने के बजाय क्या कारण है।

  3. कुछ समूह अच्छी तरह से ज्ञात SID का उपयोग करते हैं, जिसका अर्थ है कि वे कंप्यूटर को फिर से स्थापित करने पर नहीं बदलते हैं। इसलिए आप समय से पहले अनुमतियाँ चुनकर अपनी समस्या को सरल बना सकते हैं ताकि वे इन समूहों का उपयोग करें। इनमें से कुछ समूह जो उपयोगी हो सकते हैं, उनमें प्रशासक, पावर उपयोगकर्ता, उपयोगकर्ता, प्रमाणित उपयोगकर्ता और इंटरएक्टिव शामिल हैं।

  4. संपूर्ण फ़ोल्डर ट्री के लिए अनुमतियों को रीसेट करने का एक धीमा लेकिन आसान तरीका यह है कि इसे कॉपी करें:

    robocopy /e /b c:\original-folder c:\new-copy
    

    इसे एक उन्नत कमांड प्रॉम्प्ट से चलाया जाना चाहिए। / B विकल्प का उपयोग करने से रोबोकॉपी का उपयोग फ़ाइलों पर सुरक्षा को बाईपास करने के विशेषाधिकार को बहाल करता है। c:\new-copyशुरू करने से पहले बनाएं और अनुमतियों को इच्छानुसार सेट करें।

    आपके द्वारा कॉपी किए जाने के बाद आप मूल फ़ोल्डर को हटाने के लिए इस कमांड का उपयोग कर सकते हैं:

    robocopy /e /b c:\empty-folder c:\original-folder
    

तो अगर मैं इसे व्यवस्थापक के रूप में करता हूं और एक पुराने उपयोगकर्ता स्थान से नए उपयोगकर्ता स्थान पर फ़ाइलों की प्रतिलिपि बनाता है तो क्या यह नए उपयोगकर्ता को tge करने के लिए प्रत्येक फ़ाइल का tge SUD सेट करता है।
त्रुक्त्र

@trusktr: आप क्या मतलब है निर्भर करता है; फ़ाइलों का स्वामित्व उस व्यवस्थापक उपयोगकर्ता को सौंपा जाता है जो प्रतिलिपि कर रहा है, लेकिन अनुमतियाँ मूल फ़ोल्डर से विरासत में मिली हैं। आमतौर पर, केवल अनुमतियाँ मायने रखती हैं।
हैरी जॉनसन

अच्छी तरह से मूल रूप से मैं जो करना चाहता हूं वह सभी फाइलों को एक पुराने विंडोज सी से कॉपी करता है: \ उपयोगकर्ता \ उपयोगकर्ता नाम एक नए विंडोज सी के लिए: \ उपयोगकर्ता \ उपयोगकर्ता नाम स्थान ताकि सभी फाइलें नए उपयोगकर्ता से संबंधित हों (बस एक नए विंडोज में माइग्रेट करना मूल रूप से स्थापित करें, और मेरे पिछले उपयोगकर्ता की फ़ाइलों को रखना चाहते हैं)। यह पुराने और नए दोनों में समान उपयोगकर्ता नाम है। क्या फाइलें एक जगह से दूसरी जगह पर एडमिन की ट्रिक के रूप में फाइल की एक साधारण कॉपी होगी? मुझे यह जानने की उत्सुकता है कि क्या फाइलों की SID नए उपयोगकर्ता के SID में बदल जाएगी क्योंकि मैं अपने SID के लिनक्स उपयोगकर्ता के लिए फाइल को मैप करने के लिए NTFS-3G का उपयोग कर रहा हूं।
त्रुक्त्र

@trusktr: स्वामित्व उस स्थिति में कोई समस्या नहीं होगी, लेकिन उपयोगकर्ता प्रोफ़ाइल में सामान होता है (विशेष रूप से उपयोगकर्ता की रजिस्ट्री हाइव) जिसमें उस तरह से माइग्रेट नहीं किया जा सकता है। जहां तक ​​अनुमतियाँ हैं, रोबोकॉपी ठीक रहेगा, लेकिन मैं पूरे <यूज़र> फ़ोल्डर के बजाय प्रत्येक व्यक्तिगत फ़ोल्डर (जैसे, दस्तावेज़, डेस्कटॉप, आदि) को कॉपी करने की सलाह देता हूं। AppData जैसे छिपे हुए फ़ोल्डरों को छोड़ दें - सुनिश्चित करें कि आप एक प्रति रखते हैं, लेकिन उन्हें नए खाते के शीर्ष पर कॉपी न करें।
हैरी जॉनसन

आदर्श रूप से मैं सिर्फ एक अलग पार्टीशन (पुराने विंडोज पार्टीशन) पर अपना <यूजरनेम> फोल्डर रखना चाहूंगा और अपने नए विंडोज के यूजर यूजरनेम के लिए उस <यूजरनेम> फोल्डर को होम फोल्डर बनाऊंगा।
त्रुष्टक २५'१४ को २:५५
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.