Não gosto muito de Linux e tenho o seguinte problema relacionado a como algumas variáveis de ambiente são desativadas permanentemente.
O problema é que cada vez que entro no meu sistema, executando o comando env , obtenho algumas variáveis que tenho que remover permanentemente, em particular:
my.username@VHCLWSO2AS02:~$ env
..........................................
HTTP_PROXY=http://127.0.0.1:3128
HTTPS_PROXY=http://127.0.0.1:3128
http_proxy=http://127.0.0.1:3128
https_proxy=http://127.0.0.1:3128
.........................................
.........................................
.........................................
estes para variáveis relacionadas ao proxy devem ser removidos permanentemente (para todos os usuários, também para o usuário root) e não tenho certeza de como fazê-lo.
O arquivo .profile dentro do diretório inicial do usuário logado contém:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
Não consigo ver a declaração das variáveis de ambiente dentro deste arquivo.
O arquivo .bashrc dentro do diretório inicial do usuário logado contém:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'$
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
O arquivo /etc/environment deve conter declaração de variáveis evironmnet que afetam o sistema como um todo (em vez de apenas um usuário específico) contém:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
#http_proxy=http://10.173.17.92:3128
#https_proxy=http://10.173.17.92:3128
#HTTP_PROXY=http://10.173.17.92:3128
#HTTPS_PROXY=http://10.173.17.92:3128
Isso contém minha definição de variáveis, eu comentei essas variáveis para desativá-las permanentemente algumas vezes. Nunca reiniciei o sistema porque é um servidor e não consigo. Não tenho certeza se essa situação de não reinicialização pode ser a causa do meu problema (posso apenas sair da sessão).
Por que ainda obtenho essas variáveis cada vez que entro novamente em meu sistema via SSH? O que devo fazer para excluir permanentemente essas variáveis? o que estou perdendo?
Não,
unset
não pode remover variáveis de ambiente permanentemente, assim comoexport
também não as define permanentemente, porque simplesmente não existe um ambiente "permanente" em primeiro lugar - ele é sempre montado novamente por processos e scripts de login.(Todas as variáveis de ambiente são por processo e copiadas de seu processo de login para todos os programas. No entanto, as alterações nunca são copiadas de filho para pai.)
Ambos os comandos
export
eunset
alteram apenas o ambiente do processo atual (ou seja, o shell 'bash') em que estão sendo executados, e é tudo sobre onde você coloca esses comandos que torna seus efeitos "permanentes" ou não. Por exemplo, se você colocar tais comandos em ~/.profile, eles serão executados durante cada login e, portanto, parecerão permanentes.É possível que não reiniciar seja o problema. Por exemplo, se as variáveis foram definidas uma vez por /etc/environment, pode ser que elas também tenham sido definidas para o processo principal que aceita seus logins e, portanto, herdadas totalmente quando esse processo inicia seus shells de login.
No entanto, isso não deve ser um problema com o SSH, pois o sshd sempre limpa seu ambiente para cada conexão. Procure outras fontes em vez disso:
Certifique-se de que os envvars não estejam sendo definidos por
/etc/profile
ou/etc/profile.d/*.sh
.Certifique-se de que eles não estão sendo definidos por
/etc/bash.bashrc
nenhum dos dois.Verifique se há
~/.pam_environment
, que é um arquivo de configuração especial lido antes mesmo de o shell iniciar.Se você usar o Bash, verifique
~/.bash_profile
e~/.bash_login
– se algum desses arquivos existir, ele terá prioridade e o ~/.profile "geral" será completamente ignorado.Verifique se há
~/.ssh/environment
,~/.ssh/rc
e outros arquivos nesse local.Faça uma pesquisa com
grep -r HTTP_PROXY /etc
para descobrir outros possíveis lugares escondidos.Por fim, se nada mais funcionar, colocar
unset HTTP_PROXY
o script do seu perfil fará com que ele remova as variáveis toda vez que você fizer login, tornando o efeito um tanto permanente.