(너무 많은 어려움을 겪지 않고) 달릴 수 있는 방법이 있나요?sudo -u
user command
이런 식으로user
환경이 완벽하게 보존되어 있나요?
PATH
기본적으로 나에게 필요한 것은 특정 ID(주로 데이터베이스 관련 JAVA_HOME
(Oracle 및 Postgres) 변수) 를 에뮬레이트하기 위해 sudo를 실행할 수 있는 모든 사용자에 대해 특정 환경 변수가 설정되어 있는지 확인하는 것입니다 .
즉, user 로 wobble
실행 하면 경로 대신 경로가 표시되는 것을 sudo -u wibble echo $PATH
보고 싶습니다 .wibble
wobble
답변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