나는 기본적으로 이것을해야합니다 :
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
작동하지 않습니다. env 변수 $ DUMMY를 su에 어떻게 전달할 수 있습니까? -p는 -l과 작동하지 않습니다.
나는 기본적으로 이것을해야합니다 :
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
작동하지 않습니다. env 변수 $ DUMMY를 su에 어떻게 전달할 수 있습니까? -p는 -l과 작동하지 않습니다.
답변:
로그인 쉘을 호출하지 않고 할 수 있습니다 :
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
또는:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
-p의 옵션 su명령은 환경 변수를 보존 할 수 있습니다.
-p옵션입니다susudo
-m변수를 유지하는 다른 스레드가 있으며 다른 스레드 -c에는 차이점이 무엇입니까? 그리고이 답변 일에 대한 의견 중 하나 -E stackoverflow.com/questions/10488758/…
전문가 팁 : 실제로 실행할만한 이유는 없습니다sudo su . 다른 사용자로 명령을 실행하려면을 사용하십시오 sudo -u username command. 루트 쉘을 원하면 sudo -i또는을 실행하십시오 sudo -l. 루트 계정을 활성화 한 경우 su단독으로 실행할 수도 있지만 sudo su유용하지는 않습니다. 네, 어디서나 볼 수 있습니다.
즉, 사용자 세션의 환경을 보존 sudo하는 -E스위치가 있습니다.
-E, --preserve-env
Indicates to the security policy that the user wishes to preserve
their existing environment variables. The security policy may
return an error if the user does not have permission to
preserve the environment.
따라서 먼저 변수를 내보내고 다음을 실행해야합니다 sudo -E.
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
은 bash -c필요하지 않습니다. 그러나 내가 실행 sudo -Eu bob echo "$DUMMY"하면 루트 셸이 시작되기 전에 변수가 확장되므로 명령이 실제로 작동한다는 것을 보여주지 않습니다.
$ sudo -u bob echo $DUMMY ## looks like it works but doesn't
dummy
$ sudo -u bob bash -c 'echo D:$DUMMY' ## now we see it failed
D:
$ sudo -Eu bob bash -c 'echo D:$DUMMY' ## works as expected
D:dummy
env_keep입니다 sudoers. 아마도 다음과 같습니다 Defaults env_keep += "DUMMY"..
sudo. 단일 변수에는 더 번거 롭습니다. 항상 내 보내야 할 대상에만 유용합니다.
LD_PRELOAD과 이월 에는 상당한 차이가 LESSCHARDEF있습니다. 나는 편의가이기는 논쟁이라고 생각하지 않는다 ...
다음은 보안 정책을 변경하기 위해 필요하지 않은 솔루션입니다.
옵션을 su사용할 수 있으므로 부분 을 무시합니다.--usersudo .
환경 변수를을 통해 command실행 에 전달하려고합니다 sudo. 그러나 sudo환경 변수를 명령에 전달할 수는 없습니다 (유효한 보안 이유가 있으며 일부 변수는 위험 할 수 있습니다). 쉘은 환경 변수를 설정하는 데 사용될 수 있으며 sudo스크립트가 전달 된 상태에서 쉘을 실행할 수 있습니다. 따라서 sudo환경 변수를 설정하는 스크립트를 실행하도록 지시하십시오.
var_a=someThing
var_b=someOtherThing
sudo bash -c "
export var_a=\"${var_a}\"
export var_b=\"${var_b}\"
the_command some_args
"
sudo -iu ec2-user echo $DUMMY?