Vraag Waarom zouden gebruikers de normale sudo nooit gebruiken om grafische toepassingen te starten?


Ik heb gelezen de "RootSudo" documentatie van de gemeenschap en ben geïnteresseerd in deze regel:

Je zou moeten nooit gebruik de normale sudo om grafische toepassingen als root te starten.

Waarom? Wat is het verschil? Geef een eenvoudige uitleg, want ik ben maar een gewone desktopgebruiker.


93
2018-03-19 16:35


oorsprong


Verwant: Wat is het verschil tussen "gksudo nautilus" en "sudo nautilus"? - Eliah Kagan
Eigenlijk had ik het onlangs moeilijk om MATLAB te installeren in / usr / local. Dit vereiste rootprivileges om naar / usr / local te schrijven, maar als op een of andere manier het installatieprogramma met behulp van gksu werd uitgevoerd, was het onmogelijk om het geïnstalleerde programma als niet-root te gebruiken. Het uitvoeren van het installatieprogramma met sudo maakte dat alles goed werkte. - Bib-lost


antwoorden:


Grafische toepassingen slaan vaak instellingen en andere gebruikerspecifieke gegevens op in configuratiebestanden die in de gebruiker zijn geschreven thuismap. Het hoofdmechanisme dat toepassingen gebruiken om te bepalen wat ze moeten gebruiken als de thuismap van de gebruiker is de HOME  omgevingsvariabele. (U kunt het zelf inspecteren met echo $HOME).

Stel dat je rent gedit (een grafische teksteditor) als root. Als je rent sudo gedit, HOME zal blijven wijzen naar jouw home directory, ook al draait het programma als root. Bijgevolg, gedit zal configuratiebestanden schrijven als root in je thuismap. Deze zal soms resulteren in de configuratiebestanden die In Bezit door root en daarom ontoegankelijk voor u (wanneer u het programma later als uzelf uitvoert en niet als root). Dit gebeurt vooral wanneer de applicatie een nieuw configuratiebestand moet maken. Nieuw gemaakte bestanden zijn standaard eigendom van de gebruiker die ze maakt (in dit geval is dit) root, jij niet).

Dat is de belangrijkste reden waarom u grafische applicaties zou moeten uitvoeren met een grafische sudo frontend in plaats van rechtdoor sudo. In Ubuntu en de meeste van zijn derivaten (inclusief Xubuntu en Lubuntu) is de standaard grafische frontend dat gksu/gksudo. In Kubuntu is dat zo kdesudo. (Het hangt af van de bureaubladomgeving gebruikt worden.)

als jij willen gebruiken sudo rechtstreeks om een ​​grafische toepassing zoals uit te voeren gedit, je kan lopen:

sudo -H gedit

De -H vlag maakt sudo reeks HOME wijzen naar rootde thuismap van de gebruiker (wat is /root).

Dat zal nog steeds niet automatisch het eigendom van .Xauthority door het naar een tijdelijke map te kopiëren (dit is het andere dat grafisch is sudo frontends zorgen voor je). Maar in het zeldzame geval dat .Xauthority is ontoegankelijk, u krijgt een foutmelding dat dit het geval is en u kunt het probleem dan oplossen door het te verwijderen (sudo rm ~/.Xauthority), omdat het automatisch wordt geregenereerd. Dus, beschermen .Xauthorityeigenaarschap en machtigingen zijn minder belangrijk dan het beschermen van het eigendom en de rechten van configuratiebestanden.

In tegenstelling tot a rootdie eigendom .Xauthority, wanneer configuratiebestanden eigendom worden van root, het is niet altijd even duidelijk wat het probleem is (omdat grafische programma's vaak worden uitgevoerd, maar niet erg goed werken, en eventuele bruikbare fouten uitvoeren naar de console). En het is soms een grotere moeite om te repareren, vooral als u zich in een situatie bevindt waarin u wilt dat een of meer bestanden in uw thuismap het eigendom zijn van iemand anders dan uzelf(omdat je het dan niet eenvoudig op recursieve wijze kunt oplossen chownal uw bestanden terug naar uzelf).

daarom sudo (tenminste zonder -H) mag niet worden gebruikt om een ​​grafische toepassing uit te voeren tenzij je bent goed bekend met de interne werking van de app en weet zeker dat hij nooit probeert configuratiebestanden te maken.


104
2018-03-19 16:49



Kan ik opnieuw eigenaar worden van alle configuratiebestanden (of bestanden) in mijn thuismap, als dit bestand eigendom is van root? - Nur
@NU Ervan uitgaande dat er zijn Nee bestanden in uw thuismap die u willen eigendom zijn van een andere gebruiker of dat je een ander groepslidmaatschap wilt hebben (om te delen), je kan lopen: sudo chmod -R $USER:$USER ~ Helaas zijn die criteria niet altijd van toepassing. Als u bestanden hebt waarin u de groepseigenaar moet behouden, kunt u uitvoeren sudo chmod -R $USER ~. Dit is meestal voldoende. (Als u bestanden in bezit moet hebben van een andere gebruiker in uw homedirectory, is zelfs dat een probleem.) - Eliah Kagan
Ik wil alleen dat deze bestanden van mij zijn, bedankt. - Nur
@EliahKagan doet chmod eigenlijk doen? Ik dacht altijd dat het dat was chown dat deed het. chmod deed het nooit voor mij. - Wyatt8740
@ Wyatt8740 Ik had zeker moeten schrijven chown in plaats van chmod in mijn opmerkingen hierboven. Sorry daarvoor - en bedankt voor het wijzen van dit! - Eliah Kagan


Simpel gezegd:

Dit voorkomt dat bestanden in uw persoonlijke map eigendom worden van root.

Lees het hier. Ook mogelijk een duplicaat van Wat is het verschil tussen "gksudo nautilus" en "sudo nautilus"?


23
2018-03-19 16:40





Een alternatief voor gksu nautilus en gksu gedit is om te gebruiken nautilus-admin toevoegen. Hiermee kunt u bladeren door bestanden en mappen Nautilus en open ze dan als root (Administrator).

Installatie is eenvoudig:

sudo apt install nautilus-admin

Als u nu in Nautilus bent, heeft u een extra optie om als beheerder te bewerken:

nautilus admin.gif


gedit omdat root geen voorkeuren toestaat

Wanneer je rent gedit als root kun je de voorkeuren die je hebt ingesteld als gewone gebruiker niet gebruiken voor tabstops, tabs converteren naar spaties, lettertype, lettergrootte, regelafbreking, etc.

Om dit op te lossen, heb ik het script geschreven sgedit om gebruikersvoorkeuren te erven en toe te passen op root: Hoe kan ik mijn rootgedit synchroniseren met de voorkeuren van mijn gebruiker gedit?

  • Bellen met sgedit filename1 filename2 ...
  • Krijgt de gedit-instellingen van de gebruiker voor tabstops, lettertypen, line-wrap, enz.
  • Verhoogt naar sudo -H om het bezit van bestanden te behouden en tegelijkertijd root-bevoegdheden te verkrijgen.
  • Verzoeken wachtwoord als laatste sudo is verlopen.
  • Krijgt de gedit-instellingen van sudo
  • Vergelijkt verschillen tussen instellingen van gebruiker en sudo gedit
  • Voert gsettings uit die alleen op de verschillen zijn ingesteld (vermindert 174 setopdrachten tot een dozijn of minder.) De volgende keer dat het wordt uitgevoerd, is misschien slechts één of twee wijzigingen nodig, maar vaak worden er geen wijzigingen aangebracht.
  • gesprekken gedit als een achtergrondtaak zodanig dat terminal prompt onmiddellijk verschijnt.

0
2018-06-17 18:15