sudoedit: почему его используют вместо sudo vi?

sudoedit: почему его используют вместо sudo vi?

Согласностраница руководства:

sudoedit /etc/file

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

тогда как

sudo vi /etc/file

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

На странице руководства указано, что sudoedit отличается от sudo, потому что:

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

Безопаснее ли первый метод, если да, то почему? Есть ли другие причины использовать sudoedit вместо sudo vi?

решение1

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

$ sudo vim /etc/farts.conf 

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

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

$ sudoedit /etc/farts.conf

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

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

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

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

решение2

Во-первых, 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?

Связанный контент