Isso provavelmente se deve à diferença entre o login e os shells interativos. Veja aqui para um bom resumo.
O primeiro arquivo que o sistema lê para definir variáveis é /etc/environment
. Depois disso, quais arquivos são lidos depende da forma como o bash foi invocado. Quando você ssh user@machine
, você inicia um login shell , mas quando você su username
, você inicia um interativo, não-login shell . O Bash irá ler suas configurações de inicialização de arquivos diferentes em cada caso. O seguinte é da página man bash (ênfase minha):
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc.
Então, o bash lê diferentes arquivos de inicialização, dependendo de sua invocação. Dê uma olhada no conteúdo desses arquivos em sua máquina, você provavelmente encontrará $PATH
sendo definido de diferentes maneiras.
Dito isto, como @mpy corretamente apontado nos comentários, sudo su - user
deve iniciar um shell de login. Você está certo que está usando sudo su -
e não é simples sudo su
ou apenas su
? O -
deve iniciar um shell de login que deve ler exatamente os mesmos arquivos de inicialização que ssh user
.