Безопасно ли использовать Vim в сочетании с sudo?


25

Не рекомендуется использовать sudoс графическим приложением gedit, как описано в этой ссылке . Соответственно, я склонен использовать vimс sudo.

Недавно я заметил, что my ~/.viminfoпринадлежит root на довольно новой установке Ubuntu 16.04 (Xenial Xerus), поэтому мне стало интересно, считается ли даже Vim графическим или есть какие-то другие проблемы с вызовом sudo vim. После смены владельца на себя через:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

и в последующем запустить sudo vimя не смог ~/.viminfo владеть root. Тем не менее, я уверен, что недавно он принадлежал root.

Это нецелесообразно вызывать sudo vim?



1
Вы также можете использовать vim без sudo, а когда дело доходит до сохранения файла, вы можете использовать:w !sudo tee %
ChatterOne

Ответы:


22

Да, это безопасно.

Проблема в sudo geditтом, что приложения с графическим интерфейсом используют определенные файлы, такие как ~/.cache/dconf, и после повышения, geditэтот файл становится владельцем root. Ну, этот конкретный файл содержит пользовательские настройки для приложений с графическим интерфейсом, включая рабочий стол, поэтому, если система не может прочитать эти настройки - это плохо. IIRC пользователь не может запустить конкретный рабочий стол. Данные о последних файлах пользователя recently-used.xbelтакже затрагиваются.

С другой стороны, у Vim такой проблемы нет. Он не использует базу данных, связанную с графическим интерфейсом, и ничего не вводит recently-used.xbel. Он был создан только для консоли, хотя gVim также существует. На самом деле, в некоторых системах Vim - ваш единственный выбор редактора. Так что это безопаснее, чем gedit, поскольку не вызывает таких же проблем. Вы по-прежнему редактируете как root в обоих случаях, поэтому у вас могут возникнуть проблемы с неправильным редактированием.

Согласно этому сообщению в блоге :

Когда вы в первый раз используете vim, файл ~/.viminfoсоздается, и если вы используете его sudo vimв первый раз после установки его в новой системе, для прав доступа ~/.viminfoбудет установлен владелец root вместо пользователя по умолчанию.

Хотя автор указывает, что это может привести к проблемам, в этом нет ничего сложного - только chownфайл обратно к себе.

Смотрите также:


6
Обратите внимание , что ВИМ является не безопасным в многопользовательской системе , где вы пытаетесь ограничить права администратора других пользователей. Пользователь может использовать sudo vimдля получения копии vim, работающей от имени пользователя root, а затем :!/bin/shдля получения оболочки root.
Марка

3
@ Марк, а что мешает пользователю просто делать sudo /bin/sh? Практически говоря, если у пользователя уже есть root-доступ, ему не нужно использовать сложные приемы.
Сергей Колодяжный,

7
/etc/sudoersФайл. Вам не нужно этого делать %wheel ALL=(ALL) ALL- sudoконфигурация позволяет гораздо больше нюансов, чем это.
Марк

1
@ Марка ОК, хорошая идея - не все системы имеют одинаковые настройки.
Сергей Колодяжный

Хм ... Изменится ли разрешение, даже если файл существует? Предположим, что я взломал учетную запись пользователя без прав администратора, но я не знаю его пароль (возможно, мне удалось открыть оболочку). Означает ли это , что я могу скопировать /bin/bashк ~/.viminfo, положить Setuid на него и ждать , пока пользователь бежать , sudo vimчтобы он chowned в корень?
ChatterOne

15

Также возможно использовать, sudoeditчтобы достигнуть этого; он открывает временную копию файла в вашем редакторе, и ваш редактор работает как вы. Со страницы руководства :

  1. Временные копии делаются из файлов, которые будут редактироваться с владельцем, установленным для вызывающего пользователя.

  2. Редактор, указанный в политике, запускается для редактирования временных файлов. Политика sudoers использует переменные окружения SUDO_EDITOR, VISUALи EDITOR(в указанном порядке). Если ни одна из них SUDO_EDITOR, VISUALили EDITORне установлена, используется первая программа, указанная в sudoers(5)опции редактора .

  3. Если они были изменены, временные файлы копируются обратно в исходное местоположение, а временные версии удаляются.

Это прекрасно работает с vim (это то, что я обычно делаю), и я думаю, что это позволит вам также использовать gedit. Есть некоторые ограничения безопасности .


4
Это намного лучше, если вы предпочитаете использовать собственную конфигурацию vim вместо root.
NieDzejkob

2
Это также безопаснее, если вы не хотите запускать случайный код плагина от имени пользователя root (однако плагины, работающие так же, как и вы, могут нанести большой ущерб, если они вредоносные, поэтому не используйте плагины, которым вы не доверяете первое место).
Кевин

2

Ссылка очень старая (2013). Он рекомендует использовать gksudoили gksuдля графических приложений, но оба они устаревают. Позже принятый ответ также предполагает, sudo -Hхотя.

В последнее время общее мнение сообщества Ask Ubuntu заключается в использовании:

sudo -H gedit /path/to/filename

Остается единственная проблема, sudoкоторая не имеет профиля для настроек вкладок, расширений, переноса слов, имени шрифта, размера шрифта и т. Д. Вы можете наследовать их из своего профиля пользователя, хотя и с помощью скрипта-обертки, например: Как мне синхронизировать мой корень gedit с предпочтениями моего пользователя gedit?


2

Да, это безопасно для использования sudo vim. Проблемы, с которыми я сталкиваюсь,

  • Необходимость выхода из файла и повторного открытия с sudo vimвозможностью редактирования.

  • Наличие рута vimrcпо умолчанию, а не моих индивидуальных полезных вещей.

Вот функция, которую вы можете вставить в свой, bashrcчтобы позволить vim автоматически выполнять sudo, если вы не можете редактировать файл как обычно.

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}

В Ubuntu sudoпо умолчанию сохраняется $HOMEпеременная окружения, что означает, что sudo vim будет использоваться ваш настроенный .vimrc, а также означает, что sudo vimизменит владельца ~/.viminfoна root: root и доставит вам некоторые неудобства.
Мариус Гедминас

Принятый ответ не согласен с вами viminfo.
Jeremysprofile

1

В качестве root можно использовать vi. Будут времена, когда вам нужно будет отредактировать файл, требующий привилегий sudo или root, например, изменить файл сетевого интерфейса или, возможно, отредактировать файл конфигурации sshd. Использование root для графического содержимого плохо, потому что люди будут подключаться к IRC или просматривать Интернет как root. Если они получат вирус при этом, у него будет полный root-доступ.


2
Существует по крайней мере одно конкретное исключение для использования vi в качестве root. Файл, который контролирует путь sudo (/ etc / sudoers), никогда не следует редактировать с помощью vi. Для этого файла следует использовать команду visudo. Вы даже не указываете, какой файл редактируется, это просто особый случай.
user628388

1

Что-то, что не было упомянуто в других ответах, это то, что запуск vim с root даст привилегии root тем плагинам, которые вы установили. Таким образом, вопрос о том, безопасно ли работать от имени пользователя root, зависит от того, доверяете ли вы тем разработчикам плагинов (или авторам их проекта), что они не владеют вашей системой.

Vim обычно проверяется сопровождающими пакетов во всех дистрибутивах Linux, поэтому им легко доверять. Тем не менее, плагины vim обычно устанавливаются непосредственно из репозиториев GitHub и, как правило, имеют меньше аудитов пользователей (может быть, ноль). Другими словами, нет проверки с ними.

Если вы не загружаете плагины в режиме root, я думаю, что запуск от имени root зависит от того, доверяете ли вы разработчикам vim. Однако вы можете пропустить необходимость доверять им, используя sudoedit, созданный теми же разработчиками sudo, людьми, которым мы в любом случае уже доверяли root-доступ. GKFX и NieDzejkob уже упоминали, почему sudoedit идеален. Помимо того, что вам не нужно доверять root-доступ кому-либо еще, кроме разработчиков sudo, вы можете загрузить все плагины, которым вы уже доверяли, с помощью обычной учетной записи пользователя.


Эта дискуссия о недоверии различным разработчикам кажется немного неполной; Если у вас sudoedit /etc/apt/sources.listустановлен скомпрометированный плагин, он может вставить вредоносный репозиторий и получить root-доступ при следующем запуске обновлений. Я уверен, что есть длинный список файлов, защищенных от корня, к которым применимо нечто подобное. И, конечно же, не каждый вирус требует рута; Вы можете получить банковские реквизиты не более, чем с расширением браузера.
GKFX
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.