Как мне исправить мой файл / etc / sudoers, чтобы он узнал меня?

Ваша проблема в том, что выражение {...} является также правильным синтаксисом оболочки. Например, выполните:

echo file/{one,two}

И вы получите:

file/one file/two

Итак, когда вы выполняете:

curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'

Выражение {foo,bar,baz} интерпретируется вашим shell, и curl фактически получает командную строку:

  curl --user youruser:secret https://api.example.com/foo https://api.example.com/bar https://api.example.com/baz -o '#1.json'

Поскольку curl не видит {. ...}, вы не получите волшебной обработки для #1. Решение заключается в том, чтобы заключить URL в одинарные кавычки:

curl --user $USER:$PASS 'https://api.example.com/{foo,bar,baz}' -o '#1.json'

Одинарные кавычки препятствуют расширению строки оболочкой.

1
21.10.2015, 09:23
2 ответа

Если sudo был вашим единственным способом доступа к учетной записи root, и у вас нет запущенной оболочки root, вам придется восстановить доступ к учетной записи root внешними средствами, обычно требующими физического доступа к машине. Наиболее распространенным способом является выбор "однопользовательского режима" или "режима восстановления" в приглашении к загрузке (может потребоваться выполнить какое-либо действие, например, нажать и удерживать Shift, чтобы появилось приглашение к загрузке). Как это сделать, зависит от настроек загрузчика, которые в разных дистрибутивах выполняются по-разному, поэтому поищите документацию или учебники, относящиеся к вашему дистрибутиву.

Если вы не можете получить приглашение root в однопользовательском режиме, вы можете перейти в еще более урезанный режим, добавив init=/bin/sh в командную строку ядра. Вы попадете в оболочку root, но вам нужно выполнить несколько команд, чтобы получить пригодное для использования окружение:

mount -t proc proc /proc
mount -o remount,rw /
bash

Теперь вы можете редактировать проблемный файл.

Если вам нужно несколько терминалов в однопользовательском режиме, вы можете открыть новую оболочку на другой виртуальной консоли командой openvt. Для переключения между виртуальными консолями используйте Ctrl+Alt+F1, Ctrl+Alt+F1 и т.д.

Не редактируйте sudoers напрямую. Используйте visudo. Эта команда вызывает редактор, затем проверяет синтаксис файла и прерывает модификацию при наличии синтаксической ошибки. Вы все еще можете заблокировать себя, например, удалив строку, которая предоставила вам доступ, но это снижает риск.

В Ubuntu в качестве редактора по умолчанию используется nano. Во многих других дистрибутивах по традиции используется vi. Чтобы выбрать другой редактор, установите переменную окружения VISUAL, например,

export VISUAL=joe

Вы можете использовать каталог /var/tmp в качестве временного хранилища, если хотите сделать копию файла, которую можно прочитать после перезагрузки в обычном режиме. Убедитесь, что файл доступен для чтения вашей обычной учетной записи.

cp /etc/sudoers /var/tmp
chmod a+r /var/tmp/sudoers

Совет: всякий раз, когда вы вносите изменения, которые могут повлиять на вашу способность получить доступ к учетной записи, держите запущенную оболочку в одном окне и проверяйте доступ в другом окне. Если вы не получаете доступ, переключитесь обратно на запущенную оболочку и устраните проблему или немедленно отмените изменения.

1
29.04.2021, 00:22

Я очень признателен за помощь. В файле sudo, который я набрал в режиме восстановления, действительно была ошибка. Мне не хватало закрывающей кавычки при указании путей в строке «Defaults secure_path» (точнее, «чтобы быть более точным). Мне удалось решить проблему, и теперь у меня снова работает sudo :). Отлично!

Большое спасибо за вашу помощь, дамы и господа.

0
29.04.2021, 00:22

Теги

Похожие вопросы