Почему пользователям никогда не следует использовать обычный sudo для запуска графических приложений?

Почему пользователям никогда не следует использовать обычный sudo для запуска графических приложений?

я прочелдокументация сообщества "RootSudo"и меня интересует эта строка:

Вам следуетникогдаиспользуйте обычный sudo для запуска графических приложений от имени root.

Почему? В чем разница? Пожалуйста, дайте простое объяснение, так как я обычный пользователь настольного компьютера.

решение1

В Ubuntu 19.10 и более поздних версиях предупреждение вэта статья(и в этом ответе) больше не применяется. СмотритеОтвет WinEunuuchs2Unixа такжеэтот вопрос.

Графические приложения часто хранят настройки и другие пользовательские данные в конфигурационных файлах, записанных внутри пользователя.домашняя папка. Основной механизм, который приложения используют для определения того, что им следует использовать в качестве домашней папки пользователя, — этоHOME переменная окружения. (Вы можете проверить это самостоятельно с помощью echo $HOME).

Предположим, вы бежитеgedit(графический текстовый редактор) какroot. Если вы бежите sudo gedit, HOMEбудет продолжать указывать натвойдомашний каталог, даже если программа запущенакакroot. Следовательно, geditбудут написаны файлы конфигурациикакrootв ваш домашний каталог. Этоиногда будет приводить кв файлах конфигурации, которые находятсяпринадлежащийкrootи поэтомунедоступный для вас(когда вы позже запускаете программу как вы, а не как root). Это в основном происходит, когда приложению нужно создать новый файл конфигурации. Вновь созданные файлы по умолчанию принадлежат пользователю, который их создал (в данном случае это root, а не вы).

Это основная причина, по которой вам следует запускать графические приложения с графическим sudoинтерфейсом, а не с помощью обычного sudo. В Ubuntu и большинстве его производных (включая Xubuntu и Lubuntu) стандартный графический интерфейс — этоgksu/gksudo. В Kubuntu этоkdesudo. (Это зависит отсреда рабочего столабыть использованным.)

Если выхотетьчтобы использовать его sudoнапрямую для запуска графического приложения, например gedit, можно запустить:

sudo -H gedit

Флаг -Hустанавливает sudoустановку HOME, указывающую на rootдомашнюю папку (которая является/root).

Это все равно не будет автоматически регулировать право собственности.Xauthorityскопировав его во временную папку (это еще одна вещь, sudoо которой заботятся графические интерфейсы). Но в редких случаях, когда файл .Xauthorityнедоступен, вы получите сообщение об ошибке, сообщающее о его доступности, и тогда вы можете исправить проблему, удалив его ( sudo rm ~/.Xauthority), поскольку он автоматически восстанавливается. Таким образом, защита .Xauthorityправ собственности и разрешений менее важна, чем защита прав собственности и разрешений файлов конфигурации.

В отличие от root-owned .Xauthority, когда файлы конфигурации становятся принадлежащими как root, не всегда так очевидно, в чем проблема (потому что графические программы часто запускаются, но работают не очень хорошо и выводят любые полезные ошибки на консоль). И иногда это более хлопотно исправить, особенноесли вы находитесь в ситуации, когда вы хотите, чтобы один или несколько файлов в вашем домашнем каталоге принадлежали кому-то другому, а не вам(потому что тогда вы не сможете исправить это, просто рекурсивно chownвернув себе все свои файлы).

Поэтому sudo(по крайней мере без -H) не следует использовать для запуска графического приложенияпока невы хорошо знакомы с внутренней работой приложения и точно знаете, что оно никогда не пытается записывать какие-либо файлы конфигурации.

решение2

Проще говоря:

Это не позволит файлам в вашем домашнем каталоге стать собственностью root.

Прочитай этоздесь. Также, возможно, дубликатВ чем разница между «gksudo nautilus» и «sudo nautilus»?

решение3

Обновление Ubuntu 19.10

По состоянию наУбунту 19.10, ввод sudo some_commandтеперь имеет тот же эффект, что и ввод sudo -H some_command. Это означает, что каталог для любых затронутых файлов конфигурации будет находиться под /rootкаталогом , а не /home/regular_userIDпод каталогом (он же $HOME).

Это делает весь этот раздел вопросов и ответов в значительной степени спорным для пользователей Ubuntu 19.10 и выше.

Чтобы проверить, sudoработает ли это sudo -Hв вашем дистрибутиве, попробуйте выполнить следующие короткие тесты:

$ sudo printenv | grep HOME
HOME=/home/rick

$ sudo -H printenv | grep HOME
HOME=/root

Как вы можете видеть, sudoвышеприведенный вариант не работает так, как описано выше sudo -H, поэтому использование plain sudoможет нанести вред вашим файлам конфигурации пользователя.


Альтернативой gksu nautilus, gksu geditили sudo -H geditявляется использование nautilus-adminдополнения. Оно позволяет просматривать файлы и каталоги с помощьюНаутилуса затем откройте их как root (администратор).

Установка проста:

sudo apt install nautilus-admin

Теперь, когда вы находитесь в Nautilus, у вас будет дополнительная возможность редактировать от имени администратора:

наутилус админ.gif


geditкак root не разрешает настройки

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

Чтобы решить эту проблему, я написал скрипт sgeditдля наследования пользовательских настроек и применения их к root:Как синхронизировать настройки моего root-пользователя gedit с настройками моего пользователя gedit?

  • Позвонить с помощьюsgedit filename1 filename2 ...
  • Получает пользовательские настройки gedit для позиций табуляции, шрифтов, переноса строк и т. д.
  • Повышает уровень до уровня, позволяющего sudo -Hсохранить право собственности на файл при получении прав root.
  • Запрашивает пароль, если sudoистекло время последнего запроса.
  • Получает настройки gedit для sudo
  • Сравнивает различия между настройками пользователя и sudo gedit
  • Запускает gsettings set только для различий (сокращает 174 команды set до дюжины или меньше). В следующий раз он, возможно, запустит только одно или два изменения, но часто никаких изменений.
  • Вызывает geditфоновую задачу, в результате чего приглашение терминала появляется снова немедленно.

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