Вопрос или проблема
Время от времени мне нужно редактировать некоторые файлы, которые должны редактироваться только пользователем root.
Я бы очень предпочел делать это в графическом текстовом редакторе, а не используя командные инструменты, такие как nano или vi. Да, это вполне возможно делать с помощью любого из них или подобного, я просто недоволен этой опцией, потому что она неудобна по сравнению с работой в kate или gedit (это личное мнение; если у вас противоположное, это совершенно нормально, но я придерживаюсь своего).
Сказав это, я не хотел бы полностью компрометировать безопасность с помощью ядерного варианта xhost si:localuser:root
. Существует ли какое-либо компромиссное решение (например, sudo, который, к сожалению, был специально усечен, когда дело касается запуска графических задач)?
1. URI admin://
В Ubuntu официальный способ редактирования системных файлов от имени root с помощью графического редактора — это использовать URI admin://
. Например, чтобы отредактировать /etc/fstab
, выполните следующую команду в диалоговом окне выполнения, которое вы получите после нажатия Alt+F2 или в терминале:
gedit admin:///etc/fstab
В более старых версиях Ubuntu (до 20.10) при первом выполнении этой команды вам нужно дважды ввести свой пароль. Это было исправлено в 20.10.
Конечно, ваш пользователь должен принадлежать к группе root, чтобы редактировать системные файлы.
2. Использование sudoedit
Подход, который будет работать в любой рабочей среде с любым редактором, — это использование sudoedit
. Установите переменную окружения SUDO_EDITOR, чтобы она указывала на бинарный файл вашего графического редактора, например: export SUDO_EDITOR="/usr/bin/gedit"
. Затем вы можете использовать команду sudoedit <file>
или sudo -e <file>
, чтобы открыть системный файл в вашем графическом редакторе. Так же, как и URI admin://, это создаст временную копию, которую вы редактируете как обычный пользователь. После закрытия редактора измененная временная копия копируется обратно в системный файл.
Это на самом деле можно объединить в одну команду:
env SUDO_EDITOR="/usr/bin/gedit" sudoedit <file>
Таким образом, окружение изменяется только тогда, когда вы явно хотите использовать графический редактор. Вы создаете псевдоним или пишете небольшой скрипт, чтобы редактировать системные текстовые файлы в графическом редакторе одной командой.
3. Не рекомендуется: использование pkexec
Эти два варианта не запускают ваш графический редактор от имени root, что предпочтительно. Тем не менее, возможно запустить графический редактор от имени root, используя pkexec
. Вы можете установить файл PolicyKit, но также можете запустить его с некоторыми переменными окружения. Для пользователей nautilus
пакет nautilus-admin
устанавливает файл PolicyKit для gedit и предоставляет опцию в контекстном меню в nautilus
для запуска текстового файла в gedit
с правами root. Однако эти варианты, когда графическое приложение запускается от имени root, согласно man pkexec
, не рекомендуются:
В результате pkexec не позволит вам запускать X11-приложения как другого пользователя, так как переменные окружения $DISPLAY и $XAUTHORITY не установлены. Эти две переменные сохранятся, если аннотация org.freedesktop.policykit.exec.allow_gui для действия установлена на ненулевое значение; однако это не рекомендуется и должно использоваться только для устаревших программ.
Следующая команда работает, не нужно ничего устанавливать:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit <filename>
Чтобы упростить задачу, вы можете создать псевдоним, добавив следующее в ваш файл ~/.bash_aliases
:
alias editroot="pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit"
Затем (в новом терминале, чтобы перезапустить ~/.bashrc
) вы можете использовать следующую команду:
editroot <filename>
Вы можете открыть gedit
, набрав sudo gedit
. Затем откройте другой терминал и введите gksu gedit /path/to/file.txt
. Затем отредактируйте файл и сохраните. Для меня это лучший способ.
Ответ или решение
Как редактировать файлы в графических текстовых редакторах с правами root
Многие пользователи Linux сталкиваются с необходимостью редактировать системные файлы, для чего требуются права администратора. Хотя существует множество текстовых редакторов, работающих в терминале, такие как nano
или vi
, многие предпочитают использовать графические интерфейсы, так как они обеспечивают более удобный и интуитивно понятный процесс редактирования. В данной статье мы рассмотрим различные методы открытия файлов с правами root
в графических текстовых редакторах, таких как gedit
, kate
и других аналогах без ущерба для безопасности системы.
1. Использование URI admin://
В популярных дистрибутивах Linux, таких как Ubuntu, наиболее безопасный способ редактирования системных файлов — это использование admin://
URI. Например, чтобы отредактировать файл /etc/fstab
, выполните следующую команду в терминале или запустите ее через диалоговое окно (нажмите Alt
+ F2
):
gedit admin:///etc/fstab
Если вы используете более раннюю версию Ubuntu (до 20.10), вам может потребоваться ввести пароль дважды. В версиях после 20.10 эта проблема была устранена. Обратите внимание, что ваш пользователь должен принадлежать к группе root
, чтобы иметь возможность редактировать системные файлы.
2. Использование sudoedit
Если вы предпочитаете управлять файлами с помощью любого текстового редактора с графическим интерфейсом, можно использовать sudoedit
. Этот метод работает в любой среде рабочего стола. Сначала установите переменную окружения SUDO_EDITOR
, указывающую на ваш графический редактор:
export SUDO_EDITOR="/usr/bin/gedit"
Затем вы можете использовать команду:
sudoedit <файл>
или
sudo -e <файл>
Эта команда создаст временную копию файла, которую вы сможете редактировать как обычный пользователь. После завершения работы редактора изменения будут применены к исходному файлу.
Для упрощения процесса можно объединить это в одну команду:
env SUDO_EDITOR="/usr/bin/gedit" sudoedit <файл>
Таким образом, поведение переменной окружения изменяется только во время использования графического редактора. Вы также можете создать псевдоним или небольшой скрипт для упрощения редактирования системных файлов.
3. Использование pkexec
(не рекомендуется)
Хотя предыдущие два метода не запускают графический редактор с правами root
, существует возможность использовать pkexec
. С помощью этой команды можно запускать графические приложения с правами суперпользователя:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit <файл>
Для упрощения процесса можно создать псевдоним. Добавьте следующую строку в файл ~/.bash_aliases
:
alias editroot="pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit"
После этого в новой терминальной сессии вы можете использовать команду:
editroot <файл>
4. Альтернативные методы
Вы также можете открыть gedit
с помощью следующих команд в терминале:
sudo gedit /путь/к/файлу
Однако этот метод не рекомендуется, так как он запускает редактор с привилегиями root
, что может привести к непредсказуемым последствиям при случайном изменении системных файлов.
Заключение
Редактирование системных файлов с помощью графических текстовых редакторов может быть выполнено безопасно и удобно. Метод, который вы выберете, зависит от ваших предпочтений и уровня безопасности, который вы хотите поддерживать. Метод с использованием admin://
или sudoedit
является предпочтительным для большинства пользователей, так как они позволяют избежать прямого запуска графических приложений с правами администратора, что снижает риски для безопасности системы.