때 보인다 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_reset
내 sudoers
파일에서 사용하는 컨텍스트의 일부는 다음과 같습니다 .
Defaults !lecture
Defaults env_reset
Defaults syslog=auth
Defaults log_year
답변
때 sudo를 보내고 환경 변수가 유지되지 않습니다.
제 경우에는 here-document를 사용 합니다 .
my_script.sh
HERE 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
상황에 맞는 가치가 있습니다.