나는 기본적으로 이것을해야합니다 :
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
옵션입니다su
sudo
-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
사용할 수 있으므로 부분 을 무시합니다.--user
sudo
.
환경 변수를을 통해 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
?