Из-за очень ошибочного сценария мой 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