Назад | Перейти на главную страницу

Редактирование файлов с правами root для записи только с правами sudo

Наши системные администраторы входят в ящики, используя непривилегированные учетные записи с правами sudo. Я часто по привычке открываю файлы в vim вместо того sudoedit. Я не хочу иметь привычку использовать sudoedit. Мой коллега предложил создать vim символическая ссылка в пути, который указывает на sudoedit. Мне это кажется ужасной идеей.

Я обычно просто :w /tmp/service.conf а потом mv -i /tmp/service.conf /etc/

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

Мнения?

Примечание: Обычно у нас есть легкодоступные резервные копии этих файлов, так что это не проблема.

С участием sudo.vim, ты можешь сделать vim sudo:path-to-file. Если вы уже открыли файл без sudo:, ты можешь сделать :f sudo:% перейти на использование sudo читать / писать. (Вы можете захотеть :set noro также, чтобы избежать предупреждений при попытке изменить / записать файл, который Vim считал доступным только для чтения при первом открытии.)

Имейте в виду, что оба Алекса :w !sudo tee % solution и sudo.vim страдают от проблем с экранированием оболочки. Не используйте, если не знаете, что имена файлов безопасны.

Я бы просто продолжал использовать VIM и заставлял его делать всю работу за вас. Когда вы открываете файл, к которому у вас нет доступа на запись, вы все равно можете сохранить его, введя в VIM следующее: <ESC>:w !sudo tee %

Это позволит вам выполнить sudo и внести ваши изменения в файл, который вы редактируете в данный момент. После этого файл эффективно редактируется вне VIM, поэтому вам будет предложено загрузить новое содержимое.

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

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

Примечание к вашему примечанию: я думаю, что меня больше беспокоит случайная перезапись другого файла (-i несмотря на то, что вы ожидаете ответить «да» на этот вопрос, так что вы легко получите привычку делать это), чем я бы сказал о внесении изменений в файл, который вы собираетесь редактировать. Поэтому убедитесь, что у вас есть резервная копия всего остального.

sudo su -

В противном случае напишите сценарий оболочки, что-то вроде этого. Обратите внимание, что он сломается, если вы захотите передать аргументы в vim (хотя вы можете расширить его для работы, это скорее PoC)

#!/bin/sh
# Pretend to be vim, write to /tmp then sudo copy to original file
$TMPFILE = $(mktemp)
cp $1 $TMPFILE
vim $TMPFILE
sudo mv -i $TMPFILE $1

Это может сделать то, что вам нужно? Вы также можете легко настроить его для создания двух копий файла и перед перемещением предупредить вас, если они все еще не идентичны (то есть кто-то с тех пор изменил оригинал)