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

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

Eu lia documentação da comunidade "RootSudo"e estou interessado nesta linha:

Você devenuncause o sudo normal para iniciar aplicativos gráficos como Root.

Por que? Qual é a diferença? Forneça uma explicação simples, pois sou apenas um usuário normal de desktop.

Responder1

No Ubuntu 19.10 e posterior, a advertência emaquele artigo(e nesta resposta) não se aplica mais. VerResposta do WinEunuuchs2Unixassim comoessa questão.

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

Suponha que você esteja correndogedit(um editor de texto gráfico) comoroot. Se você correr sudo gedit, HOMEcontinuará apontando paraseudiretório inicial, mesmo que o programa esteja em execuçãocomoroot. Conseqüentemente, geditescreverá arquivos de configuraçãocomorootem seu diretório inicial. Esseàs vezes resultarános arquivos de configuração sendocontroladoporroote assiminacessível para você(quando você executar o programa posteriormente 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, pertencem ao usuário que os cria (que neste caso é root, não você).

Essa é a principal razão pela qual você deve executar aplicativos gráficos com um sudofrontend gráfico em vez de diretamente sudo. No Ubuntu e na maioria de seus derivados (incluindo Xubuntu e Lubuntu), o frontend gráfico padrão égksu/gksudo. No Kubuntu ékdesudo. (Depende doambiente de área de trabalhosendo usado.)

Se vocêquererpara usar sudodiretamente para executar um aplicativo gráfico como gedit, você pode executar:

sudo -H gedit

O -Hsinalizador faz com que sudoo conjunto HOMEaponte para roota pasta pessoal do (que é/root).

Isso ainda não controlará automaticamente a propriedade de.Xauthoritycopiando-o para uma pasta temporária (essa é outra coisa que sudoos frontends gráficos cuidam para você). Mas no caso raro de .Xauthorityinacessibilidade, você receberá um erro informando que sim e poderá corrigir o problema excluindo-o ( sudo rm ~/.Xauthority), pois ele é regenerado automaticamente. Assim, proteger .Xauthoritya propriedade e as permissões de é menos importante do que proteger a propriedade e as permissões dos arquivos de configuração.

Em contraste com um root-owned .Xauthority, quando os arquivos de configuração passam a ser 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 geram erros úteis no console). E às vezes é um incômodo maior para consertar, especialmentese você estiver em uma situação em que deseja que um ou mais arquivos em seu diretório inicial pertençam a alguém que não seja você(porque então você não pode consertar isso simplesmente retornando recursivamente chowntodos os seus arquivos para você mesmo).

Portanto, sudo(pelo menos sem -H) não deve ser usado para executar uma aplicação gráficaa menos quevocê está bastante familiarizado com o funcionamento interno do aplicativo e tem certeza de que ele nunca tenta gravar nenhum arquivo de configuração.

Responder2

Simplificando:

Isso evita que os arquivos em seu diretório inicial sejam propriedade do root.

Leia-oaqui. Além disso, possivelmente uma duplicata deQual é a diferença entre “gksudo nautilus” e “sudo nautilus”?

Responder3

Atualização do Ubuntu 19.10

A partir deUbuntu 19.10, digitar sudo some_commandagora tem o mesmo efeito que digitar sudo -H some_command. Isso significa que o diretório de quaisquer arquivos de configuração tocados estará no /rootdiretório e não /home/regular_userIDno diretório (também conhecido como $HOME).

Isso torna todas essas perguntas e respostas um ponto discutível em grande parte para usuários do Ubuntu 19.10 e superior.

Para ver se sudoestá funcionando sudo -Hem sua distribuição, tente estes pequenos testes:

$ sudo printenv | grep HOME
HOME=/home/rick

$ sudo -H printenv | grep HOME
HOME=/root

Como você pode ver, o desempenho sudoacima não funciona sudo -Hdessa forma, usar plain sudopode danificar os arquivos de configuração do usuário.


Uma alternativa para gksu nautilus, gksu geditou sudo -H gedité usar o nautilus-admincomplemento. Ele permite que você navegue em arquivos e diretórios comNáutiloe abra-os como root (Administrador).

A instalação é simples:

sudo apt install nautilus-admin

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

nautilus admin.gif


geditcomo root não permite preferências

Ao executar geditcomo root, você não pode usar as preferências configuradas como um usuário normal para paradas de tabulação, conversão de tabulações em espaços, nome da fonte, tamanho da fonte, quebra de linha, etc.

Para resolver isso, escrevi o script sgeditpara herdar as preferências do usuário e aplicá-las ao root:Como posso sincronizar meu gedit root com as preferências do meu usuário gedit?

  • Ligue usandosgedit filename1 filename2 ...
  • Obtém as configurações do gedit do usuário para tabulações, fontes, quebra de linha, etc.
  • Eleva para sudo -Hpreservar a propriedade do arquivo enquanto obtém poderes de root.
  • Solicita senha se a última sudotiver expirado.
  • Obtém as configurações do gedit do sudo
  • Compara as diferenças entre as configurações do usuário e do sudo gedit
  • Executa gsettings set apenas nas diferenças (reduz 174 comandos set para uma dúzia ou menos. Da próxima vez, talvez seja executado apenas uma ou duas alterações, mas muitas vezes nenhuma alteração.
  • Chamadas geditcomo uma tarefa em segundo plano, de forma que o prompt do terminal reapareça imediatamente.

informação relacionada