В данном материале описываются важные различия между популярными режимами работы с приложениями от лица пользователя root, а именно, режимами, связанными с использованием утилит su, sudo, pkexec, а также псевдопротокола admin://.
Основная мысль данного материала заключается в следующем: вы должны всегда использовать утилиту pkexec и псевдопротокол admin:// для запуска приложений с графическим интерфейсом, которые должны работать от лица пользователя root. Утилиты su и sudo должны использоваться исключительно для запуска утилит с интерфейсом командной строки от лица пользователя root. В случае пренебрежения этим простым правилом приложения с графическим интерфейсом могут изменить права доступа к файлам конфигурации в домашней директории, что приведет к появлению ряда сложно диагностируемых проблем.
Если вас интересуют подробности, вам стоит продолжить чтение.
Использование файлового менеджера с привилегиями пользователя root в какой-то степени является рискованным мероприятием, так как вы можете удалить любые файлы и тем самым нарушить работоспособность системы. Тем не менее, в некоторых случаях это просто необходимо.
В таких случаях следует запускать файловый менеджер с использованием встроенного механизма защиты для того, чтобы, по крайней мере, случайно не нарушить права доступа к файлам в файловой системе. Так как используемый по умолчанию файловый менеджер глубоко интегрирован в систему, его использование может быть связано с определенными проблемами.
Для работы с файлами с привилегиями пользователя root следует в первую очередь использовать встроенный механизм открытия системных файлов вашего файлового менеджера. Если этот механизм не позволяет выполнить необходимые действия, вам придется запустить файловый менеджер от лица пользователя root с помощью утилиты pkexec и терминала.
Например, для запуска файлового менеджера Nemo из состава дистрибутива Linux Mint Cinnamon может использоваться следующая команда:
pkexec nemo
Для запуска файлового менеджера Caja из состава дистрибутива Linux Mint Mate — следующая команда:
pkexec caja
Для запуска файлового менеджера Thunar из состава дистрибутива Linux Mint Xfce и Xubunut — следующая команда:
pkexec thunar
Наконец, для запуска файлового менеджера Nautilus из состава дистрибутива Ubuntu и Fedora Workstation — следующая команда:
pkexec nautilus
Примечание: закрытие окна терминала приведет к закрытию окна запущенного с помощью него файлового менеджера, поэтому терминал всегда должен быть открыт! Не закрывайте окно терминала до того момента, пока вы не выполните все необходимые действия.
Для редактирования конфигурационных файлов системы вам придется запустить файловый менеджер с привилегиями пользователя root. Для этой цели может использоваться псевдопротокол admin://.
Предположим, что нам нужно отредактировать файл конфигурации /etc/default/grub.
В дистрибутиве Linux Mint (Cinnamon, Mate, Xfce) для этой цели может использоваться следующая команда:
xed admin:///etc/default/grub
В дистрибутивах Ubuntu и Fedora Workstation — следующая команда:
gedit admin:///etc/default/grub
Примечание: три слэша в командах — не опечатка; так и должно быть. При первом использовании псевдопротокола admin:// в рамках пользовательской сессии вам будет предложено ввести ваш пароль дважды; это также нормально. Ну и разумеется, закрытие окна терминала приведет к закрытию окна текстового редактора, поэтому стоит держать его открытым до завершения редактирования файла конфигурации.
Для работы с утилитой sudo вам нужно быть членом группы пользователей sudo. В случае утилит su, pkexec и псевдопротокола admin:// членства в дополнительных группах не требуется.
При использовании утилиты pkexec и псевдопротокола admin:// вам будет предложено ввести ваш пароль с помощью диалогового окна графической оболочки. В случае утилит sudo и su вы должны будет вводить пароль с помощью терминала.
1. Утилита pkexec и псевдопротокол admin:// предусматривают установку безопасного значения переменной окружения $HOME, а именно, пути к домашней директории пользователя root, следовательно, запущенное с помощью них приложение не сможет незаметно нарушить права доступа к файлам конфигурации из вашей домашней директории. Кроме того, они предусматривают установку безопасного значения переменной окружения $XAUTHORITY, а именно, пути к новому файлу, следовательно, запущенное с помощью них приложение будет работать со своей авторизацией оконной системы.
2. Утилита sudo не предусматривает установки значений двух перечисленных выше переменной окружения, а вместо этого использует путь к вашей домашней директории и вашему файлу авторизации оконной системы. По этой причине утилита sudo не должна использоваться для запуска приложений с графическим интерфейсом, ведь они всегда используют переменные окружения, такие, как $HOME.
3. Команда sudo -i позволяет установить безопасное значение переменной окружения $HOME, но не позволяет установить безопасного значения переменной окружения $XAUTHORITY, поэтому все запускаемые с помощью нее приложения запускаются без своей авторизации оконной системы. По этой причине она не должна использоваться для запуска приложений с графическим интерфейсом. Кроме того, она не завершает сессию пользователя root после завершения работы запущенного с помощью нее приложения, что небезопасно.
4. Команда su - выполняет ту же операцию, что и sudo -i. Единственное различие данных команд состоит в том, что в случае использования команды su - вам придется ввести пароль пользователя root, а в случае использования команды sudo -i — свой пароль.
5. Команда sudo -H также позволяет установить безопасное значение переменной окружения $HOME, но не позволяет установить безопасного значения переменной окружения $XAUTHORITY, поэтому все запускаемые с помощью нее приложения запускаются без своей авторизации оконной системы. По этой причине она также не должна использоваться для запуска приложений с графическим интерфейсом.
6. Утилита su устанавливает безопасное значение переменной окружения $HOME, но не устанавливает безопасного значения переменной окружения $XAUTHORITY, поэтому все запускаемые с помощью нее приложения запускаются без своей авторизации оконной системы. По этой причине она также не должна использоваться для запуска приложений с графическим интерфейсом. Вообще, при использовании данной утилиты без каких-либо параметров запуск приложений осуществляется с использованием большинства переменных окружения текущего пользователя.
Вы можете без лишних сложностей получить список пользователей группы sudo с помощью следующей команды:
getent group sudo
После окончания ввода команды следует нажать Enter для ее исполнения.
Если вы случайно воспользовались утилитой sudo или su для запуска приложения с графическим интерфейсом, после чего оно начало работать некорректно от лица обычного пользователя, вы можете исправить права доступа к файлам его конфигурации с помощью следующей команды (это одна строка):
find /home/$SUDO_USER ! -user $SUDO_USER -exec chown $SUDO_USER:$SUDO_USER '{}' ;
После окончания ввода команды следует нажать Enter для ее исполнения.