Я прочитал документацию сообщества "RootSudo" и мне интересна эта строка:
Вы не должны никогда использовать обычный sudo для запуска графики приложения как Root.
blockquote>Почему? В чем разница? Пожалуйста, предоставьте простое объяснение, так как я обычный пользователь рабочего стола.
В 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
) не следует использовать для запуска графическое приложение , если вы хорошо знакомы с внутренней работой приложения и точно знаете, что оно никогда не пытается записывать какие-либо файлы конфигурации.
Проще говоря:
Это препятствует тому, чтобы файлы в вашем домашнем каталоге становились владельцем root.
Прочтите здесь . Кроме того, возможно, дубликат В чем разница между «gksudo nautilus» и «sudo nautilus»?
Начиная с 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, у вас будет дополнительная опция для редактирования от имени администратора:
gedit
как root не разрешает настройки Когда вы запускаете gedit
как root, вы не можете использовать настройки, которые вы установили как обычный пользователь для позиций табуляции, преобразование табуляции в пробелы, имя шрифта, размер шрифта, перенос строк и т. д.
Чтобы решить эту проблему, я написал сценарий sgedit
, чтобы наследовать пользовательские настройки и применять их к root: Как мне синхронизировать мой корневой gedit с настройками моего пользовательского gedit?
sgedit filename1 filename2 ...
sudo -H
для сохранения прав собственности на файл при получении полномочий root. sudo
истекло время ожидания. gedit
как фоновую задачу, так что приглашение терминала снова появляется снова.