Сброс dscl UniqueID и PrimaryGroupID пользователя root до 0 в Mac OS X
Из-за очень неисправного скрипта PrimaryGroupID моего корня равен 101, а UniqueID равен 101. У меня все еще есть доступ к root, я могу запустить sudo из своей учетной записи администратора, но sudo и root, очевидно, не имеют всех необходимых прав.
Я могу прочитать вывод dscl, например:
dscl . -read /Users/root PrimaryGroupID
PrimaryGroupID: 101
dscl . -list /Users UniqueID
root 101
dscl . -list /Groups PrimaryGroupID
wheel 0
Но я не могу ничего изменить с помощью dscl:
sudo dscl . -change /Users/root UniqueID 101 0
<main> attribute status: eDSPermissionError
<dscl_cmd> DS Error: -14120 (eDSPermissionError)
Что интересно, когда я бегу:
dscl . -read /Groups/wheel GroupMembership
GroupMembership: root
Как я могу сбросить UniqueID и PrimaryGroupID рута на 0. Я вошел в терминал через установочный DVD Mac OS X, у меня есть суперпользователь со всеми необходимыми правами, но я не выяснил, как получить доступ к записям службы каталогов оттуда.
1 ответ
Сначала сделайте резервную копию данных пользователя и группы; он хранится в /Volumes/yourbootvolume/var/db/dslocal/node /Default, поэтому просто скопируйте весь каталог в безопасное место на случай, если что-то пойдет не так. Как только это будет сделано, есть несколько различных способов вернуть uid root обратно в 0:
Вероятно, проще всего использовать текстовый редактор: edit /Volumes/yourbootvolume/var/db/dslocal/nodes/Default/users/root.plist, найдите раздел, подобный этому:
<key>uid</key>
<array>
<string>101</string>
</array>
и измените "101" на "0". Предупреждение: если вы испортили формат этого файла, вы можете сделать вашу систему еще более непригодной для использования, чем сейчас.
Другой вариант будет использовать dscl -f
чтобы открыть пользовательские файлы обычной системы, даже если вы загрузились с DVD. Убедитесь, что вы можете получить к ним доступ с помощью:
dscl -f /Volumes/yourbootvolume/var/db/dslocal/nodes/Default localonly -read /Local/Target/Users/root
Он должен распечатать различные свойства учетной записи root, включая "UniqueID: 101". Если это сработало, вы сможете восстановить его с помощью:
dscl -f /Volumes/yourbootvolume/var/db/dslocal/nodes/Default localonly -change /Local/Target/Users/root UniqueID 101 0