Почему нам нужно использовать visudo вместо прямого изменения файла sudoers?

84

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

Что же visudoделает, что прямое изменение файла не делает? Что может пойти не так?

Dason
источник

Ответы:

104

visudoпроверяет синтаксис файла перед его перезаписью sudoers.

Если вы используете простой редактор, испортите синтаксис и сохраните ... sudo(вероятно) перестанет работать, и, поскольку его /etc/sudoersможно изменить только с помощью root, вы застряли (если у вас нет другого способа получить root).

Кроме того, это гарантирует, что изменения будут одной атомарной операцией. Эта блокировка важна, если вам нужно убедиться, что никто не сможет испортить ваши тщательно продуманные изменения конфигурации. Для редактирования других файлов от имени root, кроме того, /etc/sudoersесть sudoeditкоманда, которая также защищает от таких конфликтов редактирования.

Мат
источник
3
Вау, никогда не знал о судоедите. Это не работает на OS X, поэтому я предполагаю, что это инструмент GNU? Во всяком случае, классная информация здесь. Я всегда редактировал вручную, и у меня никогда не было проблем - теперь я понимаю, что это была просто удача, и инструмент может помочь предотвратить катастрофу. Спасибо!
Harv
2
@Harv. GNU не существует, sudoа OS X имеет инструменты GNU. Поскольку sudo был впервые создан как приложение с открытым исходным кодом, вероятно, нет оснований для его множества реализаций. sudoи sudoeditте же команды, sudoведет себя как sudo -eпри вызове, как sudoedit. Я считаю, что просто OS X забыл добавить sudoedit -> sudoссылку, но вы все равно должны иметь возможность использовать sudo -eили вызывать sudoс argv [0], установленным sudoeditдля получения того же поведения.
Стефан Шазелас
Интересно, что visudoпо умолчанию используется nano.
Тим
3
@Tim: «реальное» значение по умолчанию - vi, но его можно настроить на использование чего-то другого. Так что nano действительно может быть по умолчанию в вашем дистрибутиве / настройке. Смотрите справочную страницу .
Мат
2
@ AngularInDepth.com, последствия довольно очевидны. Если вы сохраните неправильный файл sudoers, то система не сможет его проанализировать. Так что если я сделаю a sudo vim /etc/sudoersи испорчу синтаксис, то я не смогу sudo vim /etc/sudoersснова это исправить. По сути, все возможности повышения привилегий через sudo будут потеряны, поскольку система не сможет проанализировать файл.
Спенсер Д
23

Со страницы руководства visudo:

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

Также проверьте этот ответ от serverfault .

amyassin
источник