Wie binde ich die SID eines alten Benutzers an einen neuen Benutzer, um den Besitz und die Berechtigungen von NTFS-Dateien nach einer Neuinstallation von Windows beizubehalten?

18

Bei jeder Neuinstallation von Windows wird eine neue SID für den Benutzer erstellt, auch wenn der Benutzername derselbe wie zuvor ist.

// 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

Das ärgerliche Problem nach der Neuinstallation ist, dass die NTFS-Dateikapazität und die Berechtigungen auf der Festplatte weiterhin mit der SID des alten Benutzers verknüpft sind.

Ich möchte die Besitz- und Berechtigungseinstellungen von NTFS-Dateien beibehalten und dann den neuen Benutzer die SID des alten Benutzers übernehmen lassen, damit ich wie bisher ohne Berechtigungsprobleme auf Dateien zugreifen kann.

Das caclsBefehlszeilentool kann in einer solchen Situation nicht verwendet werden, da die Datei einem neuen Benutzer gehört und daher ein Fehler auftritt, bei dem der Zugriff verweigert wird. und es kann nicht den Besitzer wechseln.

Auch wenn ich die Berechtigung des alten Benutzers über das SubInACLTool ändern kann , caclskann ich die Berechtigung des alten Benutzers nicht entfernen, da der alte Benutzer bei der Neuinstallation nicht vorhanden ist, und ich kann die Berechtigung des alten Benutzers nicht auf den neuen Benutzer kopieren .

Können wir also einfach die SID des alten Benutzers an den neuen Benutzer auf dem frisch installierten Windows binden?

Probentestreihe

@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 !
LiuYan 刘 刘
quelle
Warum sind Sie dagegen, nur die Datei zu übernehmen?
Ramhound
Wenn nur der Besitz übernommen wird, kann auf einige Dateien nicht zugegriffen werden, da die Berechtigung weiterhin auf die SID des alten Benutzers festgelegt ist.
LiuYan 刘 研
@LiuYan 刘 刘 Nachdem Sie den Besitz übernommen haben, sollten Sie in der Lage sein, alle Berechtigungen zu bearbeiten.
Iszi
1
@IsziRoryorIsznti, true, wenn nur wenige Dateien vorhanden sind und alle Berechtigungen von den Eltern geerbt wurden. Aber wenn es viele Dateien gibt und fast jede Datei individuelle Berechtigungseinstellungen hat (z. B. Dateien unter Cygwin), kann ich sie nicht einfach durch dieselben Berechtigungen ersetzen.
LiuYan 刘 研

Antworten:

11

Sie können setacl verwenden , um die verwaisten SIDs durch eine neue zu ersetzen. Verwenden Sie beispielsweise Folgendes, um Ihre alte SID durch die neue zu ersetzen:

setacl.exe -on C:\ 
           -ot file 
           -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst" 
           -rec cont
Daniel Gehriger
quelle
Nettes Werkzeug! Das wollte ich (obwohl es die Benutzer-SID nicht geändert hat)! Es ist jetzt in meiner Must-Have-Liste! Es tritt jedoch ein unerwartetes Verhalten auf: Wenn ich dies nach meinem Teststapel versuchte (ohne das Verzeichnis und die Datei zu löschen), erbt das Verzeichnis Berechtigungen von seinem übergeordneten Element, was unerwünscht ist. Hinweis: Die ACL des Verzeichnisses wird über einen caclsBefehl geändert , das Vererbungsflag wird jedoch nicht geändert.
LiuYan 刘 研
Ich denke, das muss C: \\ laut den SetACL-Dokumenten sein.
Cdmckay
@ cdmckay: nicht sicher. Es heißt: "Wenn der Objektname mit einem Backslash endet und Sie ihn in Anführungszeichen setzen, stellen Sie sicher, dass Sie den letzten Backslash mit einem anderen Backslash umgehen". Aber ich füge es nicht in Anführungszeichen ein.
Daniel Gehriger
1
Ab dem 08.01.2016 muss festgelegt werden, was für die Treuhänderaktion oder den Eigentümer nicht festgelegt werden soll. Die -actn trusteeLinie muss sein -actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g". Auch dann wird nicht korrekt festgelegt, was Cygwin für die Gruppe aufnimmt (Standbilder werden in als "unbekannt" angezeigt /bin/ls -l).
Makyen
1
@Makyen: Ich hatte das gleiche Problem mit Cygwin und habe es behoben, -rec cont_objda es auch Änderungen an Dateien vornimmt .
Denis Bakharev
3
  1. Es gibt keine unterstützte Möglichkeit, die SID des Computers oder die SID eines lokalen Kontos so zu ändern, dass sie nicht mit der des Computers übereinstimmt.

  2. Der Wortlaut Ihrer Frage impliziert, dass Sie das Betriebssystem häufig neu installieren, was Sie nicht tun sollten. Wenn Sie wiederholt Probleme haben, für die eine Neuinstallation erforderlich ist, ist es möglicherweise sinnvoll, die Ursachen herauszufinden, anstatt sie jedes Mal neu zu installieren.

  3. Bestimmte Gruppen verwenden bekannte SIDs, was bedeutet, dass sie sich nicht ändern, wenn der Computer neu installiert wird. Sie können Ihr Problem einfacher gestalten, indem Sie die Berechtigungen im Voraus auswählen, damit sie diese Gruppen verwenden. Einige dieser möglicherweise nützlichen Gruppen sind Administratoren, Hauptbenutzer, Benutzer, authentifizierte Benutzer und INTERACTIVE.

  4. Eine langsame, aber einfache Möglichkeit, Berechtigungen für einen gesamten Ordnerbaum zurückzusetzen, besteht darin, sie zu kopieren:

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

    Dies muss an einer Eingabeaufforderung mit erhöhten Rechten ausgeführt werden. Wenn Sie die Option / b verwenden, verwendet Robocopy das Wiederherstellungsrecht, um die Sicherheit für die Dateien zu umgehen. Erstellen c:\new-copySie, bevor Sie beginnen, und legen Sie die gewünschten Berechtigungen fest.

    Mit diesem Befehl können Sie den ursprünglichen Ordner löschen, nachdem Sie ihn kopiert haben:

    robocopy /e /b c:\empty-folder c:\original-folder
    
Harry Johnston
quelle
Wenn ich dies also als Administrator durchführe und Dateien von einem alten Benutzerspeicherort in den neuen Benutzerspeicherort kopiere, wird dann der SUD jeder Datei so eingestellt, dass ein neuer Benutzer erstellt wird.
Trusktr
@trusktr: Kommt darauf an, was du meinst; Das Eigentum an den Dateien wird dem Administrator zugewiesen, der die Kopie erstellt, die Berechtigungen werden jedoch vom übergeordneten Ordner übernommen. In der Regel sind nur die Berechtigungen von Bedeutung.
Harry Johnston
Im Grunde genommen möchte ich alle Dateien von einem alten Windows-Speicherort C: \ Users \ username in einen neuen Windows-Speicherort C: \ Users \ username kopieren, damit alle Dateien dem neuen Benutzer gehören (nur auf ein neues Windows migrieren) Grundsätzlich installieren und die Dateien meines vorherigen Benutzers behalten wollen). Es ist der gleiche Benutzername sowohl im alten als auch im neuen. Wird eine einfache Kopie der Dateien von einem Ort zum anderen als Administrator den Trick tun? Ich bin gespannt, ob sich die SIDs der Dateien in die SID des neuen Benutzers ändern, da ich NTFS-3G verwende, um die Datei-SIDs meinem Linux-Benutzer zuzuordnen.
Trusktr
@trusktr: In diesem Fall ist der Besitz kein Problem, aber das Benutzerprofil enthält Dinge (insbesondere die Registrierungsstruktur des Benutzers), die auf diese Weise nicht migriert werden können. Robocopy ist in Bezug auf Berechtigungen in Ordnung, ich empfehle jedoch, jeden einzelnen Ordner (z. B. Dokumente, Desktop usw.) anstelle des gesamten Ordners <Benutzername> zu kopieren. Lassen Sie die versteckten Ordner wie AppData weg - stellen Sie sicher, dass Sie eine Kopie behalten, aber kopieren Sie sie nicht über das neue Konto.
Harry Johnston
Im Idealfall möchte ich meinen <Benutzername> -Ordner nur auf einer separaten Partition (der alten Windows-Partition) belassen und diesen <Benutzername> -Ordner zum Basisordner für meinen Benutzer <Benutzername> in meinem neuen Windows machen.
Trusktr