7

Согласно справочной странице:

sudoedit /etc/file

создает копию файла, открывает его как текущий пользователь и при сохранении перезаписывает существующий файл с копией.

в то время как

sudo vi /etc/file

открывает файл как root

Страница man утверждает, что sudoedit отличается от sudo, потому что:

редактор запускается с неизменной средой вызывающего пользователя

Первый метод безопаснее, если да, то почему? Существуют ли другие причины для использования sudoedit вместо sudo vi?

2 ответа2

13

Я наткнулся на этот вопрос, когда искал что-то совершенно не связанное, но подумал, что добавлю следующее важное различие, которое до сих пор не упоминалось: sudoedit не запускает ваш редактор от имени root.

$ sudo vim /etc/farts.conf 

Просто запустите vim от имени пользователя root, что позволит ему прочитать файл. Недостатком является то, что редактор теперь также работает от имени пользователя root и может делать все что угодно. Если вы просто хотели позволить пользователю редактировать конфигурационный файл и ничего более, что очень плохо, вы просто предоставили им права root во всей системе. Ничто не мешает мне порождать оболочку от vim с помощью :sh или :!command , и, поскольку они являются подпроцессами, они также будут работать от имени пользователя root.

С другой стороны:

$ sudoedit /etc/farts.conf

на самом деле будет работать по-другому. Он создаст копию с уникальным именем в /tmp с разрешениями, заблокированными только для вашего пользователя, и затем породит ваш редактор, как обычно, без привилегий root, для этой копии.

После того, как вы выйдете из редактора, он сравнит временный файл и исходный файл и безопасно заменит исходный файл вашим редактированием, если он был изменен.

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

Это в основном фактическое различие, остальное, что было упомянуто, это просто аккуратные побочные эффекты.

10

Прежде всего, sudo vim уже явно упоминает ваш редактор по умолчанию, который не нужен, если он определен в $EDITOR . sudoedit избавляет вас от необходимости определять редактор каждый раз, когда вы хотите что-то редактировать, а в многопользовательской системе он позволяет каждому использовать редактор, который им нравится.

Как так? Рассмотрим систему, в которой обычные пользователи получают только привилегии sudo для редактирования определенных файлов. Хотя им запрещено запускать sudo с чем-либо еще. Вы должны позволить им использовать sudo vi sudo vim sudo nano sudo emacs и sudo pico (и так далее). Вместо того, чтобы делать это, вы можете просто позволить им sudoedit файла, с их выбором установки $EDITOR в соответствии с тем, что им нравится. (Представьте, что вы заставите любителя Emacs использовать Vim ...)

Другая проблема заключается в том, что если для вашего $EDITOR установлено значение vim , и у вас есть параметры настройки для него в .vimrc вашего пользователя, эти параметры не будут использоваться, если вы используете sudo vim или sudo $EDITOR . Однако sudoedit сохраняет среду вызывающего пользователя и, следовательно, ваши настройки.

Смотрите также: Что хорошего в sudoedit?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .