onde é o PATH para usuários setados no linux, antes de qualquer shell, ou sudo, pam.d muda isso?

4

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?

    
por Tom H 04.08.2016 / 21:25

1 resposta

3

É codificado no binário sshd .

$ strings /usr/sbin/sshd |grep /usr/local/bin
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

No código portátil do OpenSSH, isso é _PATH_STDPATH cujo padrão é /usr/bin:/bin:/usr/sbin:/sbin para raiz e não raiz. As regras de compilação do Debian definem isso como /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin para raiz, /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games para não-root no Ubuntu, /usr/local/bin:/usr/bin:/bin na instalação live media (udeb) e /usr/local/bin:/usr/bin:/bin:/usr/games para não-root de outra forma.

    
por 05.08.2016 / 02:05