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

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

Я хочу изменить файлы с помощью KomodoEdit, которым нужны sudoразрешения. Я не могу запустить KomodoEdit с помощью sudo, хотя (по какой-то причине). Могу ли я как-то предоставить Komodo разрешение на редактирование этих файлов (в частности, я говорю о файлах apache2 и /etc/hosts)?

решение1

Использовать sudoedit <file>. Он создает локальную копию файла, редактирует его с правами пользователя и копирует обратно в исходное местоположение. Преимущество в том, что редактор работает как обычный пользователь.

Чтобы указать редактор, отличный от редактора по умолчанию, вы можете EDITORвременно задать:

EDITOR=/usr/bin/someeditor sudoedit /etc/hosts

Для этого необходимо sudoустановить пакет и добавить пользователя в sudoгруппу.

решение2

Теоретически это можно сделать, установив бит suid на komodoedit и изменив его владельца на root.

sudo chown root:root /path/to/komodoedit
sudo chmod u+s /path/to/komodoedit

Что оно делает:

  1. chownустанавливает владельца на root
  2. chmod u+sпредоставляет любому, кто запускает файл, те же права (на выполнение), что и владелец.

Поскольку мы назначили владельцем root, фактическим владельцем выполнения становится root.

Вероятно, это НЕ тот ответ, который вы ищете, поскольку он предоставит всем пользователям эффективный корневой редактор.

sudoedit, как упомянул marco, вероятно, более правильный вариант с точки зрения безопасности.

решение3

Относительно простой способ — предоставить вашему идентификатору пользователя разрешения на доступ к определенному файлу с помощьюсписки контроля доступа. Вам, вероятно, понадобится установить aclпакет, чтобы иметь команды getfaclи setfacl. Затем для пользователя "myname" и файла /etc/hostsвы можете дать команду:

sudo setfacl -m 'u:myname:rw' /etc/hosts

и тогда вы сможете читать/писать этот файл. Когда вы ls -lна файле, вы увидите +знак, показывающий, что для файла есть acl:

-rw-r--r--+ 1 root root 221 Nov  5 16:55 /etc/hosts

и вы можете перечислить acl с getfaclв файле. Чтобы удалить acl позже используйте

sudo setfacl -x 'u:myname' /etc/hosts

или setfacl -bудалить все списки контроля доступа (acls). (Ваша файловая система должна поддерживать списки контроля доступа).

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