No Ubuntu 12.04, quando sudo -s
a variável $ HOME não é alterada, por isso, se meu usuário comum é regularuser
, a situação é a seguinte:
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
Eu abandonei o Ubuntu há muito tempo, então não tenho certeza, mas acho que esse é o comportamento padrão. Então, minhas perguntas são:
Q1 Como isso é feito? Onde está a configuração?
Q2 Como faço para desativá-lo?
Edit: Obrigado pelas respostas, que esclareceram um pouco as coisas, mas acho que devo adicionar algumas perguntas, para obter a resposta que estou procurando.
Q3 No Debian sudo -s
, altera a variável $ HOME para /root
. Pelo que recebo das respostas e man sudo
o shell correu, sudo -s
é o que é indicado /etc/passwd
, certo?
Q4. No entanto, no Ubuntu e no Debian, o shell fornecido /etc/passwd
como root é /bin/bash
. Também em ambos os sistemas, não consigo encontrar onde está a diferença em .profile
ou .bashrc
arquivos, no que diz respeito a $ HOME, de modo que o comportamento de sudo -s
difere. Alguma ajuda nisso?
sudo
se comporte de maneira diferente entre o Debian e o Ubuntu.sudo
, acho que realmente há uma diferença por padrão. No entanto, eu não aposto nisso, pois estou em uma caixa que foi configurada por outra pessoa e está em execução há um bom tempo. De qualquer forma, para qualquer pessoa interessada, encontrei security.stackexchange.com/questions/18369/… e bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140 .Respostas:
O Sudo tem muitas opções de configuração em tempo de compilação. Você pode listar as configurações na sua versão com
sudo -V
. Uma das diferenças entre a configuração no Debian wheezy e no Ubuntu 12.04 é que aHOME
variável de ambiente é preservada no Ubuntu, mas não no Debian; ambas as distribuições apagam todas as variáveis de ambiente, exceto algumas que são explicitamente marcadas como seguras para preservar. Assim,sudo -s
preservaHOME
no Ubuntu, enquanto o DebianHOME
é apagado e osudo
define no diretório inicial do usuário alvo.Você pode substituir esse comportamento no
sudoers
arquivo Executevisudo
para editar osudoers
arquivo. Existem várias opções relevantes:env_keep
determina quais variáveis de ambiente são preservadas. UseDefaults env_keep += "HOME"
para manter aHOME
variável de ambiente do chamador ouDefaults env_keep -= "HOME"
para apagá-la (e substituí-la pelo diretório inicial do usuário de destino).env_reset
determina se as variáveis de ambiente são redefinidas. A redefinição de variáveis de ambiente geralmente é necessária para regras que permitem a execução de um comando específico, mas não possui um benefício direto de segurança para regras que permitem a execução de comandos arbitrários de qualquer maneira.always_set_home
, se definido, fazHOME
com que seja substituído, mesmo que tenha sido preservado porenv_reset
estar desabilitado ou porHOME
estar naenv_keep
lista. Esta opção não tem efeito seHOME
não for preservada de qualquer maneira.set_home
é comoalways_set_home
, mas só se aplica asudo -s
, não ao chamarsudo
com um comando explícito.Essas opções podem ser definidas para um determinado usuário de origem, um determinado usuário de destino ou um determinado comando; veja o
sudoers
manual para detalhes.Você sempre pode optar por substituir
HOME
uma chamadasudo
, passando a opção-H
.O shell nunca substituirá o valor de
HOME
. (Ele definiriaHOME
se não estivesse definido , massudo
sempre definiráHOME
um caminho ou outro.)Se você executar
sudo -i
,sudo
simula um login inicial. Isso inclui a configuraçãoHOME
no diretório inicial do usuário de destino e a chamada de um shell de login .fonte
Use em
sudo -H -i
vez desudo -s
obter um shell raiz de logon interativo:De
man sudo
:fonte
-i
implica-H
.Isso tem pouco a ver com o comportamento
sudo
e muito a ver com a diferença entre um "shell de login" e um "shell sem login". A solução rápida écomo pode ser visto com:
Conforme observado no manual do sudo:
fonte
HOME
ou não tem tudo a ver com a forma como o sudo está configurado./etc/sudoers
, não há nada de diferente entre o Debian e Ubuntu, tanto quanto $ HOME está em causa.always_set_home
eset_home
porsudoers
.A maneira bastante popular de obter o shell raiz também está usando:
fonte
sudo -i -H
, mas ele falhou ao instalar um pacote npm global do git. Comsudo su -
isso funciona! Obrigado.Para se livrar do comportamento diferente do
sudo -s
Ubuntu e Debian, respectivamente, você pode usar umsudo
wrapper (resposta à Q4):fonte