
Согласностраница руководства:
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?