Por que os usuários nunca devem usar o sudo normal para iniciar aplicativos gráficos?

94

Eu li a documentação do "RootSudo" da comunidade e estou interessado nesta linha:

% bl0ck_qu0te%

Por quê? Qual é a diferença? Por favor, forneça uma explicação simples, já que sou apenas um usuário normal de desktop.

    
por Nur 19.03.2013 / 17:35

3 respostas

104

Aplicações gráficas geralmente armazenam configurações e outros dados específicos do usuário em arquivos de configuração escritos dentro da pasta home do usuário. O principal mecanismo que os aplicativos usam para determinar o que devem usar como a pasta base do usuário é a variável de ambiente HOME . (Você pode inspecioná-lo com echo $HOME ).

Suponha que você esteja executando gedit (um editor de texto gráfico) como root . Se você executar sudo gedit , HOME continuará apontando para o seu diretório inicial, mesmo que o programa esteja sendo executado como root . Conseqüentemente, gedit gravará os arquivos de configuração como root em seu diretório inicial. Estas às vezes resultam no arquivos de configuração sendo possuídos por root e, portanto, inaccessible to you (quando você executar mais tarde o programa como você mesmo e não como root ). Isso acontece principalmente quando o aplicativo precisa criar um novo arquivo de configuração. Os arquivos recém-criados, por padrão, são de propriedade do usuário que os cria (quem, nesse caso, é root , não você).

Essa é a principal razão pela qual você deve executar aplicativos gráficos com um frontend gráfico sudo em vez de usar sudo direto. No Ubuntu e na maioria de seus derivados (incluindo o Xubuntu e o Lubuntu), a interface gráfica padrão é gksu / gksudo . No Kubuntu, é kdesudo . (Depende do ambiente de área de trabalho que está sendo usado.)

Se você quiser usar o sudo diretamente para executar um aplicativo gráfico como gedit , poderá executar:

sudo -H gedit

A sinalização -H torna sudo set HOME a apontar para a pasta base de root (que é /root ).

Isso ainda não irá lidar automaticamente com a propriedade de .Xauthority ao copiá-lo para uma pasta temporária pasta (essa é a outra coisa que os frontends gráficos sudo cuidam de você). Mas no evento não frequente em que .Xauthority esteja inacessível, você receberá um erro dizendo que é, e então poderá corrigir o problema excluindo-o ( sudo rm ~/.Xauthority ), pois ele é automaticamente regenerado. Assim, proteger a propriedade e as permissões de .Xauthority é menos importante do que proteger a propriedade e as permissões dos arquivos de configuração.

Em contraste com root -owned .Xauthority , quando os arquivos de configuração são de propriedade de root , nem sempre é tão óbvio qual é o problema (porque os programas gráficos geralmente são executados, mas não funcionam muito bem, e saída quaisquer erros úteis para o console). E às vezes é um incômodo maior para consertar, especialmente se você está em uma situação onde você quer um ou mais arquivos em seu diretório home para ser possuído por alguém que não seja você (porque então você não pode consertá-lo simplesmente recursivamente chown ing todos os seus arquivos de volta para si mesmo).

Portanto, sudo (pelo menos sem -H ) não deve ser usado para executar um aplicativo gráfico a menos que você esteja familiarizado com o funcionamento interno do aplicativo e tenha certeza de que não nunca tente gravar qualquer arquivo de configuração.

    
por Eliah Kagan 19.03.2013 / 17:49
23

Coloque simplesmente:

% bl0ck_qu0te%

Leia aqui . Além disso, possivelmente uma duplicata de Qual é a diferença entre "gksudo nautilus" e "sudo nautilus"?

    
por carnendil 19.03.2013 / 17:40
0

Uma alternativa para gksu nautilus e gksu gedit é usar nautilus-admin add-on. Ele permite procurar arquivos e diretórios com o Nautilus e, em seguida, abri-los como root (Administrador).

A instalação é direta:

sudo apt install nautilus-admin

Agora, quando você estiver no nautilus, você terá uma opção extra para Editar como administrador:

geditcomoraiznãopermitepreferências

Quandovocêexecutageditcomoroot,nãopodeusaraspreferênciasconfiguradascomoumusuáriocomumparaparadasdetabulação,convertertabulaçõesemespaços,nomedafonte,tamanhodafonte,quebradelinha,etc.

Pararesolverisso,euescrevioscriptsgeditparaherdaraspreferênciasdousuárioeaplicá-lasnaraiz: Como eu posso sincronizar o meu root gedit com as preferências do meu usuário gedit?

  • Chamar usando sgedit filename1 filename2 ...
  • Obtém as configurações de gedit do usuário para paradas de tabulação, fontes, quebra de linha, etc.
  • eleva para sudo -H para preservar a propriedade de arquivos enquanto obtém poderes de root.
  • Solicita a senha se o último sudo tiver expirado.
  • Obtém as configurações de gedit do sudo
  • Compara as diferenças entre as configurações do usuário e do sudo gedit
  • Executa configurações gsettings somente nas diferenças (reduz 174 comandos definidos para uma dúzia ou menos. Na próxima vez, talvez seja executada apenas uma ou duas alterações, mas muitas vezes sem alterações.
  • Chama gedit como uma tarefa em segundo plano para que o prompt do terminal reapareça imediatamente.
por WinEunuuchs2Unix 17.06.2018 / 20:15