Я случайно удалил файл sudoers в Mac OS X; есть ли способ его восстановить?

9

Я случайно удалил sudoersфайл в Mac OS X; есть ли способ его восстановить?
И как только вы восстановите его, как вы установите его в режим 0440?

грабли
источник

Ответы:

8

Если я правильно понимаю вашу проблему, то в настоящее время у вас нет sudoers, и вы пытаетесь сделать sudo, и это не работает. В этом случае, чтобы заставить sudo работать, вы можете сделать следующее:

  1. Создайте файл sudoers в вашей домашней папке. Вы можете найти контент по умолчанию здесь sudoers
  2. Откройте папку «/ etc» в Finder («Перейти» -> «Перейти в папку…»).
  3. Теперь скопируйте файл sudoers из домашней папки в папку / etc через Finder.
  4. Придет приглашение с запросом пароля.
  5. Введите правильный пароль, и все готово.

Для проверки sudo работает нормально cd /etcи sudo vim sudoers. Вы должны иметь возможность просматривать файл sudoers через редактор vim. Любая операция чтения / записи в / etc требует команды sudo.

Я знаю, что немного удивительно, что даже после отсутствия sudoers через пользовательский интерфейс мы можем выполнять операции в / etc. Но у меня это сработало :)

Tanmay
источник
1
Действительно странно, что GUI-эквивалент того, что невозможно из командной строки, работает. Я предполагаю, что Apple тестирует рабочие процессы GUI более тщательно, чем командная строка. Слава богу, этот пост спас меня.
Шридхар Сарнобат
Приятно знать, что это помогло тебе.
Tanmay
6

Я предполагаю, что вы пытаетесь запустить sudoкоманду, и она дает вам ошибку, /etc/sudoersкоторая не имеет правильных разрешений?

Если вы ранее предоставили Adminстатус своей учетной записи , вы сможете исправить разрешения через графический интерфейс. Откройте папку «/ etc» в Finder («Перейти» -> «Перейти к папке ...»), затем откройте sudoersсвойства файла. Нажмите на замок. Предоставьте adminгруппу read/write, systemпользователя read-only, wheelгруппу read-onlyи everyoneгруппуno access . Разрешения теперь должны быть правильными.

Если вы не вошли в adminгруппу, вам нужно перезагрузить OSX в однопользовательском режиме и выполнить команду chmod 0440 /etc/sudoers.

Джордж М
источник
6

Включите пользователя root, используя системные настройки, а затем создайте / etc / sudoers, войдя в систему как пользователь root, используя

touch /etc/sudoers; chmod 440 /etc/sudoers

Примечание. Поскольку в этом случае команда запускается от имени пользователя root и идентификатор группы /etcравен 0, по умолчанию она должна принадлежать правильному пользователю и группе после повторного создания, но если по какой-то причине это не так, выполните команду

chown root:wheel /etc/sudoers

После того, как вы создали, /etc/sudoersиспользуйте Visudo, чтобы вставить этот код в него:

# sudoers file.

#
# This file MUST be edited with the 'visudo' command as root.
# Failure to use 'visudo' may result in syntax or file permission errors
# that prevent sudo from running.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults specification
Defaults    env_reset
Defaults    env_keep += "BLOCKSIZE"
Defaults    env_keep += "COLORFGBG COLORTERM"
Defaults    env_keep += "__CF_USER_TEXT_ENCODING"
Defaults    env_keep += "CHARSET LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE"
Defaults    env_keep += "LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME"
Defaults    env_keep += "LINES COLUMNS"
Defaults    env_keep += "LSCOLORS"
Defaults    env_keep += "SSH_AUTH_SOCK"
Defaults    env_keep += "TZ"
Defaults    env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"
Defaults    env_keep += "EDITOR VISUAL"

# Runas alias specification

# User privilege specification
root    ALL=(ALL) ALL
%admin  ALL=(ALL) ALL

# Uncomment to allow people in group wheel to run all commands
# %wheel    ALL=(ALL) ALL

# Same thing without a password
# %wheel    ALL=(ALL) NOPASSWD: ALL

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now
ALL ALL=(ALL)                   NOPASSWD:/opt/dplat/bin/Revision/CMUpdatePackage/Installer.app/Contents/MacOS/I  nstaller
ALL ALL=(ALL)     NOPASSWD:/opt/dplat/bin/UpdatePackageInstaller.app/Contents/MacOS/UpdatePackage    Installer

Если вы не являетесь администратором, вы можете вместо этого загрузить систему в однопользовательском режиме (это можно сделать, выключив устройство и удерживая команду + s при запуске) и запустив:

mount -uw /

и вы будете в терминале с привилегиями root, и вы сможете запустить вышеуказанные команды для настройки /etc/sudoers

Джон Милитер
источник
3

Я создал файл / tmp / sudoers с содержимым в ответе Джона Милитера и выполнил вариант команды tmm1.

osascript -e 'do shell script "cat /tmp/sudoers > /etc/sudoers; chown root:wheel /etc/sudoers" with administrator privileges'

Ницца!!!

noelmcloughlin
источник
2

Ответы выше охватывают содержимое файла по умолчанию, как переместить его на место с помощью Finder и изменить его разрешения. Однако sudo будет жаловаться, если владельцем файла sudoers не является root. Единственный способ сменить владельца без sudo - через эту команду:

osascript -e 'do shell script "chown root:wheel /etc/sudoers" with administrator privileges'

tmm1
источник
1
Это , кажется , самое большее ответить на «как вы установите его в режим 0440» часть, которая была уже были рассмотрены, но не решить аспект восстановления. Поскольку в OP отсутствует файл / etc / sudoers, как это поможет им?
Джефф Шаллер
Вы можете создать файл в любом редакторе и переместить его на место с помощью Finder. Сложная часть - это смена владельца на root, что невозможно с помощью любого другого метода.
tmm1