
я прочелдокументация сообщества "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, у вас будет дополнительная возможность редактировать от имени администратора:
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
фоновую задачу, в результате чего приглашение терминала появляется снова немедленно.