Обычно для редактирования конфигурационных файлов администраторы используют запуск редактора с повышением прав, например:
sudo editor
Но это небезопасно, так как процесс редактора запускается с правами суперпользователя, что может оказаться серьезной брешью в системе безопасности.
Скажем, это дает возможность эксплуатировать локальные уязвимости на предмет повышения прав и даже без уязвимостей выполнять некоторые «интересные» вещи.
Редактор vim, например, имеет специальный режим, позволяющий выполнять системные команды. Т.е. вполне реален следующий сценарий:
sudo vim
:!rm -rf /*
На практике это не обязательно будет столь деструктивно, но вполне может позволить непривилегированному пользователю получить доступ туда, куда не положено, скажем к закрытым ключам или иной чувствительной информации.
Чтобы избежать подобного сценария sudo предлагает специальную команду sudoedit, которая на первый взгляд делает тоже самое, но несколько по-другому.
Основное отличие заключается в том, что sudoedit сначала делает временную копию файла и открывает ее редактором, установленным в переменной окружения EDITOR с правами обычного пользователя.
Если редактор не установлен, то будет открыть редактор по умолчанию, в Debian и Ubuntu это nano. Но даже если мы запустим через sudoedit тот же vim, то это нам ничего не даст, так как он будет запущен с правами обычного пользователя.
После окончания редактирования sudoedit проверит права пользователя и только после этого заменит оригинальный файл отредактированным.
При этом для пользователя процесс работы с файлом никак не отличается от того, если бы он вызвал редактор через sudo. Но sudoedit позволяет делать это безопасно, не запуская дополнительные процессы с правами суперпользователя.
