Чому користувачі ніколи не повинні використовувати звичайний sudo для запуску графічних програм?


114

Я прочитав документацію спільноти "RootSudo" і мене цікавить цей рядок:

Ніколи не слід використовувати звичайний sudo для запуску графічних додатків як Root.

Чому? Яка різниця? Будь ласка, надайте просте пояснення, оскільки я просто звичайний користувач настільних ПК.



Власне, нещодавно мені було важко встановити MATLAB в / usr / local. Це вимагало кореневих привілеїв для запису в / usr / local, але запуск інсталятора за допомогою gksu якось унеможливив запуск встановленої програми як не-root. Запуск інсталятора за допомогою sudo зробив все добре.
Боб-програв

Відповіді:


129

Графічні програми часто зберігають налаштування та інші конкретні для користувача дані у файлах конфігурації, записаних у домашній папці користувача . Основний механізм, який програми використовують для визначення того, що вони повинні використовувати як домашню папку користувача, є 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«s домашньої папки (це /root).

Це все ще не автоматично обробляє право власності на .Xauthorityнього, копіюючи його в тимчасову папку (це інша річ, про яку sudoпіклуються графічні фронти). Але в нечастому випадку, який .Xauthorityє недоступним, ви отримаєте помилку, сказавши, що вона є, і тоді ви можете виправити проблему, видаливши її ( sudo rm ~/.Xauthority), оскільки вона автоматично відновлюється. Таким чином, захист .Xauthorityправа власності та дозволів є менш важливим, ніж захист права власності та прав конфігураційних файлів.

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

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


Чи можу я знову стати власником усіх файлів конфігурації (або будь-яких файлів) у своїй домашній каталозі, якщо цим файлом володіє root?
Нур

@Nur Припускаючи, що у вашому домашньому каталозі немає файлів, якими ви хочете володіти будь-яким іншим користувачем, або ви хочете мати інше членство в групі (для спільного доступу) , ви можете запустити: sudo chmod -R $USER:$USER ~На жаль, ці критерії не завжди застосовуються. Якщо у вас є файли, де потрібно зберегти власника групи, ви можете запустити sudo chmod -R $USER ~. Зазвичай цього достатньо. (Якщо у вас в домашньому каталозі файлів має бути власник іншого користувача, навіть це буде проблемою.)
Eliah Kagan

1
@EliahKagan Чи chmodсправді це робиться? Я завжди думав, що це було chownтак. chmodніколи цього не робив для мене.
Wyatt8740

2
@ Wyatt8740 Я, безумовно, повинен був писати chownзамість chmodсвоїх коментарів вище. Вибачте за це - і дякую, що вказали на це!
Елія Каган

2
@TheQuark В sudo -H echo $HOME, ваша оболонка - працює , як ви, а НЕ суперкористувача - виконує розкладання параметра на $HOME, отримуючи шлях вашої домашньої директорії, а потім передає його sudo, в свою чергу , проходить вже розширене значення echo, яке виводить його. sudo -H printenv HOME, sudo -H bash -c 'echo $HOME'і sudo -H sh -c 'echo $HOME'весь друк /root. Це концептуально схоже - хоч і за іншим механізмом - того, як x=a echo "$x"не друкується a(якщо xвже не було значення a).
Елія Каган

25

Простіше кажучи:

Це запобігає становленню файлів у вашому домашньому каталозі.

Прочитайте тут . Також, можливо, дублікат Що є різницею між "gksudo nautilus" та "sudo nautilus"?


gksudo більше не включений до встановлень Ubuntu та Debian. Докладні відомості див. У itsfoss.com/gksu-replacement-ubuntu . askubuntu.com/a/1047413/197910 - це найкраще рішення.
K7AAY

5

Альтернатива gksu nautilusта gksu geditвикористання nautilus-adminдодатка. Це дозволяє переглядати файли та каталоги з Nautilus, а потім відкривати їх як root (Administrator).

Встановлення прямо вперед:

sudo apt install nautilus-admin

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

nautilus admin.gif


gedit оскільки root не дозволяє налаштуванням

Запускаючи geditяк root, ви не можете використовувати налаштування, які ви налаштували як звичайний користувач для зупинок вкладок, перетворення вкладок у пробіли, назви шрифту, розміру шрифту, загортання рядків тощо.

Щоб вирішити це, я написав сценарій sgeditдля успадкування налаштувань користувачів та застосував їх до root: Як я можу синхронізувати свій root gedit з налаштуваннями свого gedit користувача?

  • Дзвінок за допомогою sgedit filename1 filename2 ...
  • Отримує налаштування gedit користувача для зупинок вкладок, шрифтів, загортання рядків тощо.
  • Піднімається, щоб sudo -Hзберегти право власності на файл, отримуючи при цьому повноваження root.
  • Запрошує пароль, якщо останній sudoчас закінчився.
  • Отримує параметри gedit sudo
  • Порівняє відмінності між налаштуваннями користувача та sudo gedit
  • Запускає набори, встановлені лише на відмінності (скорочує 174 набір команд до десятка або менше. Наступного разу він запускається, можливо, лише одна або дві зміни, але часто не змінюються.
  • Викликає geditв якості фонового завдання таке, що підказка терміналу знову з’являється.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.