[unix] 사용자 env를 사용하기 위해 sudo -u $ user를 어떻게 얻습니까?

때 보인다 sudo사용하여이 내려 보내고 sudo -u $user루트의 환경이 여전히 사용되고 있음. sudo사용자 환경을 어떻게 활용할 수 있습니까? 이 메모를 사용할 모든 사용자에게 로그인 쉘이있는 것은 아닙니다.



답변

시험 sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu


답변

man sudoers데비안에 다른 가능성이 언급되어 있습니다. 어떤 방법으로 원하는지 확실하지 않지만 질문에 env_reset옵션을 원한다고 들리는 것처럼 들립니다 /etc/sudoers. 반대는 기본적으로 env_keep목록입니다. 적절한를 설정하기 위해 HOME당신이 사용할 수있는 -H옵션을 ‘ sudo다시, 직접 또는 sudoers로, always_set_home옵션을 선택합니다.

또는 전달하려는 정확한 환경 env_file을 지정하는 데 사용할 수 있습니다 . 당신이 체크 아웃 그러나, 나는 그것이 최고라고 생각 에서 옵션을 하기 때문에, 컨트롤 모두 그가 설정하는 점이다.env_*man sudoers/etc/sudoers

env_resetsudoers파일에서 사용하는 컨텍스트의 일부는 다음과 같습니다 .

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year


답변

sudo를 보내고 환경 변수가 유지되지 않습니다.

제 경우에는 here-document를 사용 합니다 .

my_script.shHERE DOCUMENT 내부 와 같은 작업을 수행 합니다.

su -u some_user <<EOF
./my_script.sh
EOF

변수는 현재 사용자가 해석 한대로 여기에 직접 넣지 마십시오.

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

경우 $MY_VAR스크립트를 실행하는 사용자 설정되지 않습니다, 그것은 설정되지 않습니다.

스크립트 내에서 변수를 호출하거나로 이스케이프해야합니다 \.

예 :

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

여기 $MY_VAR에는 some_user상황에 맞는 가치가 있습니다.


답변