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

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

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

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

125
задан 20 March 2016 в 13:38

3 ответа

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

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

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

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

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

sudo -H gedit

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

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

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

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

132
ответ дан 20 March 2016 в 13:38

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

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

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

27
ответ дан 20 March 2016 в 13:38

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

Начиная с Ubuntu 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 , поэтому использование простого sudo может нанести вред вашим файлам конфигурации пользователя.


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

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

sudo apt install nautilus-admin

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

nautilus admin.gif


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

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

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

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

Другие вопросы по тегам:

Похожие вопросы: