Eu notei que em Raspbian que se eu executar um comando via ssh sem usar um shell, eu recebo o seguinte $PATH
;
$ ssh pi@raspberrypi env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
Não consigo encontrar onde esse caminho está realmente definido.
Estou assumindo que nem /etc/profile
ou /etc/bashrc
são originados, porque não é um login e não é um shell interativo. Parece que provavelmente visitaria bashrc
, mas isso não iria muito longe;
# cat /etc/bash.bashrc
# System-wide .bashrc file for interactive bash(1) shells.
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
pam
No entanto, parece que a sessão seria processada por meio do pam, e o /etc/pam.d/sshd
sugere que /etc/environment
, /etc/security/pam_env.conf
e /etc/default/locale
sejam usados para definir variáveis de ambiente;
# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session required pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
No entanto, nesta máquina, nenhum desses arquivos contém qualquer referência à configuração do caminho. por exemplo,
# cat /etc/default/locale
# File generated by update-locale
LANG=en_GB.UTF-8
# cat /etc/environment
root@raspberrypi:~#
# cat /etc/security/pam_env.conf | grep "^[^#;]"
root@raspberrypi:~#
login.defs
O único lugar onde encontrei um caminho semelhante ao
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
estava no arquivo /etc/login.defs;
login.defs:ENV_PATH PATH=/usr/local/sbin:/usr/local/bin: \
/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
Parece que o último caminho tem os elementos na ordem correta, mas com os componentes sbin
removidos. No entanto, os documentos para login.defs
sugerem que este arquivo é amplamente reprovado ;
Much of the functionality that used to be provided by the shadow
password suite is now handled by PAM. Thus, /etc/login.defs is no
longer used by passwd(1), or less used by login(1), and su(1). Please
refer to the corresponding PAM configuration files instead.
/home/pi/.bashrc
Os usuários pi foram criados com alguns arquivos de esqueleto, mas nenhum deles parece ser lido por um shell não interativo e não-login;
# cat /home/pi/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
/home/pi/.profile
# cat /home/pi/.profile
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
Esse $ PATH original está codificado em um binário em algum lugar, ou estou faltando alguma coisa?