VIM: "sudo vim bad_idea"?


20

Користувач irc у #Vim закликав мене не використовувати судо з Vim:

sudo vim bad_idea

Коли я роблю речі в таких місцях, як / var / www /, я не можу писати без цього. Тож невикористання судо стає проблемою. Звичайно, я міг би змінити в різних місцях, таких як / tmp /, а потім скопіювати файли в / var / www. Однак я відчуваю простіший спосіб.

  1. Якщо ви не "sudo Vim", чому?
  2. Якщо так, перше запитання, як уникнути проблем, щоб не використовувати судо?

Відповіді:


35

Я підпадаю під першу категорію: sudo vim /var/www/html/some_fileце погана ідея; це дозволяє виконувати оболонки, які не реєструються. Натомість використовуйте sudoedit /var/www/html/some_file; це має той же ефект.


5
Що таке "втечі оболонки, які не реєструються"? і чому це не має значення лише в / var / www?
hasen

6
vim має право виконувати інші команди в командному рядку. Однак, оскільки vim був запущений через sudo, і тому він працює як root, будь-яка з цих команд буде виконуватись з root правами. Ці команди відомі як "втечі з оболонки" і не реєструються так, як виглядають інші виклики судо. І це не обмежується лише / var / www; я б усюди використовував це. Я навіть псевдонімував "sudo vi" на "sudoedit" у своєму файлі bashrc.
Кевін М

Я бачу, до чого ви стикаєтесь, і хочу погодитися, але уточнюйте. Ми не маємо уявлення про те, чи реєструються його звичайні дії з кореневою системою Su і Sudo. "sudo vim" дозволяє запускати нижню частину оболонки як корінь - це дуже точно; всередині цієї оболонки "sudo" не контролюватиме, що root може, а що не може робити.
пбр

3
Кевін, як вам вдалося псевдонім "sudo vi" на "sudoedit"? З посібника з bash ... "Символи /, $,` і = та будь-які метахарактеристики оболонки або цитуючі символи, перелічені вище, не можуть відображатися в псевдонімі. " ... космос є одним із тих метахарактерів, про які йдеться.
пбр

9
Гаразд, це не псевдонім як такий, але він має такий же ефект: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || команда sudo "$ @"; } '
Кевін М

10

Посилання: /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

% замінено на поточне ім'я файлу, таким чином ви можете використовувати:

: w! sudo tee%


Якщо ви збираєтеся використовувати 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
Насправді, якщо ви можете судо vim, ви можете, ймовірно, sudo bashчи sudo su -правильно?
dlamblin

@diamblin Привілеї можна назвати більш детальними, ніж це, тому не обов'язково. Ось чому rvim потрібен. "sudo vim" - те саме, що "sudo su -" для всіх намірів і цілей. У вікні Debian, де одним користувачем є системний адміністратор, все це є академічним.
Річард Хоскінс

Як ubuntu вирішує це питання? На CentOS viзапусків , vimале як кореневі viзапуски vi. У Ubuntu vimвикористовується в обох випадках, а sudo viтакож запускає vim...
cwd

6

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

У спеціальному випадку /var/www/, тобто на сторінках веб-сервера, ви можете подумати про зміну деяких прав власності / груп / дозволів --- але якщо і як багато в чому залежить від конкретних налаштувань (один / багатокористувацький, реальний веб-сервер / просто localhost, динамічний / статичний тощо)


6
+1 дійсно - це найкращий спосіб обробки сторінок веб-сервера. Переконайтеся, що у вас є доступ до них, а не підвищуйте свої привілеї.
bedwyr

1
-1 немає причин запускати vim із підвищеними привілеями, коли sudoedit зробить ту саму роботу.
sml

4

Таке запитання змушує мене стукнути лобом. Я з іншого боку безпеки: "безпека не повинна перешкоджати користувальницькій роботі, якщо тільки не очікується або вимагається перешкодити звичайній людині робити зловмисну ​​діяльність".

Попередження використання sudo vim - це лише допомога. Як було сказано раніше, хтось може просто використовувати:

sudo su -

Або

sudo /bin/bash

Або

sudo nano file

Або

sudo my_exectuable_text_editor file

ect

Якщо ви дійсно переживаєте за те, щоб хтось зробив щось шкідливе на коробці, не надайте їм привілеїв sudo (або, очевидно, root-коду) пільг. Немає кулі ковзання, щоб запобігти зловмисній діяльності з використанням судо, і ви зведете з розуму лише "застосувавши" всі "виправлення", щоб переконатися, що людина не може зробити нічого шкідливого.

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

Деякі люди навіть пропонували використовувати rvim. Звичайно, можна просто додати рядок у / etc / sudoers, щоб дозволити певним користувачам лише sudo rvim, однак, логічно випливає, що якщо вам доведеться пройти цей маршрут, можливо, буде краще застосувати веб-файловий менеджер. Таким чином він працює як користувач, на якому працює веб-сервер, тому жодних проблем з дозволом на файли не виникає, і ви все одно можете мати детальний контроль над тим, хто редагує файли.

Мої два центи все одно.


2

Запуск sudo vimне змінить $HOMEкаталог, тому ви будете запускати Vim з дозволами root, але $HOMEвсе ще вказує на вашого звичайного користувача.

Якщо ви вперше запускаєте Vim, може статися, що ~/.viminfoфайл буде створений у вашому звичайному каталозі користувачів, але з кореневими дозволами.


1
Залежить від судо. На моєму ноутбуці sudo vim -c '!echo $HOME' -c qдають мою домашню папку, але на моєму сервері вона дає /root. Мені, можливо, доведеться поглянути на те, чому це може бути тому, що одна ОС X, а інша Gentoo, або може щось стосуватися того, як /etc/sudoersвідбувається налаштування.
Nemo157

ага! Ви маєте рацію - я закінчився тут, цікавившись, чому мій .viminfoбув доступний лише для кореневих файлів.
Айрат

1

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

Якщо ні - якщо системний адміністратор обмежує те, що ви можете, а чого не можете зробити, - на "man sudo": "у більшості систем можливо запобігти уникненню оболонок із функцією noexec sudo. Деталі див. У посібнику з sudoers (5). "

Отже, у цьому випадку, якщо ваш sysadmin стурбований потенціалом запуску підзаголовок як root зсередини vim, вони можуть використовувати можливості noexec. Але ... повернемося до початкового випадку - якщо це ВАШ комп’ютер, я думаю, що ви досить безпечно працюєте "sudo vim".


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.