Сброс 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
Другие вопросы по тегам