Сохранить файл Vim/Vi без root прав в Unix/Linux

Сохранить файл Vim/Vi без root прав в Unix/Linux

Сейчас я покажу как можно сохранить файл при использовании vi/vim редактора, если у вас, нет root-прав (прав суперпользователя). На первый взгляд, можно подумать — как такое возможно? Как? Нет прав же… Это можно, но для этого нужны sudo права. Если кто-то подумал что записать файл вообще без прав и от обычного юзера — конечно нет. Тогда образовалась дыра в системе. Не так ли?

Смотрим под каким юзером сейчас я нахожусь:

$ echo -e "ID: `id -u` \nUsername: `id -u -n`"
ID: 0
Username: root

И так, я root- пользователь. Как известно всем, для него нет преград. логинимся в другого юзера, например:

# su - dexm238

И проверим какой ИД у этого юзера:

$ echo -e "ID: `id -u` \nUsername: `id -u -n`"

Получаем:

ID: 1000
Username: dexm238

Попробуем создать файл, и прописать в него что-то, например:

$ vim /etc/nginx/conf.d/test.conf

При сохранении, получим ошибку:

"/etc/nginx/conf.d/test.conf" E212: Can't open file for writing
Press ENTER or type command to continue

Ну что, давайте обойдем все это дело….

И так, открыли файл, прописали в него что нужно, при сохранении, вводим:

:w !sudo tee %

Где,

  • :w – Записать данные у файл (буфер).
  • !sudo – Вызвать sudo.
  • tee – При вызове «:w», все перенаправляется в tee.
  • %  — это текущее название файла ( у меня это -/etc/nginx/conf.d/test.conf). Другими словами, команда tee запускается как root, и она принимает стандартный ввод (буфер) и записывает его в файл, представленный в %.

Однако это заставит перезагрузить файл снова (нажмите L, чтобы загрузить изменения в самом vim).

Можно использовать утилиту dd, например:

:w !sudo dd of=%

Или:

:w !sudo dd of=% > /dev/null

Можно использовать уилиту cat, например:

:w !sudo sh -c "cat > %"

Для удобства, можно прописать команду, открываем  ~/.vimrc файл:

# vim ~/.vimrc

И прописываем в него:

command W :execute ':silent w !sudo tee % > /dev/null' | :edit!

Вот еще несколько других вариаций команды:

command W w !sudo tee % >/dev/null

Можно названичить команду на букву, например:

cmap w!! w !sudo tee >/dev/null %

Или:

map w :execute ':silent w !sudo tee % > /dev/null' <bar> :edit! <cr>

Так же:

command W :silent execute 'write !sudo tee ' . shellescape(@%, 1) . ' >/dev/null'

Или:

command W :sil exec 'w !sudo tee ' . shellescape(@%, 1) . ' >/dev/null'

Можно использовать шорткат:

cnoremap w!! w !sudo tee > /dev/null %

Или:

cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' <bar> edit!

PS: В таком случае — сохранение будет «w!!».

Сохраняем файл, и пробуем что-то отредактировать, например:

$ vi /etc/hosts

И сейчас, чтобы сохранится — используем W.

Вот и все, статья «Сохранить файл Vim/Vi без root прав в Unix/Linux» завершена.

One thought on “Сохранить файл Vim/Vi без root прав в Unix/Linux

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.