sudo를 통해 PATH 전달


13

간단히 말해서 매번 PATH를 플러시하지 않는 방법은 무엇입니까?

Ruby on Rails로 작성된 일부 웹 사이트를 서버에 배포했습니다 (Debian 테스트). 나는 Mongrel + Nginx를 사용하여 호스팅하지만 Mongrel을 다시 시작해야 할 때 (예 : 변경 후) 한 가지 문제가 있습니다.

모든 사이트는 VCS (git이지만 중요하지는 않음)에서 확인되며 소유자와 그룹이 내 사용자로 설정되어있는 반면 Mongrel은 권한이 심각하게 제한되어있는 허, mongrel 사용자로 실행됩니다. 따라서 Mongrel은 루트 (UID를 자동으로 변경할 수 있음) 또는 mongrel에서 시작해야합니다.

mongrel을 관리하려면 mongrel_cluster gem을 사용합니다. mongrel_cluster gem은 하나의 명령으로 여러 Mongrel 서버를 시작하거나 중지 할 수 있기 때문입니다. 그러나 /var/lib/gems/1.8/bin 디렉토리가 PATH에 있어야 합니다 . 절대 경로로 시작하기에는 충분하지 않습니다 .

루트 .bashrc에서 PATH를 수정하면 아무것도 변경되지 않았으며 sudo의 env_reset 및 env_keep도 조정하지 않았습니다.

그래서 질문 : PATH에 디렉토리를 추가하거나 사용자의 PATH를 sudo에 유지하는 방법은 무엇입니까?

업데이트 : 몇 가지 예

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults    env_keep = "PATH"
root    ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

또한 데비안 안정 (레니) 에서도이 방법으로 정확하게 작동한다고 말할 수 있습니다.


답변:


12

몇 시간 동안 같은 문제로 어려움을 겪었습니다. 데비안 레니에서는 다음을 추가하여 문제를 해결할 수 있습니다

Defaults        exempt_group=<your group> 

sudoers 파일에.

이것이 컴파일 된 --secure-path 옵션을 둘러 볼 수있는 유일한 방법입니다 (내가 아는 한).

특히,이 것 또한 그들이 sudo를 할 때 암호를 입력 할 필요가 사용자가 면제.


3

당신이 경우 secure_path에 설정 /etc/sudoers, 당신은 놀 수 env_reset/ env_keep모든 당신 같은과 경로에 차이를하지 않습니다. 이와 같은 것이 있으면 주석 처리하십시오.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

물론 설정되지 않았습니다.
whitequark

0

man sudo 의 env_reset 및 env_keep 옵션을 살펴보십시오 . 그러나 이미 수행 한 것처럼 들립니다 (실수로 env_keep "keepenv"라고 부릅니다). 당신이 경우 비활성화 (기본값을 사용하는)을 env_reset 옵션을, 나는 삭제 안 생각 어떤 ENV 변수를. 그러나 이것은 덜 안전합니다.

sudo에는 secure_path 옵션도 있습니다. 나는 이것이 기본적으로 활성화되어 있다고 생각합니다. 사용 중지 할 수 있습니다.

위의 옵션은 / etc / sudoers 파일에 설정되어 있습니다. -isudo에 대한 명령 행 옵션 도 있습니다 . 그러면 sudo가 /root/.profile 또는 /root/.login을 실행하게됩니다. 원하는 경로를 설정할 수 있습니다.


1
아니요, env_reset을 끄면 여전히 PATH가 변경됩니다 (지우지 않음). 아마도 이것은 / * / sbin dirs를 추가하기 위해 수행됩니다. 아니요, -i 옵션은 대화식 쉘을 시작하기 때문에 적합하지 않으며 명령 만 실행하면됩니다.
whitequark

자, 데비안 (LVM으로 마이그레이션했기 때문에)과 RubyGem을 다시 설치하면 문제가 사라졌습니다. 귀하의 답변이 가장 유용하여 지금 받아 볼 수 있습니다.
whitequark

-1

글쎄, 당신은 뭔가 잘못하고 있습니다. 또한 / etc / sudoers 파일로 수행 한 작업을 지정하지 않았습니다. 다음은 BTW CentOS 시스템입니다.

먼저, 올바른 env_keep 설정이 있습니다 (PATH에 있음).

sudo grep -5 경로 / etc / sudoers 기본값 env_keep = "컬러 디스플레이 호스트 이름 히스토리 크기 입력 KDEDIR \ LS_COLORS 메일 PS1 PS2 QTDIR 사용자 이름 \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASLC_LCAGE_MOMICONDUCE

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

좋아 보인다 이제 env_keep 설정을 제거하고 다시 시도하십시오.

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

슬픈 길 :

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin

1
나는 그것을 두 번 이상 확인했습니다! 게시물에서 업데이트를 확인하십시오.
whitequark

나는 같은 문제가있다, 나는 당신이 언급 한 올바른 설정을 가지고있다
Draemon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.