꼭두각시에서 사용자 경로를 설정하는 방법은 무엇입니까?

꼭두각시에서 사용자 경로를 설정하는 방법은 무엇입니까?

나한테 흥미로운 게 있어질문이 문제는 수동으로 지정하여 해결할 수 있습니다 PATH.

문제는 내 root사용자가 다음과 같다는 것입니다 PATH.

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

NGINX/Passenger에서 Puppet Master를 user로 실행하면 다음 puppetPATH같이 설정됩니다.

/usr/sbin:/sbin

사용자에 대한 환경 변수는 어디에 설정되어 있습니까 PATH? puppet사용자에게 올바른 권한이 있는지 어떻게 확인합니까 PATH? 사용자에게 쉘이 없습니다:

puppet:x:103:106::/var/lib/puppet:/bin/false

Puppet Master 시작을 담당하는 Rack 파일 에 config.ru다음 명령문을 삽입하여 PATH사용자가 무엇을 puppet실행하고 있는지 확인했습니다.

puts "PATH: " + ENV.fetch('PATH', 'null')

출력은 PATH: null이므로 PATHPassenger 실행 시 환경 변수가 전혀 설정되지 않습니다.

저는 Ubuntu 14.04 amd64를 실행하는 Docker 컨테이너에서 작업하고 있습니다.

답변1

일반적으로 Linux는 PATH도트 파일을 읽어서 환경 변수를 설정합니다. 로그인하시면 /etc/profile읽어보실 수 있습니다 . 기본 환경 변수를 설정한 후, .shell_profile예를 들어 .bash_profile도트 파일이 없으면 읽으려고 시도하고 .bash_login, 존재하지 않으면 찾습니다 .profile.

문제로 돌아가 보겠습니다. 사용자에게 puppet쉘이 없거나 위 파일을 호스팅하지 않습니다. 를 실행해보시면 확인하실 수 있습니다 echo "$SHELL" && echo "$PATH".

PATH도트 파일 중 하나를 사용하여 수동으로 설정하거나 다음을 볼 수 있습니다 .http://www.puppetcookbook.com/posts/set-global-exec-path.html

답변2

말대로NGINX 문서에서:

기본적으로 nginx는 상위 프로세스에서 상속된 모든 환경 변수(TZ 변수 제외)를 제거합니다.

내 특정 문제에 대한 해결책은 몇 가지 다른 방법으로 달성될 수 있습니다.

해결 방법 1: Ruby에 PATH 변수 추가

config.ru파일을 편집하여 간단히 정의할 수 있습니다 PATH(아직 정의되지 않은 경우).

if not ENV['PATH']
    ENV['PATH'] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
end

이는 간단하고 문제를 해결하지만 다시는 볼 수 없는 구성에 숨겨져 있습니다.


해결 방법 2: NGINX에서 PATH 변수 설정

NGINX 사이트 구성에 변수를 설정하면 PATH문제에 대한 "즉시 사용 가능한" 솔루션을 얻을 수 있습니다.

server {
    listen 8140 ssl default_server;

    # ...
    # manually set PATH for Passenger; see PUP-3000
    env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    passenger_enabled on;
    # ...
}

관련 정보