Назад | Перейти на главную страницу

Сбросить dscl UniqueID и PrimaryGroupID root на 0 в Mac OS X

Из-за очень ошибочного сценария мой root 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, у меня есть суперпользователь со всеми необходимыми правами, но я не понял, как получить доступ к записям службы каталогов оттуда.

Сначала сделайте резервную копию данных пользователя и группы; он хранится в / Volumes / yourbootvolume / var / db / dslocal / nodes / Default, поэтому просто скопируйте весь этот каталог в безопасное место на случай, если что-то еще пойдет не так. Как только это будет сделано, есть несколько разных способов сбросить uid root на 0:

Наверное, проще всего использовать текстовый редактор: отредактируйте /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