Почему пользователи никогда не должны использовать обычный 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
как фоновая задача, такая, что подсказка терминала появляется немедленно.