Sudo - 대상 사용자 환경

Sudo - 대상 사용자 환경

(너무 많은 어려움을 겪지 않고) 달릴 수 있는 방법이 있나요?sudo -uuser command이런 식으로user환경이 완벽하게 보존되어 있나요?

PATH기본적으로 나에게 필요한 것은 특정 ID(주로 데이터베이스 관련 JAVA_HOME(Oracle 및 Postgres) 변수) 를 에뮬레이트하기 위해 sudo를 실행할 수 있는 모든 사용자에 대해 특정 환경 변수가 설정되어 있는지 확인하는 것입니다 .

즉, user 로 wobble실행 하면 경로 대신 경로가 표시되는 것을 sudo -u wibble echo $PATH보고 싶습니다 .wibblewobble

답변1

물론 모든 사용자 또는 특정 사용자에 대해 다음을 수행할 수 있지만 모든 명령에 대해 작동합니다 sudo -u anyuser. /etc/sudoers파일을 편집 하고 다음과 같은 줄을 추가하십시오.

Defaults env_keep+="PATH JAVA_HOME"

모든 사용자에 대해 또는

Defaults:wobble env_keep+="PATH JAVA_HOME"

그냥 스윙하고 유지하려는 모든 변수를 사용하세요. 사실 PATH보통 특수한 경우이고 초기화되기 때문에 다음과 같은 항목으로 취소해야 할 수도 있습니다.

Defaults:wobble  !secure_path, env_keep+="PATH JAVA_HOME"

분명히 이러한 기능은 타당한 이유가 있으므로 주의해야 합니다.

sudo -E다음과 같은 sudoers 항목을 통해 환경을 보호할 수도 있습니다.

wobble ALL = (wibble) SETENV: ALL

그러나 다음과 같은 명령을 실행할 수는 있지만 특수한 경우에는 여전히 PATH가 재설정됩니다.

sudo -E PATH=$PATH -u wibble ...

답변2

다음을 사용하여 sudo -i사용자의 전체 로그인 프로세스를 완료 할 수 있습니다.sudo -i -u wibble command

그러나 sudo -i -u wibble echo $HOME기본 경로는 계속 인쇄됩니다. 이는 sudo가 시작되기 전에 프롬프트가 $HOME var를 확장하고 sudo가 이에 대해 아무것도 할 수 없기 때문입니다. 따라서 명령줄을 통해 환경 변수를 전달해야 하는 경우 올바르게 이스케이프되어야 합니다. 다음은 몇 가지 예입니다.

sudo echo $HOME
> /home/user
sudo -i echo '$HOME'
> /root
sudo echo '$HOME'
> $HOME
sudo bash -c 'echo $HOME'
> /root
sudo -i bash -c 'echo $HOME'
> /root

이들 모두에 -u wibble(명령 앞에) 추가하여 wibbles로 실행할 수 있습니다.

답변3

찾고 계시는 것 같아요

sudo su - USER

그러면 다음이 시작됩니다.사용자환경 변수( SUDO_USER등도 제거됨):

   -, -l, --login
          Start the shell as a login shell with an environment similar to a real login

관련 정보