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

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

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

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

3 ответа

Решение

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

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

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

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

sudo -H gedit

-H флаг делает sudo задавать HOME указать на root домашняя папка (которая /root).

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

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

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

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

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

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

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

Установка прямо вперед:

sudo apt install nautilus-admin

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


gedit как root не позволяет настройки

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

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

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