
Я случайно допустил ошибку в sudoers
файле, и теперь не могу ее исправить, потому что если я попытаюсь изменить файл, он выдаст сообщение об отказе в доступе. Если я использую , sudo
чтобы открыть файл, то он говорит об ошибке синтаксиса и не sudoers
найдены допустимые источники, и не выполняет команду. Я использую raspbian, разновидность Debian.
Кто-нибудь знает, как выбраться из этой ловушки?
решение1
- Если вы знаете
root
пароль (и он установлен), вы можете использоватьsu
его дляroot
редактирования/etc/sudoers
. - Если ваша корневая файловая система находится на SD-карте, вы можете выгрузить ее и редактировать
/etc/sudoers
на ПК или любом другом устройстве, при условии, что оно оснащено устройством для чтения карт. - Вы можете войти в командную строку U-Boot (загрузчика) (обычно нажатием кнопки на клавиатуре или через UART) и добавить
1
в командную строку ядра Linux для входа в однопользовательский режим. В этом режиме вы будетеroot
и сможете редактировать/etc/sudoers
. Смотрите такжеэтот.
решение2
Вам придется загрузиться в однопользовательском режиме.
https://serverfault.com/questions/482079/debian-boot-to-single-user-mode
Как пользователь root, вы сможете отредактировать файл sudoers, чтобы исправить это. Я настоятельно рекомендую использовать команду visudo
для редактирования файла sudoers в будущем, чтобы избежать необходимости проходить через это снова, так как visudo проверяет синтаксис файла перед его сохранением.
решение3
Если вы используете облачный экземпляр, то у вас немного больше проблем.
Существуют методы, зависящие от дистрибутива, но если у вас уже установлен и запущен Docker, то вы, как правило, можете использовать контейнер Docker, чтобы исправить проблему. Это связано с тем, что, как правило, служба Docker работает как root, и все, что делается с смонтированным томом внутри контейнера, влияет на хост как root.
На хосте:
docker run --rm -ti -v /etc:/usr/local/etc busybox sh
"Busybox" — это просто небольшой приятный дистрибутив, загрузка которого не займет много времени. Если у вас уже есть образ Docker, в котором есть оболочка, просто используйте его.
В Docker-контейнере:
cd /usr/local/etc
vi sudoers
Возможно, вы добавили в /etc/sudoers.d/
каталог плохой файл. В этом случае, вероятно, просто удалите этот файл.
Когда вы выйдете из контейнера, вы sudo
снова сможете.
Ух ты!