Каждый раз, когда мы переустанавливаем Windows, он создает новый SID для пользователя, даже если имя пользователя такое же, как и раньше.
// 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, а разрешения на жестком диске по-прежнему связаны с SID старого пользователя.
Я хочу сохранить настройки владения и разрешения для файлов NTFS, а затем разрешить новому пользователю принимать SID старого пользователя, чтобы я мог обращаться к файлам, как и раньше, без проблем с разрешениями.
Инструмент cacls
командной строки не может быть использован в такой ситуации, поскольку файл принадлежит новому пользователю, поэтому он потерпит неудачу с ошибкой « Доступ запрещен» . и это не может изменить владельца.
Даже если я могу изменить принадлежность через SubInACL
инструмент, я cacls
не могу удалить разрешение старого пользователя, поскольку старый пользователь не существует при новой установке, и не может скопировать разрешение старого пользователя новому пользователю.
Итак, можем ли мы просто привязать SID старого пользователя к новому пользователю в только что установленной Windows?
Образец тестовой партии
@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 !
источник
Ответы:
Вы можете использовать setacl, чтобы заменить потерянные идентификаторы безопасности новыми. Например, используйте следующую команду для замены старого SID на новый:
источник
cacls
команды, но его флаг наследования не изменяется.-actn trustee
Линия должна быть-actn trustee -trst "n1:S-old-501;n2:S-new-501;ta:repltrst;w:d,s,o,g"
. Даже в этом случае он неправильно устанавливает то, что cygwin подхватывает для группы (кадры отображаются как «неизвестные»/bin/ls -l
).-rec cont_obj
потому что она также применяет изменения к файлам.Не поддерживается способ изменить SID компьютера или SID локальной учетной записи, чтобы он не совпадал с идентификатором компьютера.
Формулировка вашего вопроса подразумевает, что вы часто переустанавливаете операционную систему, что вам не нужно делать. Если у вас возникают повторяющиеся проблемы, требующие переустановки, возможно, стоит выяснить, что их вызывает, а не просто переустанавливать каждый раз.
Некоторые группы используют хорошо известные идентификаторы безопасности, что означает, что они не меняются при переустановке компьютера. Таким образом, вы можете упростить вашу проблему, выбрав разрешения заранее, чтобы они использовали эти группы. Некоторые из этих групп, которые могут быть полезны, включают в себя администраторов, опытных пользователей, пользователей, прошедших проверку пользователей и INTERACTIVE.
Один медленный, но простой способ сброса разрешений для всего дерева папок - это скопировать его:
Это должно быть запущено из командной строки с повышенными правами. Использование параметра / b заставляет robocopy использовать привилегию восстановления, чтобы обойти защиту файлов. Создайте
c:\new-copy
перед запуском и установите необходимые разрешения.Вы можете использовать эту команду, чтобы удалить исходную папку после того, как вы скопировали ее:
источник