AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 438564
Accepted
sinecode
sinecode
Asked: 2018-04-19 09:38:34 +0800 CST2018-04-19 09:38:34 +0800 CST 2018-04-19 09:38:34 +0800 CST

Como o Ubuntu e o Debian gerenciam $HOME para usuários com privilégios sudo?

  • 772

Eu tenho um script bash myhome.shcontendo apenas uma linha:

echo $HOME

O proprietário do script é um usuário:

$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh

No Ubuntu 16.04 e 17.10 , recebo:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

No Debian Buster/Testing eu recebo:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

Não entendo porque dentro do script no Debian, se for executado com sudo, sempre recebo $HOME=/rootenquanto no Ubuntu recebo $HOME=/home/user. Alguém sabe o que os desenvolvedores do Ubuntu mudaram?

bash debian
  • 1 1 respostas
  • 3478 Views

1 respostas

  • Voted
  1. Best Answer
    filbranden
    2018-04-19T09:51:28+08:002018-04-19T09:51:28+08:00

    Tanto o Debian quanto o Ubuntu enviam um /etc/sudoersarquivo que contém Defaults env_reset, que redefine as variáveis ​​de ambiente.

    No entanto, o comportamento de não tocar env_resetfoi alterado para redefini-lo para a casa do usuário de destino.$HOME

    Em versões até 19.04, o Ubuntu corrigiu sua versão sudopara manter o comportamento anterior (de não alterar $HOME): https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

    Isso foi desfeito para 19.10 e, a partir de então, o Ubuntu faz o que o upstream sudoe todas as outras distribuições do Linux fazem e muda $HOMEpara o usuário de destino. Veja este Q&A em askubuntu.com para todos os detalhes: Como o sudo lida com $HOME de forma diferente desde 19.10? . A reversão não foi feita para versões anteriores, então 18.04 LTS ainda tem o comportamento específico do Ubuntu.


    O seguinte é o texto antigo desta resposta e se aplica às versões do Ubuntu até 19.04, incluindo 18.04 LTS.

    No Ubuntu, para redefinir a variável de ambiente $HOME para o usuário de destino, é necessário definir Defaults always_set_homeou Defaults set_home(nesse caso, apenas sudo -so HOME será atualizado) em seu arquivo /etc/sudoers.

    Este bug no rastreador do Ubuntu tem mais razões para não definir $HOME no sudo: https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495

    Veja o comentário nº 4:

    Se HOME for removido, por exemplo, vim, bash, etc., usará /root/.vimrc, /root/.bashrc, etc, em vez de ~/.vimrc, ~/.bashrc do usuário, etc. para executar clientes X via sudo, eles também provavelmente procurariam nos locais errados por arquivos de configuração, e há uma chance de que os clientes X11 nem consigam se conectar ao servidor X11 se forem direcionados para o arquivo .Xauthority errado.

    É uma decisão consciente dos desenvolvedores do Ubuntu.

    Esta resposta tem mais detalhes sobre as opções de sudoers, como always_set_home: https://unix.stackexchange.com/a/91572/281844


    Há um segundo problema em sua pergunta, sudo echo $HOMEque ainda exibe a casa do usuário mesmo no Debian.

    Isso acontece porque o shell está se expandindo $HOME antes de executar o sudocomando.

    Então, é isso:

    $ sudo echo $HOME
    

    É primeiro expandido pelo shell em:

    $ sudo echo /home/user
    

    E então o sudo é executado echo /home/usercomo root ...

    Isso deve demonstrar a diferença também:

    $ sudo bash -c 'echo $HOME'
    /root
    

    Ou obtenha um shell root completo e veja a variável de ambiente lá:

    $ sudo -s
    # echo $HOME
    /root
    
    • 68

relate perguntas

  • Enquanto a linha lê mantendo os espaços de escape?

  • Debian Stretch: gnome-software segfault em libgs_plugin_systemd-updates.so

  • ordem de substituição de processos `te` e `bash`

  • Como digitar ü no Pinyin IME?

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve