`/ etc / sudoers` — 하나의 명령에만`env_keep`을 지정 하시겠습니까?


23

sudo지정된 명령에 대해서만 특정 환경 변수를 유지 하도록 지정하는 방법이 있습니까? 어떤 목적을 위해 나는 $HOMEenv를 원합니다 . 특정 명령을 실행할 때 변수가 유지됩니다. 다른 목적과 다른 명령을 위해 재설정하고 싶습니다. 이것으로 할 수 있습니까 /etc/sudoers?

편집하다:

답변 주셔서 감사합니다. 후속 질문을 할 수 있을지 궁금합니다. "왜 왜 작동하지 않습니까?"

내가 일하려고하는 예제 sudo nano에서 내을 읽고 싶습니다 $HOME/.nanorc. 이것을 사용하면 :

Defaults:simon env_keep=HOME

완벽하게 작동합니다. 이것을 사용하면 :

Defaults!/bin/nano env_keep=HOME

아니면 이거:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

전혀 작동하지 않습니다. 이유에 대한 제안? (나는 btw 데비안 테스트 중입니다.)

(참고 : nanobtw 는 구체적 이지 않다고 생각합니다 . 간단히 echos 한 줄 bash 스크립트로 동작을 재현 할 수 있습니다 $HOME).


1
동일한 구성 파일을 사용하기 위해 sudo를 통해 나노 실행을 시도하는 대신 대신 사용하십시오 sudoedit. sudoedit파일의 내용을 tmp 파일로 복사하고 사용자가 선택한 편집기를 사용자로 실행합니다. 편집기가 종료되면 변경 사항이 있는지 확인한 다음 원본을 편집 된 내용으로 바꿉니다. $EDITOR또는 $ VISUAL` env vars를 설정하여 실행할 편집기를 선택할 수 있습니다 .
Arrowmaster

@Arrowmaster-고마워요, 그것은 내가 엉망인 방법보다 더 나은 접근법처럼 보입니다. 나는 이미 sudo내 자신의 기능으로 래핑 하고 있기 때문에 if [ "$1" == "$EDITOR" ]; then블록을 추가하고 sudoedit대신 대신 호출 하고 있습니다 :)
simon

답변:


21

무시하려면 env_keep에만 /path/to/command(모든 사용자가 어떤 규칙을 통해 호출 할 때)와 사용자 joe(자신이 실행되는 명령 상관없이) :

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

-=또는 +=을 사용 하여 env_keep목록에 항목을 제거하거나 추가 할 수 있습니다 .


훌륭합니다, 감사합니다 해당 구문의 적절한 예를 찾을 수 없습니다. 이제 당신이 나를 위해 그것을 철자 했으므로, 나는 페이지에서 어떻게 그것을 해결해야했는지 알 수 있으며 man약간 어리 석습니다. 물론이 답변이 다른 사람들에게도 도움이 될 것입니다.
사이먼

1
@simon : 어리석은 느낌이 들지 않습니다. sudoers맨 페이지 의 구문 설명 은 공식 설명에서 해결하기가 어렵고 예제 작성 방법을 이미 알고 있다면 예제를 쉽게 찾을 수 있습니다.
Gilles 'SO- 악마 그만'

흠-아마 나는 곧 말했다. 이제 시도해 보니 실제로 작동시킬 수 없습니다. 내 개정판을 살펴 보는 데 문제가 될 수 있습니까?
사이먼

1
@simon : 내 생각에 모든 것을 할 수 있고 해당 env_keep설정 이없는 항목도 있습니다 ( simon ALL = ALL). Sudo는 마지막으로 일치하는 항목을 사용합니다 .
Gilles 'SO- 악의를 멈추십시오

secure_path가 설정되어있는 경우, 당신은 또한 기본값을 추가해야합니다, 조심! 조 secure_path
Jistanidiot

6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

그 줄은 내 자신 의 사용자 구성 파일 /etc/sudoerspbuilder찾는 문제를 해결하기 $HOME위한 것이지만 루트로 실행해야합니다 (시스템으로 이동하면 /root시스템과 사용자 구성 파일을 모두 갖는 목적을 상실합니다).


예, 그것은 제가 생각했던 것과 매우 유사한 유스 케이스입니다. 감사합니다!
사이먼

내 개정판의 예제가 작동하지 않는 이유를 알고 있습니까?
사이먼

@simon sudo는 구성의 항목 순서에 대해 매우 까다 롭습니다. 나중의 항목은 이전 항목을 덮어 씁니다. 구성에서 이와 같은 충돌이있을 수 있습니다.
Arrowmaster

1

남자 sudoers :

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller’s environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

따라서 env_reset, env_keepenv_check/ etc / sudoers에서 사용할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.