Raspbian에서 쉘을 사용하지 않고 ssh를 통해 명령을 실행하면 다음과 같은 결과가 나타납니다 $PATH
.
$ ssh pi@raspberrypi env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
이 경로가 실제로 어디에 설정되어 있는지 찾을 수 없습니다.
로그인도 아니고 대화형 쉘도 아니기 때문에 /etc/profile
or 에 대한 소스가 없다고 가정합니다 . /etc/bashrc
방문할 것 같지만 bashrc
그리 멀리 가지 않습니다.
# 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을 통해 처리될 것으로 보이며 , 및 를 /etc/pam.d/sshd
사용하여 환경 변수를 설정하는 것이 좋습니다./etc/environment
/etc/security/pam_env.conf
/etc/default/locale
# 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
그러나 이 컴퓨터에서는 이러한 파일 중 어느 것도 설정 경로에 대한 참조를 포함하지 않습니다. 예를 들어
# 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:~#
로그인 이름.defs
내가 비슷한 길을 찾을 수 있는 유일한 곳은
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
/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
후자의 경로에는 올바른 순서로 요소가 있는 것처럼 보이지만 구성 요소가 sbin
제거되었습니다. 그러나 설명서에 login.defs
따르면 해당 파일은 다음과 같습니다.대부분 더 이상 사용되지 않음;
이전에 Shadow Cipher Suite에서 제공했던 대부분의 기능은 이제 PAM에서 처리됩니다. 따라서 passwd(1)은 더 이상 /etc/login.defs를 사용하지 않으며 login(1)과 su(1)은 /etc/login.defs를 덜 자주 사용합니다. 해당 PAM 구성 파일을 참조하세요.
/home/pi/.bashrc
pi 사용자는 일부 뼈대 파일을 사용하여 생성되지만 비대화형, 비로그인 셸의 경우 파일을 읽은 것으로 나타나지 않습니다.
# 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
원본 $PATH가 일부 바이너리로 하드코딩되어 있나요? 아니면 뭔가 빠졌나요?
답변1
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
OpenSSH 이식 가능한 코드에서는 다음과 같습니다._PATH_STDPATH
/usr/bin:/bin:/usr/sbin:/sbin
이는 루트 및 비루트 모두에 대한 기본값입니다. 이것데비안 빌드 규칙/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
루트 사용자의 경우 라이브 미디어(udeb)가 설치된 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Ubuntu에서는 루트가 아닌 사용자 로 설정하고 그렇지 않으면 루트가 아닌 사용자로 설정합니다./usr/local/bin:/usr/bin:/bin
/usr/local/bin:/usr/bin:/bin:/usr/games