VIM: «sudo vim bad_idea»?

20

Пользователь irc в #Vim убедил меня не использовать Sudo с Vim как:

sudo vim bad_idea

Когда я делаю что-то в таких местах, как / var / www /, я не могу писать без него. Так что неиспользование sudo становится проблемой. Конечно, я могу вносить изменения в разных местах, таких как / tmp /, а затем копировать каталоги в / var / www. Однако я чувствую более легкий путь.

  1. Если вы не "sudo Vim", почему?
  2. Если да на первый вопрос, как вы обходите проблемы, не использовать sudo?
Лео Леопольд Герц 준영
источник

Ответы:

35

Я подпадаю под первую категорию: sudo vim /var/www/html/some_fileэто плохая идея; это позволяет экранировать оболочки, которые не зарегистрированы. Вместо этого используйте sudoedit /var/www/html/some_file; это имеет тот же эффект.

Кевин М
источник
5
Что такое «экранированные оболочки, которые не зарегистрированы»? и почему не имеет значения только в / var / www?
hasen
6
vim может запускать другие команды в командной строке. Однако, поскольку vim был запущен с помощью sudo и, следовательно, работает от имени пользователя root, любая из этих команд будет выполняться с правами root. Эти команды известны как «экранирование оболочки» и не регистрируются, как другие вызовы sudo. И это не ограничивается только / var / www; это везде, где я бы использовал это. Я даже связал "sudo vi" с "sudoedit" в моем файле bashrc.
Кевин М
Я вижу, к чему вы клоните и хотите согласиться, но уточняю. Мы понятия не имеем, регистрируются ли его обычные действия root и sudo root или нет. «sudo vim» позволяет запускать подоболочку от имени root - это очень точно; внутри этой оболочки sudo не будет контролировать то, что root может и не может делать.
PBR
3
Кевин, как тебе удалось переименовать "sudo vi" в "sudoedit"? Из руководства по bash ... «Символы /, $,` и = и любые метасимволы оболочки или символы цитирования, перечисленные выше, могут не появляться в псевдонимах ». ... пространство - это один из тех метасимволов, о которых идет речь.
PBR
9
Итак, это не псевдоним как таковой, но он имеет тот же эффект: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || команда sudo "$ @"; } '
Кевин М
10

См. Https://stackoverflow.com/questions/1005/getting-root-permissions-on-a-file-inside-of-vi :

% заменяется текущим именем файла, поэтому вы можете использовать:

: w! sudo tee%

hyperslug
источник
Если вы собираетесь использовать tee, я бы предложил ': w! Sudo tee%> / dev / null', чтобы вы не увидели, что весь файл отражается на вас. Вместо этого я обычно использую ': w! Dd of =%', поскольку он быстрее набирает текст и достигает того же самого. Конечно, это только когда я забыл использовать sudoedit / sudo -e.
Jamessan
7

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

rvim включен в vim. Это ограниченный vim, который не допускает команд оболочки. (Или разрешить вам приостановить vim по тем же причинам.)

Вопрос о том, нужно ли вам переходить к этим крайностям на вашем собственном поле, спорен.

Ричард Хоскинс
источник
1
+1. Полностью согласен. sudo vimзатем введите :!bashи вы получите оболочку от имени пользователя root - именно поэтому rvimсуществует
dbr
3
На самом деле, если вы можете sudo vim, вы можете sudo bashили sudo su -правы?
Дламблин
@diamblin Привилегии могут быть собраны с более мелкой детализацией, поэтому это не обязательно. Вот почему Рвим нужен. "sudo vim" - это то же самое, что и "sudo su -" для всех намерений и целей. На бит-боксе Debian, где один пользователь является системным администратором, все это академично.
Ричард Хоскинс
Как Ubuntu справляется с этой проблемой? На CentOS viзапускается vimно как root viзапускает vi. На Ubuntu vimиспользуется в обоих случаях, а sudo viтакже запускает vim...
cwd
6

При редактировании общесистемных файлов конфигурации это совершенно нормально - просто всегда помните, что вы root, и, таким образом, обладаете всей мощью, и отбрасывайте эти привилегии, как только они вам больше не нужны.

В особом случае /var/www/, т. Е. На страницах веб-сервера, вы можете подумать об изменении некоторых владельцев / групп / разрешений, но если и насколько это сильно зависит от вашей конкретной настройки (один / несколько пользователей, реальный веб-сервер / только локальный хост, динамический / статические и т. д.)

balpha
источник
6
+1 действительно - это лучший способ обработки страниц веб-сервера. Убедитесь, что у вас есть доступ к ним, а не повышать свои привилегии.
бедуар
1
-1 нет причин запускать vim с повышенными привилегиями, когда sudoedit будет выполнять ту же работу.
СмЛ
4

Такой вопрос заставляет меня бить себя по лбу. Я нахожусь с другой стороны безопасности: «безопасность не должна вмешиваться в пользовательский опыт, если только это не ожидается или требуется для предотвращения обычного человека, совершающего злонамеренную деятельность».

Предотвращение использования vim в sudo - это просто помощь группы. Как говорилось ранее, кто-то может просто использовать:

sudo su -

Или

sudo /bin/bash

Или

sudo nano file

Или

sudo my_exectuable_text_editor file

ЭСТ

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

Кто-то упомянул смену владельца / группы. Это неприятная проблема, как будто веб-сервер запущен от имени другого пользователя, и вы изменили права доступа к файлу, теперь ваш сайт неожиданно не работает. Ну, очевидно, это тебе не поможет. Вы можете добавить себя в группу, в которой работает веб-сервер, однако, если у группы нет прав на запись в файлы, вам необходимо выполнить команду chmod -R g + w * (или отдельные файлы chmod), которая может не выполняться. то, что вы хотите, и может быть хлопот, если вам нужно chmod каждый файл.

Некоторые люди даже предложили использовать rvim. Конечно, можно просто добавить строку в / etc / sudoers, чтобы позволить только определенным пользователям использовать sudo rvim, однако логично было бы предположить, что, если вам придется пойти по этому пути, может быть лучше реализовать веб-файловый менеджер. Таким образом, он работает от имени пользователя, на котором работает веб-сервер, поэтому нет проблем с правами доступа к файлам, и вы все равно можете иметь детальный контроль над тем, кто и какие файлы редактирует.

Мои два цента в любом случае.

Натали Адамс
источник
2

Запуск sudo vimне изменит $HOMEкаталог, поэтому вы будете запускать Vim с правами root, но $HOMEпо-прежнему будете указывать на вашего обычного пользователя.

Если вы запускаете Vim в первый раз, может случиться так, что ~/.viminfoфайл будет создан в вашем обычном пользовательском каталоге, но с правами root.

Денилсон Са Майя
источник
1
Зависит от судо. На моем ноутбуке sudo vim -c '!echo $HOME' -c qвыдает мою домашнюю папку, а на моем сервере - /root. Возможно, мне придется взглянуть на то, почему это так, может быть потому, что у одного OS X, а у другого Gentoo, или что-то, что связано с /etc/sudoersнастройкой.
Nemo157
Ага! Вы правы - я закончил здесь, задаваясь вопросом, почему мой .viminfoбыл доступен только для root.
Айрат
1

ЕСЛИ ЭТО ВАШ СОБСТВЕННЫЙ КОМПЬЮТЕР ... Я не вижу причин, по которым вы не можете использовать 'sudo vim', кроме крайнего случая, который заметил Денилсон - что он может создать ваш ~ / .viminfo, принадлежащий root.

Если нет - если системный администратор ограничивает то, что вы можете и не можете делать - для "man sudo": "в большинстве систем можно предотвратить побег оболочки с помощью функции sudo noexec. Подробнее см. В руководстве sudoers (5). "

Так что в этом случае, если ваш системный администратор обеспокоен тем, что вы можете запускать подоболочки как root изнутри vim, они могут использовать возможность noexec. Но ... вернемся к первоначальному случаю - если это ВАШ компьютер, я думаю, что вы чертовски безопасно работаете с sudo vim.

PBR
источник