Posso ter uma $ HOME diferente para mim como sudo?

4

Em nossa rede, todos os IDs de usuário e grupo são distribuídos por meio do NIS de um servidor central e o diretório $HOME de cada usuário está em uma pasta montada que mora naquele servidor central.

Obviamente, o usuário tem um GID diferente de root e, portanto, root não tem acesso à pasta $HOME montada, dificultando (se não for impossível) para o usuário executar algo como sudo apt update como isso precisa de acesso a $HOME como visto por sudo .

Minha pergunta é, posso ter um local de máquina $HOME para os arquivos & amp; pastas em que sudo precisa de acesso enquanto o $HOME para meu outro trabalho (não sudo ) continua apontando para a pasta montada?

Informações adicionais:

[user@machine ~]$ id
uid=544(user) gid=40(src) groups=40(src),101(systemd-journal)

[user@machine ~]$ sudo id
uid=0(root) gid=0(root) groups=0(root),40(src),101(systemd-journal),600(visitors),13010(hlcc),19016(identhw),51107(cadadm)

[user@machine ~]$ sh -c 'echo $HOME'
/net/server/home/user

[user@machine ~]$ sudo sh -c 'echo $HOME'
/net/server/home/user

Como posso alterar o resultado da última linha (por exemplo, a sudo versão de $HOME ) para uma pasta local em machine em vez do caminho de rede montado?

Editar:

Obrigado pelas respostas. Acontece que minha pergunta era quase idêntica a esta em unix.stackexchange.com .

Também descobri que o problema que tive com apt-get update não estava relacionado à variável de ambiente HOME , mas sim ao fato de que eu estava chamando sudo apt-get update do meu ( user ' s) pasta home, similar a esta questão que pode ser resolvida simplesmente chamando sudo apt-get update de outra pasta, por exemplo %código%.

Mas desde que minha pergunta aqui foi mais sobre o / visto por HOME , eu aceitei resposta do techraf porque Ele não requer nenhum parâmetro adicional ou definições na linha de comando sudo .

    
por FriendFX 16.12.2016 / 01:57

2 respostas

3

Você precisa adicionar a seguinte linha à seção do Ambiente de Comando dos sudoers (com sudo visudo ).

Defaults        env_keep -= "HOME"

Então você pode usar seus scripts sem alterações.

Existe uma diferença entre o Debian e o Ubuntu de uma forma que sudo manipula por padrão a variável HOME (especificamente esta variável, não o ambiente inteiro):

  • No Debian HOME value é substituído pelo diretório inicial da raiz (usuário alvo);

  • O Ubuntu preserva a configuração do usuário chamador.

Esta resposta no Unix.SE contém mais detalhes.

    
por techraf 16.12.2016 / 06:54
6

Se você invocar o sudo com -i , você receberá o root home.

Se você quiser que o sudo herde do ambiente atual, você pode simplesmente voltar para outra coisa.

Então, use sudo -i command ou HOME=/wherever sudo command .

Por exemplo:

sudo -i sh -c 'echo $HOME'

O que te dá:

/root

Ou:

HOME=/foo sudo sh -c 'echo $HOME'

O que te dá:

/foo
    
por Stephen 16.12.2016 / 03:10